ci: 覆盖率门禁加固 + CI 失败通知 #218

Merged
xiaoxia merged 2 commits from feat/ci-coverage-gate-and-notify into develop 2026-07-11 15:05:50 +08:00
Owner

改动说明

1. 覆盖率门禁加固

问题:之前的覆盖率配置有三个问题:

  • unit tests 没有覆盖率门禁,单测覆盖率下降没人管
  • integration tests 50% 门槛太低(当前实际 71%),等于摆设
  • 覆盖率检查和测试失败混在一起,测试一红就看不到覆盖率问题

改动

  • unit tests: 新增 --cov-fail-under=60(当前 62%,留 2% 缓冲)
  • integration tests: 门槛从 50% 提升到 65%(当前合并后 71%,留 6% 缓冲)
  • 新增 --cov-report=term-missing,输出哪些行没覆盖,方便定位
  • pyproject.toml 统一 coverage 配置(source/omit/exclude_lines 等)

2. 覆盖率汇总 step

  • 新增 Coverage summary step(always 执行),从 coverage.xml 解析并输出:
    • 行覆盖率(带具体数值)
    • 分支覆盖率
    • 与门槛对比的 PASS/FAIL 状态

3. CI 失败通知

  • 新增 Notify CI failure step(仅失败时执行)
  • 支持通过 webhook 推送失败通知到飞书/群聊
  • 通知内容包含:失败 job、分支、提交、提交者、Run ID、日志链接
  • 启用方式:在仓库 Settings → Secrets and variables → Actions 中添加 CI_NOTIFY_WEBHOOK secret,值为飞书机器人 webhook 地址

当前覆盖率基线

测试类型 行覆盖率 门槛(旧) 门槛(新)
Unit 62% 60%
Unit + Integration 71% 50% 65%

风险评估

  • 低风险。当前覆盖率均高于新门槛,不会立即触发失败
  • 后续新增代码如果拉低覆盖率超过缓冲,会被门禁拦住
  • CI 失败通知默认关闭(未配置 webhook 时只打日志)
## 改动说明 ### 1. 覆盖率门禁加固 **问题**:之前的覆盖率配置有三个问题: - unit tests 没有覆盖率门禁,单测覆盖率下降没人管 - integration tests 50% 门槛太低(当前实际 71%),等于摆设 - 覆盖率检查和测试失败混在一起,测试一红就看不到覆盖率问题 **改动**: - `unit tests`: 新增 `--cov-fail-under=60`(当前 62%,留 2% 缓冲) - `integration tests`: 门槛从 50% 提升到 65%(当前合并后 71%,留 6% 缓冲) - 新增 `--cov-report=term-missing`,输出哪些行没覆盖,方便定位 - `pyproject.toml` 统一 coverage 配置(source/omit/exclude_lines 等) ### 2. 覆盖率汇总 step - 新增 `Coverage summary` step(always 执行),从 coverage.xml 解析并输出: - 行覆盖率(带具体数值) - 分支覆盖率 - 与门槛对比的 PASS/FAIL 状态 ### 3. CI 失败通知 - 新增 `Notify CI failure` step(仅失败时执行) - 支持通过 webhook 推送失败通知到飞书/群聊 - 通知内容包含:失败 job、分支、提交、提交者、Run ID、日志链接 - **启用方式**:在仓库 Settings → Secrets and variables → Actions 中添加 `CI_NOTIFY_WEBHOOK` secret,值为飞书机器人 webhook 地址 ### 当前覆盖率基线 | 测试类型 | 行覆盖率 | 门槛(旧) | 门槛(新) | |---------|---------|-----------|-----------| | Unit | 62% | 无 | 60% | | Unit + Integration | 71% | 50% | 65% | ### 风险评估 - 低风险。当前覆盖率均高于新门槛,不会立即触发失败 - 后续新增代码如果拉低覆盖率超过缓冲,会被门禁拦住 - CI 失败通知默认关闭(未配置 webhook 时只打日志)
Author
Owner

PR #218 审查结论:⚠️ 需修复 1 个问题后通过(CI 覆盖率门禁 + 失败通知)

审查范围

聚焦 .gitea/workflows/ci-cd.yml 中 CI 相关改动:覆盖率门禁、覆盖率汇总、CI 失败通知。

正确的改动

  1. 覆盖率门禁提升合理

    • unit test: 50% → 60%
    • integration test: 50% → 65%
    • 渐进式提高,倒逼测试质量,方向正确
  2. 覆盖率汇总步骤

    • if: always() 确保即使测试失败也输出汇总
    • 解析 coverage.xml 输出行覆盖率、分支覆盖率、状态
    • 便于快速定位覆盖率问题
  3. CI 失败通知机制

    • if: failure() 仅在失败时触发
    • 飞书卡片格式,含任务名、分支、提交、提交者、Run ID、跳转链接
    • 通过 CI_NOTIFY_WEBHOOK 环境变量控制,未配置则跳过,设计合理
  4. Build summary 补充覆盖率输出

    • develop/main 分支构建成功时输出总覆盖率
    • 方便在构建日志中快速查看

⚠️ 需要修复:通知链接域名拼写错误

文件.gitea/workflows/ci-cd.yml 第 287 行左右(Notify CI failure 步骤)

问题

RUN_URL="https://git.xiaoxiajianji.com/${REPO}/actions/runs/${RUN_ID}"

