From b9e1cbe617ec7ceeb1bb43660f6a7310063dee5c Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Tue, 27 Oct 2026 17:07:13 +0400 Subject: [PATCH] =?UTF-8?q?statements-version:=20=D1=81=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D0=BA=D0=B0=20checkout=20=D0=B1=D0=B8=D0=B1=D0=BB=D0=B8=D0=BE?= =?UTF-8?q?=D1=82=D0=B5=D0=BA=D0=B8=20=D1=81=20requirements.txt=20=D0=B2?= =?UTF-8?q?=20make=20venv/install;=20=D1=82=D0=B5=D0=B3=20=E2=80=94=20?= =?UTF-8?q?=D0=B8=D0=B7=20requirements=20(AURORA-1677)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- Makefile | 22 ++++++++++++++++++---- README.md | 2 ++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 40cb4cb..9af97cf 100644 --- a/Makefile +++ b/Makefile @@ -7,13 +7,15 @@ COMPOSE_FILE ?= ../docs/dev/docker-compose.yml COMPOSE_PROJECT ?= arm-ka IMAGE ?= scan-gateway:dev STATEMENTS_DIR ?= ../pylib_ai_arm_statements -STATEMENTS_TAG ?= v0.1.1 +# Тег выпуска библиотеки — по версии, закреплённой в api/requirements.txt +STATEMENTS_TAG ?= v$(shell sed -n 's/^pylib_ai_arm_statements==//p' api/requirements.txt) -.PHONY: help venv install lint test test-integration check docker-build check-full up emulator golden-update +.PHONY: help venv install statements-version lint test test-integration check docker-build check-full up emulator golden-update help: @echo "venv - окружение api/.venv (Python 3.11) с зависимостями и локальной библиотекой arm_statements" @echo "install - установить или переустановить локальную библиотеку arm_statements" + @echo "statements-version - сверить checkout библиотеки (STATEMENTS_DIR) с версией в api/requirements.txt" @echo "lint - ruff check, ruff format --check, mypy src" @echo "test - pytest без интеграционных тестов" @echo "test-integration - интеграционные тесты (нужны NATS и MinIO: make up)" @@ -24,15 +26,27 @@ help: @echo "emulator - запустить эмулятор ИС Сканирование (python -m src.scan_emulator)" @echo "golden-update - пересобрать эталоны нормализатора ../fixtures/ocr/expected_normalize/ (diff смотреть в fixtures)" +# Сверка 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: +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: +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)" diff --git a/README.md b/README.md index 5311f3b..9d6eb3c 100644 --- a/README.md +++ b/README.md @@ -147,6 +147,8 @@ ack (с `attempt` повторного запроса); файл в ИС вто §11.9). Это библиотека `pylib_ai_arm_statements==0.1.1` с импортом `arm_statements`. В PyPI она не публикуется: `make venv` устанавливает её из `../pylib_ai_arm_statements`, `make install` переустанавливает библиотеку после изменений. Путь можно задать через `STATEMENTS_DIR`. +Перед установкой обе цели сверяют checkout (`make statements-version`): его `VERSION` должен совпадать с версией +в `api/requirements.txt` (иначе ошибка), checkout не на теге `v<версия>` — предупреждение. `make docker-build` требует тег. Словари (редакции форм, двойники, `label` → тип) живут в библиотеке (`default_rules()`) и обновляются вместе с ней.