25 lines
2.5 KiB
Markdown
25 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` в прод-образе.
|