Files
template/scripts/create-milestone-issues-api.sh
Claude AIandClaude 98b2d8a53c feat: Add MVP-Sprint-01 milestone documentation and automation scripts
- Create comprehensive milestone documentation with sprint goals and timeline
- Add 10 detailed GitHub Issues covering infrastructure, backend, frontend, and DevOps
- Create automation scripts for milestone and issue creation
- Include risk management, acceptance criteria, and project structure

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <[email protected]>
2025-10-11 23:24:40 +08:00

299 lines
8.7 KiB
Bash
Executable File
Raw Permalink 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.
#!/bin/bash
# 使用 GitHub API 创建 MVP-Sprint-01 里程碑和 Issues
# 需要设置 GITHUB_TOKEN 环境变量
set -e
# 检查 GitHub token
if [ -z "$GITHUB_TOKEN" ]; then
echo "❌ 错误:请设置 GITHUB_TOKEN 环境变量"
echo "用法:export GITHUB_TOKEN=your_github_token"
echo "然后在 GitHub 创建 Personal Access Token: https://github.com/settings/tokens"
exit 1
fi
REPO="BrunoGao/template"
API_BASE="https://api.github.com/repos/$REPO"
MILESTONE_TITLE="MVP-Sprint-01"
DUE_DATE="2025-10-28T00:00:00Z"
echo "🚀 开始创建 MVP-Sprint-01 里程碑和相关 Issues..."
# 1. 创建里程碑
echo "📅 创建里程碑 $MILESTONE_TITLE..."
MILESTONE_RESPONSE=$(curl -s -X POST \
-H "Authorization: token $GITHUB_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \
"$API_BASE/milestones" \
-d "{
\"title\": \"$MILESTONE_TITLE\",
\"description\": \"完成需求→匹配→合同业务闭环,实现最小可交付版本(2周冲刺)\",
\"due_on\": \"$DUE_DATE\",
\"state\": \"open\"
}")
MILESTONE_NUMBER=$(echo "$MILESTONE_RESPONSE" | jq -r '.number')
echo "✅ 里程碑创建成功,ID: $MILESTONE_NUMBER"
# 2. 创建 Issues
echo "📝 创建 10 个 Issues..."
create_issue() {
local title="$1"
local labels="$2"
local body="$3"
local response=$(curl -s -X POST \
-H "Authorization: token $GITHUB_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \
"$API_BASE/issues" \
-d "{
\"title\": \"$title\",
\"body\": \"$body\",
\"labels\": [$(echo "$labels" | sed 's/, /","/g' | sed 's/^/"/' | sed 's/$/"/')],
\"milestone\": $MILESTONE_NUMBER
}")
local issue_number=$(echo "$response" | jq -r '.number')
echo "✅ Issue #$issue_number 创建成功: $title"
echo "$issue_number"
}
# Issue 数据
declare -a ISSUES=(
"🧱 Monorepo 基础架构初始化|area:infra,prio:P0|**模块路径**: \`/\`
**负责组**: 平台组
**预估工时**: 16h
## 子任务
- [ ] 初始化 monorepo 目录(platform、web、ops、ci、docs)
- [ ] 添加 .editorconfig、.gitattributes、.gitignore
- [ ] 初始化 pnpm workspace + maven multi-module
- [ ] 添加 CODEOWNERS、CONTRIBUTING.md、README.md
- [ ] 提交 ADR-001~005(架构、事件、租户、幂等、日志)
## 验收标准
- [ ] make up 一键启动本地开发环境成功
- [ ] CI lint + build + unit test 均通过
- [ ] README 描述仓库结构与启动命令清晰
## 模块路径
\`\`\`
/
├── platform/
│ ├── libs/
│ ├── services/
│ └── gateway/
├── web/
│ ├── admin/
│ └── bigscreen/
├── ops/
├── ci/
└── docs/
\`\`\`"
"🧩 DM8 数据访问层与 Flyway 初始化|area:backend,risk:dm8|**模块路径**: \`platform/libs/dm8-dal\`
**负责组**: 后端组
**预估工时**: 20h
## 子任务
- [ ] 定制 MyBatis-Plus 达梦方言与分页插件
- [ ] V1__baseline.sql(所有表)
- [ ] V1_1__index.sql(索引优化)
- [ ] 配置 Flyway 自动迁移与版本校验
- [ ] 添加审计字段与触发器(create/update/delete)
## 验收标准
- [ ] Flyway 能自动初始化 DM8 容器并迁移成功
- [ ] 插入/分页/更新功能正常
- [ ] 审计字段自动填充,DDL 符合规范
## 依赖
- [ ] DM8 数据库实例就绪"
"🧵 RabbitMQ 事件基础库 (AsyncAPI 对齐)|area:backend,prio:P0|**模块路径**: \`platform/libs/event-starter\`
**负责组**: 后端组
**预估工时**: 18h
## 子任务
- [ ] 实现 EventHeaders(ULID、tenantId、correlationId)
- [ ] 实现 Publisher + Subscriber 封装类
- [ ] 定义交换机命名规范(<domain>.events)
- [ ] 建立重试机制与 DLX(死信)队列策略
- [ ] 创建示例:DemandCreated 发布与消费
## 验收标准
- [ ] DemandCreated 事件从发布到消费成功
- [ ] 异常消息进入 DLX 队列
- [ ] AsyncAPI 校验无错误
## 关联文件
- [AsyncAPI 规范](../../docs/asyncapi.yaml)"
"🔐 网关 + Keycloak 多租户透传|area:infra,risk:security|**模块路径**: \`platform/gateway\`
**负责组**: 安全组
**预估工时**: 24h
## 子任务
- [ ] 集成 Keycloak (OIDC)
- [ ] JWT 校验与租户 tenantId header 注入
- [ ] 路由权限匹配 Roles
- [ ] 返回标准化错误体 (401/403/500)
## 验收标准
- [ ] 未登录 401、跨租户访问 403
- [ ] Token 中 tenantId 在网关透传正确
- [ ] OpenAPI UI 可访问所有授权 API
## 依赖
- [ ] Keycloak 服务器配置完成"
"⚙️ 需求/成果/合同核心服务(OpenAPI-first)|area:backend,prio:P0|**模块路径**: \`platform/services/{demand,achievement,contract}-service\`
**负责组**: 后端组
**预估工时**: 32h
## 子任务
- [ ] 根据 openapi.yaml 自动生成接口
- [ ] POST /demands 幂等键实现
- [ ] PUT /demands/{id} 乐观锁(If-Match)
- [ ] POST /contracts、POST /contracts/{id}/sign
- [ ] 添加 Pact Provider/Consumer 测试
## 验收标准
- [ ] CRUD 流程通过集成测试
- [ ] Pact 测试全部通过
- [ ] k6 冒烟(P95 < 3s)成功
## 关联文件
- [OpenAPI 规范](../../docs/openapi.yaml)"
"🧠 AI 匹配服务(FastAPI)|area:ai|**模块路径**: \`platform/ai/\`
**负责组**: AI组
**预估工时**: 24h
## 子任务
- [ ] 实现 POST /match 端点
- [ ] 构建余弦相似度计算
- [ ] 输出解释项(feature importance)
- [ ] 结果写回数据库并发 MatchingCompleted
## 验收标准
- [ ] 匹配请求响应正确
- [ ] AI 日志可观测
- [ ] Admin 前端能查看匹配结果和解释"
"🗂️ 文件与签署服务(MinIO + PDF 预览)|area:backend,prio:P1|**模块路径**: \`platform/services/file-service\`
**负责组**: 后端组
**预估工时**: 16h
## 子任务
- [ ] 集成 MinIO SDK
- [ ] 支持 tus 协议断点续传
- [ ] 文件元数据表 (AttachmentInfo)
- [ ] PDF.js 在线预览接口
## 验收标准
- [ ] 大文件(>100MB)上传成功
- [ ] 可续传、秒传、删除权限校验
- [ ] 签署 PDF 可预览访问
## 依赖
- [ ] MinIO 对象存储服务部署"
"🧭 Admin 前端(Vben)— 核心业务模块|area:frontend,prio:P0|**模块路径**: \`web/admin\`
**负责组**: 前端组
**预估工时**: 28h
## 子任务
- [ ] 集成 Keycloak 登录
- [ ] Axios 拦截器(traceId、tenantId、Idempotency-Key)
- [ ] 需求列表/详情/新建/编辑
- [ ] 匹配触发与结果表格(score/reasons)
- [ ] 合同新建/签署查看
## 验收标准
- [ ] 登录后菜单动态加载
- [ ] 全链路 CRUD→匹配→签署 流程跑通
- [ ] E2E 测试(Playwright)通过"
"📊 大屏(DataV + ECharts)|area:bigscreen,prio:P1|**模块路径**: \`web/bigscreen\`
**负责组**: 前端组
**预估工时**: 12h
## 子任务
- [ ] KPI 卡片:成果数、需求数、合同额、转化率
- [ ] 趋势折线 + 地域热力图
- [ ] 假数据 API /admin/metrics
## 验收标准
- [ ] 1080p/4K 自适应,帧率 > 60fps
- [ ] 指标卡片动态更新、颜色一致
- [ ] 与后端指标接口对接正确"
"🔍 可观测性 + CI/CD 流水线|area:infra,prio:P0|**模块路径**: \`ops/ + ci/\`
**负责组**: DevOps
**预估工时**: 20h
## 子任务
- [ ] 集成 OpenTelemetry (Java/Python Agent)
- [ ] Prometheus + Grafana + Loki + Jaeger
- [ ] GitHub Actions:构建 → 测试 → ZAP → k6 → 构建镜像 → ArgoCD
- [ ] Grafana 仪表板模板 + PrometheusRule 告警
## 验收标准
- [ ] 任意请求可在 Grafana 中追踪 trace/log
- [ ] 告警策略触发正确
- [ ] CI/CD 全链路成功
## 依赖
- [ ] 开发环境 Kubernetes 集群可用"
)
# 创建 Issues 并记录编号
ISSUE_NUMBERS=()
echo ""
for i in "${!ISSUES[@]}"; do
IFS='|' read -r TITLE LABELS BODY <<< "${ISSUES[$i]}"
echo "创建 Issue $((i+1))/10: $TITLE"
# 转义 body 中的特殊字符
BODY=$(echo "$BODY" | jq -Rs .)
ISSUE_NUMBER=$(create_issue "$TITLE" "$LABELS" "$BODY")
ISSUE_NUMBERS+=("$ISSUE_NUMBER")
done
echo ""
echo "🎉 MVP-Sprint-01 里程碑和 Issues 创建完成!"
echo ""
echo "📊 创建摘要:"
echo "- 仓库: $REPO"
echo "- 里程碑: $MILESTONE_TITLE (ID: $MILESTONE_NUMBER)"
echo "- 截止日期: $DUE_DATE"
echo "- Issues 数量: ${#ISSUE_NUMBERS[@]}"
echo "- 总工时: 210小时 (约 1.3 人月)"
echo ""
echo "📋 Issue 列表:"
for i in "${!ISSUE_NUMBERS[@]}"; do
IFS='|' read -r TITLE _ _ <<< "${ISSUES[$i]}"
echo " #${ISSUE_NUMBERS[$i]} $TITLE"
done
echo ""
echo "📂 相关文档:"
echo "- 里程碑文档: [docs/milestones/MVP-Sprint-01.md](docs/milestones/MVP-Sprint-01.md)"
echo "- OpenAPI 规范: [docs/openapi.yaml](docs/openapi.yaml)"
echo "- AsyncAPI 规范: [docs/asyncapi.yaml](docs/asyncapi.yaml)"
echo ""
echo "🔗 GitHub 地址: https://github.com/$REPO/milestone/$MILESTONE_NUMBER"