Exact versions for direct dependencies, full pip freeze of the tested image as constraints, both Dockerfiles install with -c constraints.txt. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
26 lines
2.5 KiB
Markdown
26 lines
2.5 KiB
Markdown
# План: закрепление версий зависимостей (п. 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` в прод-образе.
|