На свежем томе `up -d --wait postgres nats minio` не запускал одноразовый `minio-init`, и интеграционные тесты падали на NoSuchBucket. Добавлен шаг `docker compose run --rm minio-init` (идемпотентно, `--ignore-existing`, код выхода пробрасывается); комментарий и help цели поправлены. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
65 lines
4.0 KiB
Makefile
65 lines
4.0 KiB
Makefile
# Команды разработки scan-gateway. Запуск из корня репозитория; рецепты сами переходят в api/ (как и в arm-core),
|
||
# поэтому backend-команды работают с каталогом api/ и окружением api/.venv.
|
||
VENV := api/.venv
|
||
BIN := $(CURDIR)/$(VENV)/bin
|
||
# docs/dev — соседний репозиторий и в основном workspace, и в worktree .wt/<срез>/
|
||
COMPOSE_FILE ?= ../docs/dev/docker-compose.yml
|
||
COMPOSE_PROJECT ?= arm-ka
|
||
IMAGE ?= scan-gateway:dev
|
||
|
||
.PHONY: help venv lint test test-integration check docker-build check-full up emulator
|
||
|
||
help:
|
||
@echo "venv - окружение api/.venv (Python 3.11) с зависимостями без raisa_*"
|
||
@echo "lint - ruff check, ruff format --check, mypy src"
|
||
@echo "test - pytest без интеграционных тестов"
|
||
@echo "test-integration - интеграционные тесты (нужны NATS и MinIO: make up)"
|
||
@echo "check - lint + test"
|
||
@echo "docker-build - собрать docker-образ $(IMAGE) (контекст — корень репозитория)"
|
||
@echo "check-full - check + test-integration + docker-build (по порядку, до первой ошибки)"
|
||
@echo "up - поднять NATS/MinIO/PostgreSQL общим compose-проектом arm-ka и создать бакет (minio-init)"
|
||
@echo "emulator - запустить эмулятор ИС Сканирование (python -m src.scan_emulator)"
|
||
|
||
# Python 3.11 (версия платформы); внутренние пакеты raisa_* вне банка недоступны — пропускаем их
|
||
venv:
|
||
cd api && uv venv --python 3.11 --allow-existing .venv
|
||
cd api && grep -v '^raisa_' requirements.txt | uv pip install --python .venv/bin/python -r -
|
||
cd api && grep -v '^-r' requirements-dev.txt | uv pip install --python .venv/bin/python -r -
|
||
|
||
lint:
|
||
cd api && $(BIN)/ruff check .
|
||
cd api && $(BIN)/ruff format --check .
|
||
cd api && $(BIN)/mypy src
|
||
|
||
test:
|
||
cd api && $(BIN)/pytest -m "not integration"
|
||
|
||
test-integration:
|
||
cd api && $(BIN)/pytest -m integration
|
||
|
||
check: lint test
|
||
|
||
# Образ собирается без Nexus (raisa_* в образ не ставятся, см. Dockerfile). Тесты в образе не запускаются:
|
||
# tests/ в нём есть, но api/.env.test исключён через .dockerignore, поэтому pytest внутри контейнера не пройдёт.
|
||
docker-build:
|
||
docker build -t $(IMAGE) .
|
||
|
||
# Полная проверка перед PR. Шаги вызываются последовательно через $(MAKE), а не как пререквизиты:
|
||
# так порядок check -> test-integration -> docker-build и остановка на первой ошибке гарантированы и при make -j.
|
||
check-full:
|
||
$(MAKE) check
|
||
$(MAKE) test-integration
|
||
$(MAKE) docker-build
|
||
|
||
# Общий compose-проект workspace (arm-ka): его используют и другие сервисы, поэтому целей down/stop/restart нет.
|
||
# --wait — только со списком долгоживущих сервисов: одноразовый minio-init завершается кодом 0, и compose считает это сбоем.
|
||
# Поэтому бакет создаётся отдельным шагом: `run --rm minio-init` (идемпотентно: `mc mb --ignore-existing`; на свежем
|
||
# томе без него интеграционные тесты падают на NoSuchBucket). Код выхода шага пробрасывается в make.
|
||
up:
|
||
docker compose -f $(COMPOSE_FILE) --project-name $(COMPOSE_PROJECT) up -d --wait postgres nats minio
|
||
docker compose -f $(COMPOSE_FILE) --project-name $(COMPOSE_PROJECT) run --rm minio-init
|
||
|
||
# Эмулятор ИС Сканирование (параметры — SCAN_HOTFOLDER_PATH, SCAN_FIXTURES_DIR, SCAN_EMULATOR_DELAY из api/.env)
|
||
emulator:
|
||
cd api && $(BIN)/python -m src.scan_emulator
|