.PHONY: help install up down logs migrate downgrade revision run worker \ test test-unit test-integration lint fmt typecheck imports secrets check smoke psql redis-cli COMPOSE := docker compose -f deploy/docker-compose.dev.yml help: ## 列出所有目标 @grep -hE '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) \ | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-18s\033[0m %s\n", $$1, $$2}' # ── 环境 ──────────────────────────────────────────────────────────────────── install: ## 安装依赖(uv 管理,含开发依赖) uv sync --extra dev uv run pre-commit install up: ## 起 PostgreSQL(pgvector) + Redis $(COMPOSE) up -d postgres redis down: ## 停容器(保留数据卷) $(COMPOSE) down logs: ## 跟踪容器日志 $(COMPOSE) logs -f --tail=100 psql: ## 连进数据库 $(COMPOSE) exec postgres psql -U meida -d meida redis-cli: ## 连进 Redis $(COMPOSE) exec redis redis-cli # ── 数据库 ────────────────────────────────────────────────────────────────── migrate: ## 迁移到最新版本 uv run alembic upgrade head downgrade: ## 回退一个版本 uv run alembic downgrade -1 revision: ## 生成迁移脚本:make revision m="描述" uv run alembic revision --autogenerate -m "$(m)" # ── 运行 ──────────────────────────────────────────────────────────────────── run: ## 本地起 API(热重载) uv run uvicorn apps.api.main:app --reload --host 0.0.0.0 --port 8000 worker: ## 本地起 Celery worker uv run celery -A apps.worker.celery_app.celery_app worker -Q cpu,io -l INFO # ── 质量防线(与 CI 一致,见 .github/workflows/ci.yml)───────────────────── lint: ## ruff 检查 + 格式校验 uv run ruff check . uv run ruff format --check . fmt: ## 自动修复与格式化 uv run ruff check --fix . uv run ruff format . typecheck: ## mypy(domain 与 llm 为 strict) uv run mypy packages/domain packages/llm uv run mypy apps packages/shared packages/identity packages/billing packages/task \ packages/agent packages/compliance packages/analytics packages/storage imports: ## 分层依赖契约(架构文档 §4.2) uv run lint-imports secrets: ## 敏感信息扫描 uv run detect-secrets scan --baseline .secrets.baseline test: test-unit ## 默认只跑单测(不连库、不发网络请求) test-unit: uv run pytest test-integration: ## 需要 make up && make migrate MEIDA_RUN_INTEGRATION=1 uv run pytest -m integration golden: ## 黄金集回归(需要 PG;指标退化即失败,T-P2-11) MEIDA_RUN_INTEGRATION=1 uv run pytest -m golden --no-cov check: lint typecheck imports test secrets ## 提交前一把过 # ── 真实链路验证(会花钱)────────────────────────────────────────────────── smoke: ## 真调 DeepSeek,打印 ob_ai_call 与 bl_ledger bash scripts/smoke.sh