- 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]>
247 lines
7.7 KiB
Bash
Executable File
247 lines
7.7 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# MVP-Sprint-01 GitHub Issues 创建脚本
|
||
# 请确保已经安装并登录 GitHub CLI: gh auth login
|
||
|
||
echo "🚀 开始创建 MVP-Sprint-01 里程碑和相关 Issues..."
|
||
|
||
# 1. 创建里程碑
|
||
echo "📅 创建里程碑 MVP-Sprint-01..."
|
||
gh milestone create "MVP-Sprint-01" \
|
||
--title "MVP-Sprint-01" \
|
||
--description "完成需求→匹配→合同业务闭环,实现最小可交付版本(2周冲刺)" \
|
||
--due-date "2025-10-28"
|
||
|
||
# 获取里程碑 ID
|
||
MILESTONE_ID=$(gh milestone list --limit 1 --json id,title --jq '.[] | select(.title=="MVP-Sprint-01") | .id')
|
||
echo "✅ 里程碑创建成功,ID: $MILESTONE_ID"
|
||
|
||
# 2. 创建 Issues
|
||
declare -a ISSUES=(
|
||
"🧱|Monorepo 基础架构初始化|area:infra prio:P0|建立项目主仓库骨架与目录规范,为后续模块提供统一结构。
|
||
|/
|
||
|## 子任务
|
||
- [ ] 初始化 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/
|
||
\`\`\`
|
||
|平台组|16h"
|
||
|
||
"🧩|DM8 数据访问层与 Flyway 初始化|area:backend risk:dm8|完成达梦数据库方言、分页、序列与 Flyway 基线。
|
||
|platform/libs/dm8-dal
|
||
|## 子任务
|
||
- [ ] 定制 MyBatis-Plus 达梦方言与分页插件
|
||
- [ ] V1__baseline.sql(所有表)
|
||
- [ ] V1_1__index.sql(索引优化)
|
||
- [ ] 配置 Flyway 自动迁移与版本校验
|
||
- [ ] 添加审计字段与触发器(create/update/delete)
|
||
|
||
## 验收标准
|
||
- [ ] Flyway 能自动初始化 DM8 容器并迁移成功
|
||
- [ ] 插入/分页/更新功能正常
|
||
- [ ] 审计字段自动填充,DDL 符合规范
|
||
|
||
## 依赖
|
||
- [ ] DM8 数据库实例就绪
|
||
|后端组|20h"
|
||
|
||
"🧵|RabbitMQ 事件基础库 (AsyncAPI 对齐)|area:backend prio:P0|实现统一事件发布/订阅机制,与 asyncapi.yaml 保持一致。
|
||
|platform/libs/event-starter
|
||
|## 子任务
|
||
- [ ] 实现 EventHeaders(ULID、tenantId、correlationId)
|
||
- [ ] 实现 Publisher + Subscriber 封装类
|
||
- [ ] 定义交换机命名规范(<domain>.events)
|
||
- [ ] 建立重试机制与 DLX(死信)队列策略
|
||
- [ ] 创建示例:DemandCreated 发布与消费
|
||
|
||
## 验收标准
|
||
- [ ] DemandCreated 事件从发布到消费成功
|
||
- [ ] 异常消息进入 DLX 队列
|
||
- [ ] AsyncAPI 校验无错误
|
||
|
||
## 关联文件
|
||
- [AsyncAPI 规范](../../docs/asyncapi.yaml)
|
||
|后端组|18h"
|
||
|
||
"🔐|网关 + Keycloak 多租户透传|area:infra risk:security|实现 OIDC 鉴权、角色/租户透传与统一路由授权。
|
||
|platform/gateway
|
||
|## 子任务
|
||
- [ ] 集成 Keycloak (OIDC)
|
||
- [ ] JWT 校验与租户 tenantId header 注入
|
||
- [ ] 路由权限匹配 Roles
|
||
- [ ] 返回标准化错误体 (401/403/500)
|
||
|
||
## 验收标准
|
||
- [ ] 未登录 401、跨租户访问 403
|
||
- [ ] Token 中 tenantId 在网关透传正确
|
||
- [ ] OpenAPI UI 可访问所有授权 API
|
||
|
||
## 依赖
|
||
- [ ] Keycloak 服务器配置完成
|
||
|安全组|24h"
|
||
|
||
"⚙️|需求/成果/合同核心服务(OpenAPI-first)|area:backend prio:P0|基于 OpenAPI 生成控制器与 DTO,实现核心 CRUD 闭环。
|
||
|platform/services/{demand,achievement,contract}-service
|
||
|## 子任务
|
||
- [ ] 根据 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)
|
||
|后端组|32h"
|
||
|
||
"🧠|AI 匹配服务(FastAPI)|area:ai|基于规则 + 向量相似度的智能匹配服务。
|
||
|platform/ai/
|
||
|## 子任务
|
||
- [ ] 实现 POST /match 端点
|
||
- [ ] 构建余弦相似度计算
|
||
- [ ] 输出解释项(feature importance)
|
||
- [ ] 结果写回数据库并发 MatchingCompleted
|
||
|
||
## 验收标准
|
||
- [ ] 匹配请求响应正确
|
||
- [ ] AI 日志可观测
|
||
- [ ] Admin 前端能查看匹配结果和解释
|
||
|AI组|24h"
|
||
|
||
"🗂️|文件与签署服务(MinIO + PDF 预览)|area:backend prio:P1|提供断点续传与文件预览能力。
|
||
|platform/services/file-service
|
||
|## 子任务
|
||
- [ ] 集成 MinIO SDK
|
||
- [ ] 支持 tus 协议断点续传
|
||
- [ ] 文件元数据表 (AttachmentInfo)
|
||
- [ ] PDF.js 在线预览接口
|
||
|
||
## 验收标准
|
||
- [ ] 大文件(>100MB)上传成功
|
||
- [ ] 可续传、秒传、删除权限校验
|
||
- [ ] 签署 PDF 可预览访问
|
||
|
||
## 依赖
|
||
- [ ] MinIO 对象存储服务部署
|
||
|后端组|16h"
|
||
|
||
"🧭|Admin 前端(Vben)— 核心业务模块|area:frontend prio:P0|实现管理端需求/匹配/合同功能页面。
|
||
|web/admin
|
||
|## 子任务
|
||
- [ ] 集成 Keycloak 登录
|
||
- [ ] Axios 拦截器(traceId、tenantId、Idempotency-Key)
|
||
- [ ] 需求列表/详情/新建/编辑
|
||
- [ ] 匹配触发与结果表格(score/reasons)
|
||
- [ ] 合同新建/签署查看
|
||
|
||
## 验收标准
|
||
- [ ] 登录后菜单动态加载
|
||
- [ ] 全链路 CRUD→匹配→签署 流程跑通
|
||
- [ ] E2E 测试(Playwright)通过
|
||
|前端组|28h"
|
||
|
||
"📊|大屏(DataV + ECharts)|area:bigscreen prio:P1|展示科技成果转化运营指标。
|
||
|web/bigscreen
|
||
|## 子任务
|
||
- [ ] KPI 卡片:成果数、需求数、合同额、转化率
|
||
- [ ] 趋势折线 + 地域热力图
|
||
- [ ] 假数据 API /admin/metrics
|
||
|
||
## 验收标准
|
||
- [ ] 1080p/4K 自适应,帧率 > 60fps
|
||
- [ ] 指标卡片动态更新、颜色一致
|
||
- [ ] 与后端指标接口对接正确
|
||
|前端组|12h"
|
||
|
||
"🔍|可观测性 + CI/CD 流水线|area:infra prio:P0|建立完整的监控告警与自动部署流程。
|
||
|ops/ + ci/
|
||
|## 子任务
|
||
- [ ] 集成 OpenTelemetry (Java/Python Agent)
|
||
- [ ] Prometheus + Grafana + Loki + Jaeger
|
||
- [ ] GitHub Actions:构建 → 测试 → ZAP → k6 → 构建镜像 → ArgoCD
|
||
- [ ] Grafana 仪表板模板 + PrometheusRule 告警
|
||
|
||
## 验收标准
|
||
- [ ] 任意请求可在 Grafana 中追踪 trace/log
|
||
- [ ] 告警策略触发正确
|
||
- [ ] CI/CD 全链路成功
|
||
|
||
## 依赖
|
||
- [ ] 开发环境 Kubernetes 集群可用
|
||
|DevOps|20h"
|
||
)
|
||
|
||
# 创建 Issues
|
||
echo "📝 创建 10 个 Issues..."
|
||
ISSUE_NUMBERS=()
|
||
|
||
for i in "${!ISSUES[@]}"; do
|
||
IFS='|' read -r EMOJI TITLE LABELS DESCRIPTION MODULEPath OWNER EFFORT <<< "${ISSUES[$i]}"
|
||
|
||
ISSUE_BODY="**模块路径**: \`$MODULEPath\`
|
||
|
||
**负责组**: $OWNER
|
||
|
||
**预估工时**: $EFFORT
|
||
|
||
$DESCRIPTION"
|
||
|
||
echo "创建 Issue $((i+1))/10: $TITLE"
|
||
|
||
ISSUE_URL=$(gh issue create \
|
||
--title "$EMOJI $TITLE" \
|
||
--label "$LABELS" \
|
||
--body "$ISSUE_BODY" \
|
||
--milestone "MVP-Sprint-01" \
|
||
--assignee @me)
|
||
|
||
# 提取 Issue 号
|
||
ISSUE_NUMBER=$(echo "$ISSUE_URL" | grep -oE '[0-9]+$')
|
||
ISSUE_NUMBERS+=("$ISSUE_NUMBER")
|
||
|
||
echo "✅ Issue #$ISSUE_NUMBER 创建成功"
|
||
done
|
||
|
||
echo ""
|
||
echo "🎉 MVP-Sprint-01 里程碑和 Issues 创建完成!"
|
||
echo ""
|
||
echo "📊 创建摘要:"
|
||
echo "- 里程碑: MVP-Sprint-01 (截止日期: 2025-10-28)"
|
||
echo "- Issues 数量: ${#ISSUE_NUMBERS[@]}"
|
||
echo "- 总工时: 210小时 (约 1.3 人月)"
|
||
echo ""
|
||
echo "📋 Issue 列表:"
|
||
for i in "${!ISSUE_NUMBERS[@]}"; do
|
||
echo " #${ISSUE_NUMBERS[$i]} $(IFS='|' read -r EMOJI TITLE _ _ _ _ _ <<< "${ISSUES[$i]}"; echo "$EMOJI $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)" |