76 lines
5.0 KiB
Makefile
76 lines
5.0 KiB
Makefile
# Эталонный фрагмент общих целей разработки для сервисов АРМ КА (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) и при -j, но `check: lint test` —
|
||
# пререквизиты, и при -j `lint` и `test` идут параллельно, поэтому остановка на первой упавшей проверке не гарантируется.
|
||
|
||
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
|