Files
ripe-cidr-collector/docs/plan-pin-dependencies.md
T

25 lines
2.5 KiB
Markdown
Raw Normal View History

# План: закрепление версий зависимостей (п. 1.2 рекомендаций)
## Цель
Сборка образа и запуск тестов воспроизводимы: завтрашняя сборка использует те же версии библиотек, что и сегодняшняя (риск 2 анализа). Обновление библиотек становится осознанным действием.
## Дизайн
- **Версии берутся из образа, на котором сейчас проходят 18 тестов** (`pip freeze` в контейнере, Python 3.11), поэтому поведение не меняется.
- `requirements.txt` и `requirements-dev.txt`: только прямые зависимости с точной версией (`==`), файлы остаются читаемыми.
- прод: `requests`, `fastapi`, `uvicorn`, `APScheduler`;
- разработка: `pytest`, `httpx`.
- `constraints.txt` (новый): полный список всех установленных пакетов, включая транзитивные (`starlette`, `pydantic`, `urllib3` и др.). Оба Dockerfile ставят пакеты с `-c constraints.txt`, поэтому закреплены и косвенные зависимости.
- Базовый образ `python:3.11-slim` не закрепляется по дайджесту (патчи безопасности Python приходят автоматически); это осознанный компромисс, указан в README.
- Порядок обновления (в README): поднять версии в контейнере, прогнать тесты, обновить `constraints.txt` из `pip freeze`, коммит.
## Изменения
1. `requirements.txt`, `requirements-dev.txt`: точные версии.
2. `constraints.txt`: новый файл.
3. `Dockerfile`, `Dockerfile.test`: копирование `constraints.txt`, установка с `-c`.
4. `README.md`: ручная установка с `-c constraints.txt`, порядок обновления версий.
5. Тестов не добавляется (код не меняется).
## Проверка
- Сборка обоих образов, 18 тестов проходят.
- В прод-образе `pip freeze` совпадает с закреплёнными версиями (нет лишних пакетов вроде `pytest`).
- Импорт `api_server` и `collector_daemon` в прод-образе.