# ---------------------------------------------------------------------------
# Инструменты контроля качества и безопасности кода.
#
# Само учебное приложение НЕ ТРЕБУЕТ НИЧЕГО, кроме Python: и sqlite3,
# и unittest входят в стандартную библиотеку. Этот файл нужен только для
# пятой пары — и только если на рабочем месте есть интернет.
#
# Установка:
#     py -m pip install -r requirements-dev.txt
#
# Если интернета нет — пропустите установку и работайте по бумажному
# чек-листу правил кодирования из файла «04 - Практические задания.md».
# Ни одно задание дня на этих пакетах не завязано.
#
# Версии ограничены сверху, чтобы новая мажорная версия инструмента не сломала
# конвейер внезапно. ВАЖНО понимать границу этого приёма:
#
#   Диапазон версий — это НЕ воспроизводимая сборка. Установка сегодня и
#   через месяц даст разный набор пакетов: подтянутся новые минорные версии
#   и другие транзитивные зависимости. Для настоящей воспроизводимости нужен
#   lock-файл с точными версиями и хешами каждого пакета — например,
#   `pip-compile --generate-hashes` (pip-tools), `uv lock` или `poetry.lock`,
#   а установка выполняется с `--require-hashes`. Тогда сборка на машине
#   разработчика, на сборочном сервере и у проверяющего даёт бит в бит
#   одинаковый результат.
#
# Здесь диапазоны оставлены сознательно: на учебном занятии lock-файл только
# мешал бы (он привязан к платформе и версии Python), а сам приём разбирается
# отдельно в тематическом модуле о воспроизводимых сборках.
#
# Точно так же и `pip-audit` в конвейере — это лишь одна операция процесса
# 5.16 «Композиционный анализ» ГОСТ Р 56939-2024, а не весь процесс. Полный
# процесс включает ещё перечень компонентов (SBOM), правила допуска
# компонентов, контроль лицензий, регламент реагирования на найденные
# уязвимости и записи обо всём этом.
# ---------------------------------------------------------------------------

ruff>=0.5,<1.0          # линтер и форматтер: стиль, мёртвый код, опечатки
bandit>=1.7,<2.0        # SAST для Python: ищет опасные конструкции
pip-audit>=2.7,<3.0     # SCA: проверяет зависимости по базам уязвимостей
pytest>=8.0,<10.0       # запуск тестов (unittest-тесты он тоже понимает)
mypy>=1.10,<2.0         # проверка аннотаций типов

# Перед демонстрацией преподаватель проверяет доступность инструментов:
#   py -m ruff --version
#   py -m pytest --version
#   py -X utf8 -m bandit --version
#   py -m pip_audit --version
#   py -m mypy --version
