# 默认目标:显示帮助 .DEFAULT_GOAL := help # ===== 后端(Python / FastAPI,uv 管理) ===== .PHONY: backend-setup backend-setup: ## 安装后端依赖(uv sync) cd backend && uv sync .PHONY: backend-dev backend-dev: ## 启动后端开发服务(127.0.0.1:8000) cd backend && uv run --env-file .env uvicorn app.main:app --reload --host 127.0.0.1 --port 8000 .PHONY: backend-test backend-test: ## 运行后端测试(pytest) cd backend && uv run pytest .PHONY: backend-lint backend-lint: ## 后端静态检查(ruff + mypy) cd backend && uv run ruff check . && uv run mypy app .PHONY: mock-model mock-model: ## 启动开发档 Mock 模型服务(127.0.0.1:8001,联调 Run 流水线) cd backend && uv run python scripts/mock_model.py # ===== 灵台引擎(C++23 / CMake) ===== .PHONY: engine-build engine-build: ## 构建灵台引擎(CMake + Ninja/Makefile) cmake -S engine -B engine/build -DCMAKE_BUILD_TYPE=Release && cmake --build engine/build .PHONY: engine-test engine-test: ## 运行灵台引擎测试(ctest) cmake -S engine -B engine/build -DCMAKE_BUILD_TYPE=Debug && cmake --build engine/build && ctest --test-dir engine/build --output-on-failure # ===== 数据库(PostgreSQL 统一,ADR-024) ===== .PHONY: docker-up docker-up: ## 启动本地 PostgreSQL(docker compose) docker compose -f docker/docker-compose.yml up -d .PHONY: docker-down docker-down: ## 停止本地 PostgreSQL docker compose -f docker/docker-compose.yml down .PHONY: backend-migrate backend-migrate: ## 执行数据库迁移(Alembic upgrade head) cd backend && uv run alembic upgrade head # ===== 契约(OpenAPI 3.1 单一真源) ===== .PHONY: openapi-lint openapi-lint: ## 校验 OpenAPI 契约(redocly lint + bundle) npx --yes @redocly/cli@latest lint openapi/openapi.yaml --config openapi/redocly.yaml && npx --yes @redocly/cli@latest bundle openapi/openapi.yaml -o openapi/bundled.json .PHONY: generate generate: openapi-lint ## 生成代码(TypeScript 类型等) cd frontend && pnpm generate:api # ===== 灵台引擎 gRPC 服务(ADR-017 双形态) ===== .PHONY: lingtai-proto lingtai-proto: ## 重新生成 gRPC stub(proto 变更后执行) cd backend && uv run python -m grpc_tools.protoc -I../engine/proto \ --python_out=../engine/server/generated \ --grpc_python_out=../engine/server/generated \ liushen/v1/liushen.proto .PHONY: lingtai-server lingtai-server: ## 启动灵台引擎独立服务(开发档 127.0.0.1:50051;生产须 mTLS) cd backend && uv run python ../engine/server/lingtai_server.py # ===== 前端与桌面(Next.js / Tauri v2) ===== .PHONY: frontend-setup frontend-setup: ## 安装前端依赖 cd frontend && pnpm install .PHONY: frontend-dev frontend-dev: ## 启动前端开发服务(127.0.0.1:3000) cd frontend && pnpm dev # ===== 自托管与备份(WP-14) ===== .PHONY: selfhost-up selfhost-up: ## 启动自托管档(API + PostgreSQL,docker compose) docker compose -f docker/docker-compose.app.yml up -d --build .PHONY: selfhost-down selfhost-down: ## 停止自托管档 docker compose -f docker/docker-compose.app.yml down .PHONY: db-dump db-dump: ## 备份数据库到 backups/hunjing-<时间戳>.sql.gz @mkdir -p backups @docker exec hunjing-postgres pg_dump -U hunjing -d hunjing | gzip > backups/hunjing-$$(date +%Y%m%d-%H%M%S).sql.gz @echo "备份完成:backups/" .PHONY: db-restore db-restore: ## 从最新备份恢复(DB=备份文件路径,make db-restore FILE=backups/xxx.sql.gz) @gzip -dc $(FILE) | docker exec -i hunjing-postgres psql -U hunjing -d hunjing @echo "恢复完成" # ===== 帮助 ===== .PHONY: help help: ## 显示本帮助 @echo "Hunjing 统一命令入口(详见各目标 ## 说明)" @echo @grep -E '^[a-zA-Z_-]+:.*?## ' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-16s\033[0m %s\n", $$1, $$2}'