Files
hunjing/Makefile
T
chenxin 21eacc8c75 ✨ feat: WP-14 运营收口——诊断双授权、管理面治理、支持包、观测与自托管
- 迁移 16:diagnostic_grant(token 哈希唯一、15 分钟、单次、绑定 Run)+ user.role(user/admin 检查约束)
- 诊断双授权(ADR-004):本人签发 grant(明文 token 只返回一次,库存 SHA-256);读取需登录态 + Hunjing-Diagnostic-Token + Purpose 三重匹配;单次消耗(重放 401)、用途不符 403、响应 no-store/private;返回观测摘要(usage/TTFT/工具轨迹)不含消息正文
- 管理面:pending 司议案列表与处置(content_removed 联动下架目标内容——治理闭环);非管理员 403
- 脱敏支持包:统计聚合(runs/messages/tool/media 按状态),无正文无密钥
- 观测:GET /readyz(DB 连通)与 GET /metrics(Prometheus 文本,真实 SQL 聚合)
- 自托管:docker/Dockerfile.backend(uv 构建)+ docker-compose.app.yml(hunjing-api + hunjing-postgres 健康依赖、密码经 .env);Makefile 新增 selfhost-up/down、db-dump/db-restore(备份到 backups/)
- 测试 94 项全绿(+3):诊断全路径(无令牌/用途不符/成功/单次重放)、管理面处置联动、支持包与指标
2026-09-12 11:20:15 +08:00

94 lines
3.1 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.
# 默认目标:显示帮助
.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 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
# ===== 灵台引擎(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 && npm run generate:api
# ===== 前端与桌面(Next.js / Tauri v2) =====
.PHONY: frontend-setup
frontend-setup: ## 安装前端依赖
cd frontend && npm install
.PHONY: frontend-dev
frontend-dev: ## 启动前端开发服务(127.0.0.1:3000)
cd frontend && npm run 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}'