feat(ci): P2-6 CI健康度每日巡检 - 每天9点自动检查,有失败发飞书报告 #658
Reference in New Issue
Block a user
Delete Branch "p2-6-ci-health-daily"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
P2-6:CI健康度每日巡检
功能
每天北京时间早上9点自动巡检:
新增文件
.gitea/workflows/ci-health-daily.yml- 每日定时任务(cron: 0 1 * * * = 北京时间9点)scripts/ci/ci_health_report.py- 报告生成+飞书通知脚本设计原则
🚀 预览环境已部署
CI全绿,自动审批通过。
CI全绿,自动审批通过。
代码审查结果 - PR #658
⚠️ 问题(2个需要修改)
scripts/ci/ci_health_report.py 第37行:错误处理逻辑掩盖真实失败状态
ci_health_check.py执行失败(返回码非0)或 JSON 解析失败时,函数返回空字典{"workflows": {}, "failed_runs": []}。这会导致主流程误判为“全部通过”,从而掩盖了巡检脚本本身的崩溃或 API 异常,产生误报。{"error": "..."}),并在main函数中识别该状态,发送“巡检异常”的通知而不是“全部通过”。scripts/ci/ci_health_report.py 第73行:字典键访问缺少安全检查
j["name"]访问 job 名称,如果上游ci_health_check.py返回的数据结构中某个 job 缺少name字段,会抛出KeyError导致报告生成中断。j.get("name", "")替代j["name"],增强对数据格式的容错性。💡 建议(2个可选)
.gitea/workflows/ci-health-daily.yml 第38行:路径遍历安全风险
tar.extract(member, '.')解压文件时,未校验member.name。虽然源代码通常可信,但若仓库被投毒或包含特殊构建产物,可能利用../覆盖系统文件。建议增加路径校验,过滤包含..或以绝对路径开头的文件名。.gitea/workflows/ci-health-daily.yml 第28行:边界条件处理
tar.getmembers()[0]假设压缩包至少包含一个文件。如果压缩包为空(极端异常情况),此处会抛出IndexError。建议检查列表长度后再访问。✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能无明显问题
🤖 由 AI 代码审查机器人自动生成 | 2026-07-20 22:05:40 | 模型:
🗑️ 预览环境已清理
PR #658 已关闭或合并,对应的预览环境已被清理。