Срез 0 [6.2]: make check-full = check + test-integration + docker-build

Добавлена цель docker-build (IMAGE ?= scan-gateway:dev, контекст — корень репозитория).
check-full вызывает шаги последовательно через $(MAKE), поэтому порядок и остановка на
первой ошибке гарантированы и при make -j. README/CLAUDE.md и help приведены в соответствие,
отмечены задача 15 плана и пункт 6.2 tasks.md.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Andrey Epifancev 2026-10-04 04:38:16 +04:00
parent e2286354c9
commit 27fe24cb5e
5 changed files with 24 additions and 11 deletions

View File

@ -44,6 +44,7 @@ SMB-сессия, S3, NATS, воркер; `GET /healthcheck`; gzip/proxy middlew
проверяет `api/tests/unit/test_contract.py` (входит в `make check`).
- `api/src/scan_emulator/` — эмулятор ИС Сканирование (`SCAN_FIXTURES_DIR`, `SCAN_EMULATOR_DELAY`,
`SCAN_EMULATOR_POLL_SECONDS`); в compose контейнера пока нет — `make emulator`.
- `Makefile` (`venv`, `lint`, `test`, `test-integration`, `check`, `check-full`, `up`, `emulator`), `api/pyproject.toml`
(ruff, mypy), `Dockerfile` + `.dockerignore` (один образ: шлюз и эмулятор), `api/.env.example`, `api/.env.test`.
- `Makefile` (`venv`, `lint`, `test`, `test-integration`, `check`, `docker-build`, `check-full`, `up`,
`emulator`), `api/pyproject.toml` (ruff, mypy), `Dockerfile` + `.dockerignore` (один образ: шлюз и эмулятор),
`api/.env.example`, `api/.env.test`.
- Тесты: `api/tests/unit/`, `api/tests/integration/` (маркеры `integration`, `fixtures`); перед PR — `make check-full`.

View File

@ -5,8 +5,9 @@ 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 check-full up emulator
.PHONY: help venv lint test test-integration check docker-build check-full up emulator
help:
@echo "venv - окружение api/.venv (Python 3.11) с зависимостями без raisa_*"
@ -14,7 +15,8 @@ help:
@echo "test - pytest без интеграционных тестов"
@echo "test-integration - интеграционные тесты (нужны NATS и MinIO: make up)"
@echo "check - lint + test"
@echo "check-full - check + test-integration"
@echo "docker-build - собрать docker-образ $(IMAGE) (контекст — корень репозитория)"
@echo "check-full - check + test-integration + docker-build (по порядку, до первой ошибки)"
@echo "up - поднять NATS/MinIO/PostgreSQL общим compose-проектом arm-ka"
@echo "emulator - запустить эмулятор ИС Сканирование (python -m src.scan_emulator)"
@ -37,8 +39,17 @@ test-integration:
check: lint test
# Полная проверка перед PR. Сборку docker-образа добавит задача 15
check-full: check test-integration
# Образ собирается без 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 считает это сбоем

View File

@ -180,7 +180,8 @@ curl -s localhost:8000/healthcheck
```bash
make check # lint (ruff check, ruff format --check, mypy src) + test (pytest -m "not integration")
make test-integration # pytest -m integration: нужны NATS и MinIO (make up)
make check-full # check + test-integration; перед PR
make docker-build # docker build -t scan-gateway:dev . (образ без Nexus)
make check-full # check + test-integration + docker-build; перед PR
```
Тесты запускаются из `api/`: `.env.test` подключается через `ENV_FILE=.env.test` в `api/pytest.ini` и разрешается
@ -188,7 +189,7 @@ make check-full # check + test-integration; перед PR
исключается из `make test`; `fixtures` — нужны реальные данные из `../fixtures` (нет репозитория — тесты пропускаются).
Тесты: `api/tests/unit/`, `api/tests/integration/`. Интеграционные тесты делят NATS с другими сервисами workspace:
если в нём работает другой экземпляр `scan-gateway`, он может забрать запрос теста из queue group.
Сборка Docker-образа в `make check-full` пока не входит.
Шаги `make check-full` идут последовательно и прерываются на первой ошибке; тесты в образе не запускаются.
## `/healthcheck`
@ -221,4 +222,4 @@ make check-full # check + test-integration; перед PR
- Режим `smb` покрыт unit-тестами с подменённым `smbclient`; на реальной шаре ИС Сканирование не проверялся. Фактические
имена каталогов и путь шары на стенде неизвестны — они настраиваются, а не зашиты в код.
- Повторной отправки в ИС нет (OQ-15); падение шлюза после ack теряет задание до `reply_deadline` ядра.
- Контейнер `scan-emulator` в compose отсутствует, сборка образа в `make check-full` не входит.
- Контейнер `scan-emulator` в compose отсутствует.

View File

@ -76,7 +76,7 @@
### Task 15: [6.2] `make check-full`
- [ ] `make check-full`: `make check` + `pytest -m integration` + `docker build`; проверка: зелёный против compose docs на ветке `feat/1-slice-0-skeleton`
- [x] `make check-full`: `make check` + `pytest -m integration` + `docker build`; проверка: зелёный против compose docs на ветке `feat/1-slice-0-skeleton`
### Task 16: [6.3] Прогон DoD

View File

@ -65,7 +65,7 @@
MinIO `uploads/…`, опубликовать `request-image.json`, собрать `recognition.result`: `processing`, затем
`NOT_IMPLEMENTED` с `raw_s3_key`; проверить объект `raw/<job_id>.json` в MinIO; второй запрос с `unknown.pdf` →
`INVALID_DOCUMENT`; проверка: зелёный
- [ ] 6.2 `make check-full`: `make check` + `pytest -m integration` + `docker build`; проверка: зелёный против compose docs
- [x] 6.2 `make check-full`: `make check` + `pytest -m integration` + `docker build`; проверка: зелёный против compose docs
на ветке `feat/1-slice-0-skeleton`
- [ ] 6.3 Прогон DoD: `make up` → `make check-full` → ручная проверка из `docs/dev/README.md`; `openspec validate
slice-0-skeleton --strict`; вывод `make check-full` — в описание PR