fix(ci): push 路径检测安全回溯——防止 concurrency 取消导致前端改动丢失 #1578
Reference in New Issue
Block a user
Delete Branch "fix/ci-push-paths-safe-base"
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?
问题
GITHUB_EVENT_BEFORE只指向上一次 push 的 SHA。如果那次 push 的 workflow 被 concurrency 取消,前端改动永远不会被构建。后续 push 的 diff 不覆盖被取消的改动,skip_frontend被错误设为 true。实际影响:PR#1576(成片库UI改造)的前端改动至今未部署到 staging。
修复
在 diff 前查询最近一次实际构建了 web 镜像的成功 push run,用其
head_sha作为 diff 基准:Build Staging Web Imagejob 是否success(非 skipped)before改动文件
scripts/ci/ci_push_paths.sh— 新增安全回溯逻辑(仅影响 push 事件的check-push-pathsjob)🚀 预览环境已部署
【阻塞级判定】
📊 审查概览
🔴 阻塞级问题(必须)
无
💡 改进建议(不阻塞合并)
[scripts/ci/ci_push_paths.sh: 35-73] Python 脚本变量注入风险
token = '${GITHUB_TOKEN}')。虽然 CI 环境变量通常受信,但如果变量值包含单引号等特殊字符,会导致 Python 语法错误,进而导致脚本静默失败并回退到全量构建。import os; token = os.environ.get('GITHUB_TOKEN'),或者使用json.dumps进行转义,以提高代码的健壮性。[scripts/ci/ci_push_paths.sh: 49] 作业名称匹配逻辑
'Build Staging Web' in j.get('name', '')进行子字符串匹配。如果存在名为 "Build Staging Web V2" 或 "Cancel Build Staging Web" 的作业,可能会产生误判。== 'Build Staging Web';如果需要匹配多个变体,建议使用正则表达式或明确的列表判断。✅ 良好实践
ZERO变量替代硬编码的 Hash 字符串,提高了代码可读性和可维护性。🤖 由 AI 代码审查机器人自动生成 | 2026-08-31 09:30:23 | 模型:
CI全绿,自动审批通过。
CI全绿,自动审批通过。
🗑️ 预览环境已清理
PR #1578 已关闭或合并,对应的预览环境已被清理。