Срез 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:
parent
e2286354c9
commit
27fe24cb5e
@ -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`.
|
||||
|
||||
19
Makefile
19
Makefile
@ -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 считает это сбоем
|
||||
|
||||
@ -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 отсутствует.
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user