arm-scan-gateway/Makefile
2026-10-18 19:40:03 +04:00

81 lines
5.3 KiB
Makefile
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Команды разработки 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
ARM_KA_DOCS ?= ../docs
.PHONY: help venv lint test test-integration check docker-build check-full statements-check up emulator golden-update
help:
@echo "venv - окружение api/.venv (Python 3.11) с зависимостями без raisa_*"
@echo "lint - ruff check, ruff format --check, mypy src arm_statements"
@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 "statements-check - свежесть копии api/arm_statements (sync-statements --check), входит в check-full"
@echo "up - поднять NATS/MinIO/PostgreSQL общим compose-проектом arm-ka и создать бакет (minio-init)"
@echo "emulator - запустить эмулятор ИС Сканирование (python -m src.scan_emulator)"
@echo "golden-update - пересобрать эталоны нормализатора ../fixtures/ocr/expected_normalize/ (diff смотреть в fixtures)"
# 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 arm_statements
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) statements-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
# Эталоны нормализатора на реальных ответах ИС: пишет ../fixtures/ocr/expected_normalize/<name>.json; diff смотреть в fixtures
golden-update:
cd api && $(BIN)/python -m tests.golden_update
# Свежесть копии api/arm_statements/ (../docs/dev/checks.md): 0 — синхронна; 10 — отстала или перечень кодов в docs
# новее (цель зелёная, предупреждение вписать в описание PR); 20 и 2 — красная. Читает ../docs и ../arm-statements,
# поэтому только в check-full, не в check
statements-check:
@rc=0; $(ARM_KA_DOCS)/scripts/sync-statements.sh --check --host-dir . || rc=$$?; \
if [ $$rc -eq 10 ]; then echo "statements-check: ПРЕДУПРЕЖДЕНИЕ — впишите в описание PR"; \
elif [ $$rc -ne 0 ]; then exit $$rc; fi