Срез 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/tests/unit/test_contract.py` (входит в `make check`).
|
||||||
- `api/src/scan_emulator/` — эмулятор ИС Сканирование (`SCAN_FIXTURES_DIR`, `SCAN_EMULATOR_DELAY`,
|
- `api/src/scan_emulator/` — эмулятор ИС Сканирование (`SCAN_FIXTURES_DIR`, `SCAN_EMULATOR_DELAY`,
|
||||||
`SCAN_EMULATOR_POLL_SECONDS`); в compose контейнера пока нет — `make emulator`.
|
`SCAN_EMULATOR_POLL_SECONDS`); в compose контейнера пока нет — `make emulator`.
|
||||||
- `Makefile` (`venv`, `lint`, `test`, `test-integration`, `check`, `check-full`, `up`, `emulator`), `api/pyproject.toml`
|
- `Makefile` (`venv`, `lint`, `test`, `test-integration`, `check`, `docker-build`, `check-full`, `up`,
|
||||||
(ruff, mypy), `Dockerfile` + `.dockerignore` (один образ: шлюз и эмулятор), `api/.env.example`, `api/.env.test`.
|
`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`.
|
- Тесты: `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/<срез>/
|
# docs/dev — соседний репозиторий и в основном workspace, и в worktree .wt/<срез>/
|
||||||
COMPOSE_FILE ?= ../docs/dev/docker-compose.yml
|
COMPOSE_FILE ?= ../docs/dev/docker-compose.yml
|
||||||
COMPOSE_PROJECT ?= arm-ka
|
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:
|
help:
|
||||||
@echo "venv - окружение api/.venv (Python 3.11) с зависимостями без raisa_*"
|
@echo "venv - окружение api/.venv (Python 3.11) с зависимостями без raisa_*"
|
||||||
@ -14,7 +15,8 @@ help:
|
|||||||
@echo "test - pytest без интеграционных тестов"
|
@echo "test - pytest без интеграционных тестов"
|
||||||
@echo "test-integration - интеграционные тесты (нужны NATS и MinIO: make up)"
|
@echo "test-integration - интеграционные тесты (нужны NATS и MinIO: make up)"
|
||||||
@echo "check - lint + test"
|
@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 "up - поднять NATS/MinIO/PostgreSQL общим compose-проектом arm-ka"
|
||||||
@echo "emulator - запустить эмулятор ИС Сканирование (python -m src.scan_emulator)"
|
@echo "emulator - запустить эмулятор ИС Сканирование (python -m src.scan_emulator)"
|
||||||
|
|
||||||
@ -37,8 +39,17 @@ test-integration:
|
|||||||
|
|
||||||
check: lint test
|
check: lint test
|
||||||
|
|
||||||
# Полная проверка перед PR. Сборку docker-образа добавит задача 15
|
# Образ собирается без Nexus (raisa_* в образ не ставятся, см. Dockerfile). Тесты в образе не запускаются:
|
||||||
check-full: check test-integration
|
# 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 нет.
|
# Общий compose-проект workspace (arm-ka): его используют и другие сервисы, поэтому целей down/stop/restart нет.
|
||||||
# --wait — только со списком долгоживущих сервисов: одноразовый minio-init завершается кодом 0, и compose считает это сбоем
|
# --wait — только со списком долгоживущих сервисов: одноразовый minio-init завершается кодом 0, и compose считает это сбоем
|
||||||
|
|||||||
@ -180,7 +180,8 @@ curl -s localhost:8000/healthcheck
|
|||||||
```bash
|
```bash
|
||||||
make check # lint (ruff check, ruff format --check, mypy src) + test (pytest -m "not integration")
|
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 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` и разрешается
|
Тесты запускаются из `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` (нет репозитория — тесты пропускаются).
|
исключается из `make test`; `fixtures` — нужны реальные данные из `../fixtures` (нет репозитория — тесты пропускаются).
|
||||||
Тесты: `api/tests/unit/`, `api/tests/integration/`. Интеграционные тесты делят NATS с другими сервисами workspace:
|
Тесты: `api/tests/unit/`, `api/tests/integration/`. Интеграционные тесты делят NATS с другими сервисами workspace:
|
||||||
если в нём работает другой экземпляр `scan-gateway`, он может забрать запрос теста из queue group.
|
если в нём работает другой экземпляр `scan-gateway`, он может забрать запрос теста из queue group.
|
||||||
Сборка Docker-образа в `make check-full` пока не входит.
|
Шаги `make check-full` идут последовательно и прерываются на первой ошибке; тесты в образе не запускаются.
|
||||||
|
|
||||||
## `/healthcheck`
|
## `/healthcheck`
|
||||||
|
|
||||||
@ -221,4 +222,4 @@ make check-full # check + test-integration; перед PR
|
|||||||
- Режим `smb` покрыт unit-тестами с подменённым `smbclient`; на реальной шаре ИС Сканирование не проверялся. Фактические
|
- Режим `smb` покрыт unit-тестами с подменённым `smbclient`; на реальной шаре ИС Сканирование не проверялся. Фактические
|
||||||
имена каталогов и путь шары на стенде неизвестны — они настраиваются, а не зашиты в код.
|
имена каталогов и путь шары на стенде неизвестны — они настраиваются, а не зашиты в код.
|
||||||
- Повторной отправки в ИС нет (OQ-15); падение шлюза после ack теряет задание до `reply_deadline` ядра.
|
- Повторной отправки в ИС нет (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`
|
### 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
|
### Task 16: [6.3] Прогон DoD
|
||||||
|
|
||||||
|
|||||||
@ -65,7 +65,7 @@
|
|||||||
MinIO `uploads/…`, опубликовать `request-image.json`, собрать `recognition.result`: `processing`, затем
|
MinIO `uploads/…`, опубликовать `request-image.json`, собрать `recognition.result`: `processing`, затем
|
||||||
`NOT_IMPLEMENTED` с `raw_s3_key`; проверить объект `raw/<job_id>.json` в MinIO; второй запрос с `unknown.pdf` →
|
`NOT_IMPLEMENTED` с `raw_s3_key`; проверить объект `raw/<job_id>.json` в MinIO; второй запрос с `unknown.pdf` →
|
||||||
`INVALID_DOCUMENT`; проверка: зелёный
|
`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`
|
на ветке `feat/1-slice-0-skeleton`
|
||||||
- [ ] 6.3 Прогон DoD: `make up` → `make check-full` → ручная проверка из `docs/dev/README.md`; `openspec validate
|
- [ ] 6.3 Прогон DoD: `make up` → `make check-full` → ручная проверка из `docs/dev/README.md`; `openspec validate
|
||||||
slice-0-skeleton --strict`; вывод `make check-full` — в описание PR
|
slice-0-skeleton --strict`; вывод `make check-full` — в описание PR
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user