diff --git a/Makefile b/Makefile index aabbad2..2614cc6 100644 --- a/Makefile +++ b/Makefile @@ -2,20 +2,33 @@ VENV := api/.venv BIN := $(CURDIR)/$(VENV)/bin 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) COMPOSE_FILE ?= ../docs/dev/docker-compose.yml -.PHONY: venv install lint test test-integration test-fixtures golden-update golden-check check docker-build check-full up +.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: +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 0a72f5e..cb368db 100644 --- a/README.md +++ b/README.md @@ -308,6 +308,8 @@ openpyxl 0,58 с; синтетический лист в 2 млн ячеек (63 Библиотека не публикуется в PyPI. `make venv` устанавливает её из `../pylib_ai_arm_statements`; `make install` переустанавливает её после изменений. Путь можно задать через `STATEMENTS_DIR`. +Перед установкой обе цели сверяют checkout (`make statements-version`): его `VERSION` должен совпадать с версией +в `api/requirements.txt` (иначе ошибка), checkout не на теге `v<версия>` — предупреждение. `make docker-build` требует тег. | Модуль (`api/src/parser/statements/`) | Что делает | |---|---|