fix(ci): auto-fix push增加rebase+重试,修复Validate格式修复推送失败 #636
Reference in New Issue
Block a user
Delete Branch "ci/fix-validate-black-format"
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?
问题
Validate Code Quality 因 black 格式问题失败后,auto-fix 自动修复了格式但推送回分支经常失败(non-fast-forward),导致 Validate 持续挂红,需要人工介入。
根因分析
scripts/ci/auto_fix_formatting.py中的推送逻辑直接git push,没有先同步远端最新代码。当 PR 分支在 CI 运行期间有新 commit 进入(例如另一个 auto-fix 或人工推送),push 就会因 non-fast-forward 失败。修复方案
push 增加可靠性机制:
git fetch+git rebase同步远端最新代码额外说明
black==26.5.1全量格式化验证,格式完全一致,无需额外格式修复提交代码审查结果 - PR #636
⚠️ 问题(1个需要修改)
git fetch失败(例如远端分支尚不存在,或网络波动)时,代码执行continue跳过本次循环剩余步骤,直接进入下一次重试。这意味着如果分支不存在,脚本将永远无法执行git push,导致在新建分支的场景下必定失败。git fetch失败时,不应直接continue,而应跳过rebase步骤直接尝试push。如果push失败(例如 non-fast-forward),下一次循环会自然重试。💡 建议(1个可选)
f'git push origin "HEAD:{head_branch}"')。如果run函数底层实现使用了shell=True,且head_branch包含恶意字符(如; rm -rf /或$(evil_cmd)),将导致命令注入漏洞。run函数实现。若使用了shell=True,建议对head_branch进行严格校验(仅允许字母、数字、-、_、/),或改用参数化调用方式(如subprocess.run(['git', 'push', 'origin', f'HEAD:{head_branch}']))。✅ 格式检查通过 | ❌ 逻辑审查需修改 | ⚠️ 建议关注安全
🤖 由 AI 代码审查机器人自动生成 | 2026-07-20 12:59:22 | 模型:
🗑️ 预览环境已清理
PR #636 已关闭或合并,对应的预览环境已被清理。