域名拼写错误:git.xiaoxiajianji.com → 应为 git.xiaoxiaianji.com(少了一个 a

影响:CI 失败通知卡片中的「查看失败日志」按钮链接打不开,用户点了 404。

修复:把 xiaoxiajianji 改成 xiaoxiaianji

其他建议(非阻塞)

  • 通知消息里可以加上具体失败的 step 名称,现在只有 job 名,排查还得点进去看
  • 覆盖率门槛建议分阶段提,别一次提太高导致 CI 全红影响开发节奏

结论

核心设计没问题,改完域名拼写就可以合并。

## PR #218 审查结论:⚠️ 需修复 1 个问题后通过(CI 覆盖率门禁 + 失败通知) ### 审查范围 聚焦 `.gitea/workflows/ci-cd.yml` 中 CI 相关改动:覆盖率门禁、覆盖率汇总、CI 失败通知。 ### ✅ 正确的改动 1. **覆盖率门禁提升合理** - unit test: 50% → 60% - integration test: 50% → 65% - 渐进式提高,倒逼测试质量,方向正确 2. **覆盖率汇总步骤** - `if: always()` 确保即使测试失败也输出汇总 - 解析 coverage.xml 输出行覆盖率、分支覆盖率、状态 - 便于快速定位覆盖率问题 3. **CI 失败通知机制** - `if: failure()` 仅在失败时触发 - 飞书卡片格式,含任务名、分支、提交、提交者、Run ID、跳转链接 - 通过 `CI_NOTIFY_WEBHOOK` 环境变量控制,未配置则跳过,设计合理 4. **Build summary 补充覆盖率输出** - develop/main 分支构建成功时输出总覆盖率 - 方便在构建日志中快速查看 ### ⚠️ 需要修复:通知链接域名拼写错误 **文件**:`.gitea/workflows/ci-cd.yml` 第 287 行左右(Notify CI failure 步骤) **问题**: ```yaml RUN_URL="https://git.xiaoxiajianji.com/${REPO}/actions/runs/${RUN_ID}" ``` 域名拼写错误:`git.xiaoxiajianji.com` → 应为 `git.xiaoxiaianji.com`(少了一个 `a`) **影响**:CI 失败通知卡片中的「查看失败日志」按钮链接打不开,用户点了 404。 **修复**:把 `xiaoxiajianji` 改成 `xiaoxiaianji`。 ### 其他建议(非阻塞) - 通知消息里可以加上具体失败的 step 名称,现在只有 job 名,排查还得点进去看 - 覆盖率门槛建议分阶段提,别一次提太高导致 CI 全红影响开发节奏 ### 结论 核心设计没问题,改完域名拼写就可以合并。
Author
Owner

PR #218 复审结论: 通过

勘误

上一轮评论中指出的「域名拼写错误」是我看错了——git.xiaoxiajianji.com(小小剪辑)是正确的产品主域名,两个域名都指向同一台 Gitea 服务器。抱歉判断失误。

最终审查结论

CI 相关改动全部正确:

  1. 覆盖率门禁:unit 60% / integration 65%,渐进式提升合理
  2. 覆盖率汇总if: always() 确保失败也输出,解析 coverage.xml 展示行/分支覆盖率和状态
  3. CI 失败通知:飞书卡片 + 跳转链接,通过 CI_NOTIFY_WEBHOOK 环境变量控制,未配置则跳过,设计正确
  4. Build summary 补充覆盖率:develop/main 分支构建输出总覆盖率,便于追踪

可合并。

## PR #218 复审结论:✅ 通过 ### 勘误 上一轮评论中指出的「域名拼写错误」是我看错了——`git.xiaoxiajianji.com`(小小剪辑)是正确的产品主域名,两个域名都指向同一台 Gitea 服务器。抱歉判断失误。 ### 最终审查结论 CI 相关改动全部正确: 1. ✅ **覆盖率门禁**:unit 60% / integration 65%,渐进式提升合理 2. ✅ **覆盖率汇总**:`if: always()` 确保失败也输出,解析 coverage.xml 展示行/分支覆盖率和状态 3. ✅ **CI 失败通知**:飞书卡片 + 跳转链接,通过 `CI_NOTIFY_WEBHOOK` 环境变量控制,未配置则跳过,设计正确 4. ✅ **Build summary 补充覆盖率**:develop/main 分支构建输出总覆盖率,便于追踪 可合并。
xiaoxia reviewed 2026-07-11 14:51:53 +08:00
xiaoxia left a comment
Author
Owner

代码审查通过

代码审查通过
xiaoxia added 2 commits 2026-07-11 15:04:34 +08:00
- unit tests 增加 60% 覆盖率门禁
- integration tests 覆盖率门槛从 50% 提升到 65%
- 新增覆盖率汇总 step,输出行覆盖率/分支覆盖率/状态
- 新增 CI 失败通知 step,支持 webhook 推送到飞书/群聊
- 配置 CI_NOTIFY_WEBHOOK secret 即可启用通知
xiaoxia force-pushed feat/ci-coverage-gate-and-notify from 202d171f1c to 9e8a0cee7a 2026-07-11 15:04:34 +08:00 Compare
xiaoxia merged commit 759c23c418 into develop 2026-07-11 15:05:50 +08:00
Sign in to join this conversation.