109 lines
5.3 KiB
Markdown
109 lines
5.3 KiB
Markdown
# §18. 工具链端到端验证测试
|
||
|
||
> 日期:2026-06-09
|
||
> 状态:执行中
|
||
> 目标:用真实 Webhook 触发验证整条 Mail 通知链路
|
||
|
||
## 前置确认
|
||
|
||
- Gitea 用户名 ↔ Agent ID 映射:完全一致(admin, guanyu-dev, jiangwei-infra, pangtong-fujunshi, simayi-challenger, zhangfei-dev, zhaoyun-data)
|
||
- Gitea 组织级 Webhook(Hook 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
|
||
|
||
### 步骤 1:Issue 指派 ✅
|
||
- 操作:创建 Issue #22 `[E2E-TEST] Issue指派测试`,assignee=zhangfei-dev
|
||
- Mail:`mail-1780936736480`,from=system, to=zhangfei-dev, title=`Issue 指派: [E2E-TEST] Issue指派测试`
|
||
- 模板渲染正确(含 Issue 链接、标签、描述、建议分支名)
|
||
|
||
### 步骤 2:PR Review 请求 ✅
|
||
- 操作:创建分支 `test/e2e-1780936838`,创建 PR #23
|
||
- Mail:`mail-1780936851715`,from=system, to=simayi-challenger
|
||
- 模板含 PR 链接、标题、作者(pangtong-fujunshi)、分支、风险级别(standard)
|
||
- 附带:CI 失败通知 `mail-1780936876572`(CI 自动触发,符合预期)
|
||
|
||
### 步骤 3:Review APPROVED ✅
|
||
- 操作:用 simayi-challenger token 提交 APPROVED review
|
||
- Mail:`mail-1780936968411`,from=system, to=pangtong-fujunshi, title=`Review 通过 ✓`
|
||
- 描述含审查者(simayi-challenger)、review body
|
||
- ⚠️ 收到 2 封重复 Mail(org webhook + repo webhook 双触发)
|
||
|
||
### 步骤 4:Review REQUEST_CHANGES ✅
|
||
- 操作:用 simayi-challenger token 提交 REQUEST_CHANGES review
|
||
- Mail:`mail-1780936972207`,from=system, to=pangtong-fujunshi, title=`Review 驳回 ✗`
|
||
- ⚠️ 同上,收到 2 封重复 Mail
|
||
|
||
### 步骤 5:CI 失败评论 ✅
|
||
- 操作:在 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. 幂等测试 | ⏳ 待执行 | 需手动构造重复请求 |
|
||
|
||
## 发现的问题
|
||
|
||
### P1:Review 事件双 Mail
|
||
- **现象**:每次 Review 事件产生 2 封完全相同的 Mail
|
||
- **原因**:Gitea 同时触发了 org webhook + repo webhook,两个 Webhook 独立投递
|
||
- **影响**:用户收到重复通知
|
||
- **建议修复**:幂等检查已按 event+delivery 去重,但 org 和 repo webhook 的 delivery ID 不同,所以去重不生效。需改为按事件内容去重(如 review.id)
|