Files
sanguo_moziplus_v2/docs/design/18-toolchain-e2e-test.md
T
2026-06-09 13:55:24 +08:00

109 lines
5.3 KiB
Markdown
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.
# §18. 工具链端到端验证测试
> 日期:2026-06-09
> 状态:执行中
> 目标:用真实 Webhook 触发验证整条 Mail 通知链路
## 前置确认
- Gitea 用户名 ↔ Agent ID 映射:完全一致(admin, guanyu-dev, jiangwei-infra, pangtong-fujunshi, simayi-challenger, zhangfei-dev, zhaoyun-data
- Gitea 组织级 WebhookHook ID=28):姜维确认最近 5 条投递全部 is_succeed=1
- Daemon 在线:sanguo-moziplus-v2 运行中
- 测试仓库:sanguo/moziplus-v2
## 命名规范
- Issue 标题:`[E2E-TEST] xxx`
- PR 标题:`[E2E-TEST] xxx`
- 分支名:`test/e2e-<timestamp>`
## 验证步骤
| 步骤 | 操作 | 触发事件 | 预期 Mail 通知 | 验证点 |
|------|------|----------|---------------|--------|
| 1 | 创建 Issue `[E2E-TEST] Issue指派测试`assignee=zhangfei-dev | issues (assigned) | zhangfei-dev 收到 "Issue 指派" Mail | Mail to/模板正确 |
| 2 | 开分支 `test/e2e-<ts>`,创建 PR `[E2E-TEST] Review请求测试` | pull_request (opened) | simayi-challenger 收到 "Review 请求" Mail | Mail to/风险级别/文件列表 |
| 3 | PR Review APPROVED | pull_request_review (approved) | PR 作者(pangtong-fujunshi) 收到 "Review 通过 ✓" Mail | result=通过 ✓ |
| 4 | PR Review REQUEST_CHANGES | pull_request_review (rejected) | PR 作者收到 "Review 驳回 ✗" Mail | result=驳回 ✗ |
| 5 | Issue 上发评论 `[CI] CI 失败 — 分支: test/e2e-xxx, 错误: build timeout` | issue_comment | Issue 作者收到 "CI 失败" Mail | 模板含分支/错误摘要 |
| 6 | 创建标题含"部署失败"的 Issue(无指派) | issues (opened) | jiangwei-infra + pangtong-fujunshi 各收到 "部署失败" Mail | 双收件人 |
| 7 | 关闭步骤 1 的 Issue,再发 CI 失败评论 | issue_comment (closed issue) | 不产生 Mail(负面测试) | handler 跳过 closed |
| 8 | 重发步骤 1 Webhook(相同 delivery ID | 重复事件 | 不产生新 Mail(幂等测试) | 返回 duplicate |
## 签名校验
暂不测试(需恢复 GITEA_WEBHOOK_SECRET)。
## Review 意见来源
- 姜维(基础设施确认 + 边界验证建议)
- 司马懿(遗漏点补充 + 命名规范 + 风险防范)
---
## 执行记录
> 2026-06-09 00:40~00:50 CST
### 步骤 1Issue 指派 ✅
- 操作:创建 Issue #22 `[E2E-TEST] Issue指派测试`assignee=zhangfei-dev
- Mail`mail-1780936736480`from=system, to=zhangfei-dev, title=`Issue 指派: [E2E-TEST] Issue指派测试`
- 模板渲染正确(含 Issue 链接、标签、描述、建议分支名)
### 步骤 2PR Review 请求 ✅
- 操作:创建分支 `test/e2e-1780936838`,创建 PR #23
- Mail`mail-1780936851715`from=system, to=simayi-challenger
- 模板含 PR 链接、标题、作者(pangtong-fujunshi)、分支、风险级别(standard)
- 附带:CI 失败通知 `mail-1780936876572`CI 自动触发,符合预期)
### 步骤 3Review APPROVED ✅
- 操作:用 simayi-challenger token 提交 APPROVED review
- Mail`mail-1780936968411`from=system, to=pangtong-fujunshi, title=`Review 通过 ✓`
- 描述含审查者(simayi-challenger)、review body
- ⚠️ 收到 2 封重复 Mailorg webhook + repo webhook 双触发)
### 步骤 4Review REQUEST_CHANGES ✅
- 操作:用 simayi-challenger token 提交 REQUEST_CHANGES review
- Mail`mail-1780936972207`from=system, to=pangtong-fujunshi, title=`Review 驳回 ✗`
- ⚠️ 同上,收到 2 封重复 Mail
### 步骤 5CI 失败评论 ✅
- 操作:在 Issue #22 发评论 `[CI] CI 失败 — 分支: test/e2e-1780936838, 错误: build timeout`
- Mail`mail-1780936994513`from=system, to=pangtong-fujunshi, title=`CI 失败: sanguo/moziplus-v2#22`
- 模板含分支提取和错误摘要
### 步骤 6:部署失败 Issue ✅
- 操作:创建 Issue #24 `[E2E-TEST] 部署失败: test deploy`(无指派)
- Mail`mail-1780936999660` to=jiangwei-infra, `mail-1780936999684` to=pangtong-fujunshi
- 双收件人验证通过 ✅
### 步骤 7:已关闭 Issue 负面测试 ✅
- 操作:关闭 Issue #22 后发 `[CI] CI 失败 — 应被过滤`
- 结果:未产生新 Mail ✅(只有步骤 5 的 1 封 CI Mail,步骤 7 的评论被正确过滤)
### 步骤 8:幂等测试 ⏳ 待执行
- 需要手动构造重复 Webhook 请求验证
---
## 汇总
| 步骤 | 状态 | 备注 |
|------|------|------|
| 1. Issue 指派 | ✅ 通过 | Mail to/模板正确 |
| 2. PR Review 请求 | ✅ 通过 | Mail to/风险级别/文件列表正确 |
| 3. Review APPROVED | ✅ 通过 | 但收到 2 封重复 Mail(双 webhook |
| 4. Review REQUEST_CHANGES | ✅ 通过 | 同上,2 封重复 |
| 5. CI 失败评论 | ✅ 通过 | 分支提取正确 |
| 6. 部署失败 Issue | ✅ 通过 | 双收件人验证通过 |
| 7. 已关闭 Issue 过滤 | ✅ 通过 | 负面测试通过,无新 Mail |
| 8. 幂等测试 | ⏳ 待执行 | 需手动构造重复请求 |
## 发现的问题
### P1Review 事件双 Mail
- **现象**:每次 Review 事件产生 2 封完全相同的 Mail
- **原因**Gitea 同时触发了 org webhook + repo webhook,两个 Webhook 独立投递
- **影响**:用户收到重复通知
- **建议修复**:幂等检查已按 event+delivery 去重,但 org 和 repo webhook 的 delivery ID 不同,所以去重不生效。需改为按事件内容去重(如 review.id)