arm-ka-docs/dev/Makefile.common
Andrey Epifancev b08df040e9 build(dev): Makefile.common — эталонный фрагмент общих целей сервисов
Цели venv, lint, test, test-integration, check, docker-build, check-full, up
по эталону scan-gateway; различия сервисов вынесены в переменные
(MYPY_PATHS, IMAGE, COMPOSE_*, CHECK_FULL_STEPS).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-04 05:26:51 +04:00

75 lines
4.8 KiB
Makefile
Raw 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.

# Эталонный фрагмент общих целей разработки для сервисов АРМ КА (arm-core, tabular-parser, scan-gateway).
# Описание целей и порядок проверок перед PR — dev/checks.md. Источник эталона: Makefile scan-gateway.
#
# Подключение (два способа, смысл одинаков):
# 1. include (в workspace и в worktree .wt/<срез>/ docs лежит рядом с сервисом):
# include ../docs/dev/Makefile.common
# Ставьте include ПОСЛЕ первой собственной цели сервиса или задайте `.DEFAULT_GOAL := check`,
# иначе целью по умолчанию станет `venv` (первая цель этого файла).
# 2. копирование: скопируйте содержимое в Makefile сервиса, не меняя рецепты общих целей.
#
# Запуск — из корня репозитория сервиса; рецепты сами переходят в api/ и используют окружение api/.venv.
# Все переменные заданы через `?=`: сервис переопределяет их до include (или в командной строке: make up COMPOSE_PROJECT=x).
#
# VENV каталог окружения относительно корня сервиса (api/.venv)
# BIN каталог исполняемых файлов окружения (абсолютный путь, строится от $(CURDIR))
# MYPY_PATHS что проверяет mypy (src; у arm-core: src scripts)
# COMPOSE_FILE compose-файл инфраструктуры (../docs/dev/docker-compose.yml)
# COMPOSE_PROJECT имя compose-проекта; общее для всех сервисов workspace (arm-ka), поэтому целей down/stop/restart нет
# IMAGE тег docker-образа (по умолчанию — имя каталога сервиса)
# CHECK_FULL_STEPS цели `check-full` по порядку; сервис дописывает свои (arm-core: check dbml-check check-infra
# test-integration docker-build web-check). Собственные цели сервиса (migrate, seed, web-check ...)
# определяются в его Makefile, не здесь.
#
# Запускайте без `make -j`: шаги check-full вызываются последовательно через $(MAKE) и останавливаются на первой ошибке.
VENV ?= api/.venv
BIN ?= $(CURDIR)/$(VENV)/bin
MYPY_PATHS ?= src
COMPOSE_FILE ?= ../docs/dev/docker-compose.yml
COMPOSE_PROJECT ?= arm-ka
IMAGE ?= $(notdir $(CURDIR))
CHECK_FULL_STEPS ?= check test-integration docker-build
# Перевод строки для $(foreach ...) в рецепте: каждый шаг становится отдельной строкой рецепта (две пустые строки обязательны)
define newline
endef
.PHONY: venv lint test test-integration check docker-build check-full up
# Python 3.11 (версия платформы); внутренние пакеты raisa_* вне банка недоступны — пропускаем их
venv:
cd api && uv venv --python 3.11 --allow-existing .venv
cd api && grep -v '^raisa_' 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 -
lint:
cd api && $(BIN)/ruff check .
cd api && $(BIN)/ruff format --check .
cd api && $(BIN)/mypy $(MYPY_PATHS)
test:
cd api && $(BIN)/pytest -m "not integration"
test-integration:
cd api && $(BIN)/pytest -m integration
check: lint test
# Образ собирается из корня репозитория; тесты в образе не запускаются
docker-build:
docker build -t $(IMAGE) .
# Полная проверка перед PR. Шаги вызываются последовательно через $(MAKE), а не как пререквизиты:
# порядок и остановка на первой ошибке гарантированы и при make -j.
check-full:
$(foreach step,$(CHECK_FULL_STEPS),$(MAKE) $(step)$(newline))
# Общий compose-проект workspace. --wait — только со списком долгоживущих сервисов: одноразовый minio-init
# завершается кодом 0, и compose считает это сбоем. Бакет arm-ka создаётся отдельным идемпотентным шагом.
up:
docker compose -f $(COMPOSE_FILE) --project-name $(COMPOSE_PROJECT) up -d --wait postgres nats minio
docker compose -f $(COMPOSE_FILE) --project-name $(COMPOSE_PROJECT) run --rm minio-init