76 lines
4.7 KiB
Makefile
76 lines
4.7 KiB
Makefile
# Команды разработки tabular-parser. Backend — api/.venv; запуск из корня репозитория.
|
||
VENV := api/.venv
|
||
BIN := $(CURDIR)/$(VENV)/bin
|
||
STATEMENTS_DIR ?= ../pylib_ai_arm_statements
|
||
# Тег выпуска библиотеки — по версии, закреплённой в api/requirements.txt
|
||
STATEMENTS_TAG ?= v$(shell sed -n 's/^pylib_ai_arm_statements==//p' api/requirements.txt)
|
||
COMPOSE_FILE ?= ../docs/dev/docker-compose.yml
|
||
|
||
.PHONY: venv install statements-version lint test test-integration test-fixtures golden-update golden-check check docker-build check-full up
|
||
|
||
# Сверка checkout библиотеки с версией из api/requirements.txt (pylib_ai_arm_statements==<версия>): VERSION checkout
|
||
# не равен закреплённой — ошибка; checkout не на теге v<версия> — предупреждение (правка библиотеки до выпуска).
|
||
# docker-build требует тег строго.
|
||
statements-version:
|
||
@ver=$$(cat "$(STATEMENTS_DIR)/VERSION" 2>/dev/null) || \
|
||
{ echo "Ошибка: нет $(STATEMENTS_DIR)/VERSION — клонируйте RSHB/pylib_ai_arm_statements рядом или задайте STATEMENTS_DIR" >&2; exit 1; }; \
|
||
[ "v$$ver" = "$(STATEMENTS_TAG)" ] || \
|
||
{ echo "Ошибка: в $(STATEMENTS_DIR) версия $$ver, в api/requirements.txt — $(STATEMENTS_TAG:v%=%)" >&2; exit 1; }; \
|
||
release=$$(git -C "$(STATEMENTS_DIR)" rev-parse -q --verify "refs/tags/$(STATEMENTS_TAG)^{commit}"); \
|
||
[ -n "$$release" ] && [ "$$release" = "$$(git -C "$(STATEMENTS_DIR)" rev-parse HEAD)" ] || \
|
||
echo "Предупреждение: $(STATEMENTS_DIR) не на теге $(STATEMENTS_TAG) — ставится рабочее дерево библиотеки"
|
||
|
||
# Python 3.11; пропускаем внутренние raisa_* и устанавливаемые локально pylib_ai*
|
||
venv: statements-version
|
||
cd api && uv venv --python 3.11 --allow-existing .venv
|
||
cd api && grep -Ev '^(raisa_|pylib_ai)' 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 -
|
||
uv pip install --python "$(BIN)/python" --reinstall-package pylib-ai-arm-statements "$(STATEMENTS_DIR)"
|
||
|
||
# Установить или переустановить библиотеку в окружение backend.
|
||
install: statements-version
|
||
uv venv --python 3.11 --allow-existing "$(VENV)"
|
||
uv pip install --python "$(BIN)/python" --reinstall-package pylib-ai-arm-statements "$(STATEMENTS_DIR)"
|
||
|
||
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
|
||
|
||
# Тесты на реальных данных из ../fixtures (ARM_KA_FIXTURES): golden-снимки, покрытие словарей, property-тест
|
||
test-fixtures:
|
||
cd api && $(BIN)/pytest -m fixtures
|
||
|
||
# Golden-снимки разбора ОСВ: перезапись в ../fixtures/golden/expected_osv_parse/ + unified diff изменившихся.
|
||
# Результат обязательно просмотреть и коммитить в репозиторий fixtures отдельным коммитом (снимок — регрессия, не оракул)
|
||
golden-update:
|
||
cd api && ENV_FILE=.env.test $(BIN)/python scripts/golden_update.py
|
||
|
||
# То же без записи: код возврата 1, если снимки расходятся с разбором
|
||
golden-check:
|
||
cd api && ENV_FILE=.env.test $(BIN)/python scripts/golden_update.py --check
|
||
|
||
check: lint test
|
||
|
||
# Сборка образа из корня репозитория
|
||
docker-build:
|
||
@release=$$(git -C "$(STATEMENTS_DIR)" rev-parse --verify "refs/tags/$(STATEMENTS_TAG)^{commit}") || \
|
||
{ echo "Ошибка: в библиотеке отсутствует тег $(STATEMENTS_TAG); выполните git fetch --tags в $(STATEMENTS_DIR)" >&2; exit 1; }; \
|
||
head=$$(git -C "$(STATEMENTS_DIR)" rev-parse HEAD) || exit 1; \
|
||
[ "$$head" = "$$release" ] || \
|
||
{ echo "Ошибка: HEAD библиотеки не совпадает с $(STATEMENTS_TAG)" >&2; exit 1; }
|
||
docker build --build-context "statements=$(STATEMENTS_DIR)" -t tabular-parser .
|
||
|
||
# Полная проверка перед PR: быстрые проверки, затем NATS/MinIO из compose (make up), затем образ
|
||
check-full: check test-integration docker-build
|
||
|
||
# Только инфраструктура, нужная сервису (без arm-core): NATS и MinIO; postgres — для общей среды compose
|
||
up:
|
||
docker compose -f $(COMPOSE_FILE) up -d --wait postgres nats minio
|