build: копия arm_statements в линтерах и тестах, statements-check в check-full (#128)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
46ac9367ee
commit
197c358a22
@ -164,4 +164,5 @@
|
|||||||
- Алгоритмы — только из `../docs/context/05-domain-rules.md`; номер § — в docstring.
|
- Алгоритмы — только из `../docs/context/05-domain-rules.md`; номер § — в docstring.
|
||||||
- Вычисляемые объекты консолидации — `api/src/domain/`, без ORM-таблиц.
|
- Вычисляемые объекты консолидации — `api/src/domain/`, без ORM-таблиц.
|
||||||
- Фронт: пользователь слаб во фронте — для TS/React изменений делай ревью сам и объясняй решения в PR.
|
- Фронт: пользователь слаб во фронте — для TS/React изменений делай ревью сам и объясняй решения в PR.
|
||||||
|
- `api/arm_statements/` — копия пакета `arm-statements`, напрямую не править: обновление — `../docs/scripts/sync-statements.sh` (`--in-place` в PR фичи), свежесть — `make statements-check` (в `check-full`).
|
||||||
- OpenSpec: `openspec/` здесь; сквозные изменения — change в `../docs`.
|
- OpenSpec: `openspec/` здесь; сквозные изменения — change в `../docs`.
|
||||||
|
|||||||
15
Makefile
15
Makefile
@ -5,7 +5,7 @@ COMPOSE_FILE ?= ../docs/dev/docker-compose.yml
|
|||||||
# DBML относительно api/: и в основном workspace, и в worktree .wt/<срез>/ это соседний docs/
|
# DBML относительно api/: и в основном workspace, и в worktree .wt/<срез>/ это соседний docs/
|
||||||
DBML ?= ../../docs/model/data-model-v5.18.dbml
|
DBML ?= ../../docs/model/data-model-v5.18.dbml
|
||||||
|
|
||||||
.PHONY: venv lint test test-integration e2e dbml-check migration-cycle check check-infra docker-build web-check check-full up migrate seed seed-dev
|
.PHONY: venv lint test test-integration e2e dbml-check migration-cycle check check-infra docker-build web-check statements-check check-full up migrate seed seed-dev
|
||||||
|
|
||||||
# Python 3.11 (версия платформы); внутренние пакеты raisa_* вне банка недоступны — пропускаем их
|
# Python 3.11 (версия платформы); внутренние пакеты raisa_* вне банка недоступны — пропускаем их
|
||||||
venv:
|
venv:
|
||||||
@ -16,7 +16,7 @@ venv:
|
|||||||
lint:
|
lint:
|
||||||
cd api && $(BIN)/ruff check .
|
cd api && $(BIN)/ruff check .
|
||||||
cd api && $(BIN)/ruff format --check .
|
cd api && $(BIN)/ruff format --check .
|
||||||
cd api && $(BIN)/mypy src scripts
|
cd api && $(BIN)/mypy src scripts arm_statements
|
||||||
|
|
||||||
test:
|
test:
|
||||||
cd api && $(BIN)/pytest -m "not integration"
|
cd api && $(BIN)/pytest -m "not integration"
|
||||||
@ -56,11 +56,20 @@ web-check:
|
|||||||
cd web && npx tsc --noEmit
|
cd web && npx tsc --noEmit
|
||||||
cd web && npm run build
|
cd web && npm run build
|
||||||
|
|
||||||
|
# Свежесть копии api/arm_statements/ (../docs/dev/checks.md): 0 — синхронна; 10 — отстала или перечень кодов в docs
|
||||||
|
# новее (цель зелёная, предупреждение вписать в описание PR); 20 и 2 — красная. Читает ../docs и ../arm-statements,
|
||||||
|
# поэтому только в check-full, не в check
|
||||||
|
ARM_KA_DOCS ?= ../docs
|
||||||
|
statements-check:
|
||||||
|
@rc=0; $(ARM_KA_DOCS)/scripts/sync-statements.sh --check --host-dir . || rc=$$?; \
|
||||||
|
if [ $$rc -eq 10 ]; then echo "statements-check: ПРЕДУПРЕЖДЕНИЕ — впишите в описание PR"; \
|
||||||
|
elif [ $$rc -ne 0 ]; then exit $$rc; fi
|
||||||
|
|
||||||
# Полная проверка перед PR. Порядок: быстрые без БД (check, dbml-check), затем БД/NATS из compose (test-integration),
|
# Полная проверка перед PR. Порядок: быстрые без БД (check, dbml-check), затем БД/NATS из compose (test-integration),
|
||||||
# затем docker, затем web. Цикл миграций upgrade -> downgrade -> upgrade на чистой БД входит в test-integration
|
# затем docker, затем web. Цикл миграций upgrade -> downgrade -> upgrade на чистой БД входит в test-integration
|
||||||
# (tests/test_migrations.py), поэтому отдельным шагом не гоняется: второй запуск только удлинил бы прогон. e2e — после
|
# (tests/test_migrations.py), поэтому отдельным шагом не гоняется: второй запуск только удлинил бы прогон. e2e — после
|
||||||
# test-integration; без профиля `services` пропускается (не падает)
|
# test-integration; без профиля `services` пропускается (не падает)
|
||||||
check-full: check dbml-check check-infra test-integration e2e docker-build web-check
|
check-full: check statements-check dbml-check check-infra test-integration e2e docker-build web-check
|
||||||
|
|
||||||
up:
|
up:
|
||||||
docker compose -f $(COMPOSE_FILE) up -d
|
docker compose -f $(COMPOSE_FILE) up -d
|
||||||
|
|||||||
@ -12,7 +12,7 @@ select = ["E", "F", "I", "UP", "B", "PL"]
|
|||||||
"alembic/versions/*" = ["PLR0915"]
|
"alembic/versions/*" = ["PLR0915"]
|
||||||
|
|
||||||
[tool.ruff.lint.isort]
|
[tool.ruff.lint.isort]
|
||||||
known-first-party = ["src", "scripts"]
|
known-first-party = ["src", "scripts", "arm_statements"]
|
||||||
|
|
||||||
[tool.mypy]
|
[tool.mypy]
|
||||||
python_version = "3.11"
|
python_version = "3.11"
|
||||||
@ -22,10 +22,11 @@ plugins = ["pydantic.mypy"]
|
|||||||
mypy_path = "."
|
mypy_path = "."
|
||||||
explicit_package_bases = true
|
explicit_package_bases = true
|
||||||
|
|
||||||
|
# Копия общего кода (sync-statements, не править) — в строгом режиме, как в репозитории arm-statements.
|
||||||
# Строгий режим для ORM-моделей и чистого домена. `strict = true` в overrides mypy (2.x) применяет глобально,
|
# Строгий режим для ORM-моделей и чистого домена. `strict = true` в overrides mypy (2.x) применяет глобально,
|
||||||
# а не к модулю, поэтому флаги семейства strict перечислены явно.
|
# а не к модулю, поэтому флаги семейства strict перечислены явно.
|
||||||
[[tool.mypy.overrides]]
|
[[tool.mypy.overrides]]
|
||||||
module = ["src.models.*", "src.domain.*"]
|
module = ["src.models.*", "src.domain.*", "arm_statements", "arm_statements.*"]
|
||||||
disallow_any_generics = true
|
disallow_any_generics = true
|
||||||
disallow_subclassing_any = true
|
disallow_subclassing_any = true
|
||||||
disallow_untyped_calls = true
|
disallow_untyped_calls = true
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
pythonpath = .
|
pythonpath = .
|
||||||
testpaths =
|
testpaths =
|
||||||
tests
|
tests
|
||||||
|
arm_statements/tests
|
||||||
python_files =
|
python_files =
|
||||||
test_*.py
|
test_*.py
|
||||||
tests*.py
|
tests*.py
|
||||||
|
|||||||
@ -1,8 +1,9 @@
|
|||||||
# Инструменты разработки и проверок. Платформенные зависимости — в requirements.txt (не меняем).
|
# Инструменты разработки и проверок. Платформенные зависимости — в requirements.txt (не меняем).
|
||||||
# Нижние границы мажорных версий: воспроизводимо, но без конфликта с пинами платформы.
|
# Нижние границы мажорных версий: воспроизводимо, но без конфликта с пинами платформы.
|
||||||
-r requirements.txt
|
-r requirements.txt
|
||||||
ruff>=0.8
|
# ruff, mypy, types-PyYAML — те же версии, что в arm-statements (копия пакета проверяется конфигом хоста)
|
||||||
mypy>=1.13
|
ruff==0.16.10
|
||||||
|
mypy==2.4.0
|
||||||
pytest>=8.3
|
pytest>=8.3
|
||||||
pytest-asyncio>=0.24
|
pytest-asyncio>=0.24
|
||||||
pytest-env>=1.1
|
pytest-env>=1.1
|
||||||
@ -10,5 +11,5 @@ pytest-cov>=6.0
|
|||||||
PyJWT[crypto]==2.8.0
|
PyJWT[crypto]==2.8.0
|
||||||
pydbml>=1.1
|
pydbml>=1.1
|
||||||
jsonschema>=4.23
|
jsonschema>=4.23
|
||||||
types-PyYAML>=6.0
|
types-PyYAML==6.0.12.20260906
|
||||||
types-openpyxl>=3.1
|
types-openpyxl>=3.1
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user