76 lines
4.7 KiB
Makefile
Raw Permalink 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.

# Команды разработки 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