Prhub

#39443 [CI/Build[ Don't auto-rebase PRs with CI failures

原始 PR 作者 DarkLight1337 合并时间 2026-04-10 04:57 文件变更 1 提交数 1 评论 2 代码增减 +3 / -2

执行摘要

更新 Mergify 自动更新规则,避免对 CI 失败的 PR 进行自动 rebase 以减轻 CI 压力。

根据PR body描述,作者观察到Mergify正在处理大量PR(目前有124个已批准且标记为ready的开放PR),每天更新它们会带来过高的CI压力,而团队每天仅合并30-40个PR。自动rebase的原始目的是避免将过时的PR合并到main分支,虽然自动rebase有助于合并对main分支上损坏/不稳定的CI的修复,但在当前设置下,作者认为成本不值得。此外,团队也不希望在作者未修复相关CI失败后继续更新PR。因此,该PR旨在聚焦于自动rebase的原始目的,并减轻CI压力。

该PR值得快速浏览,特别是对于负责CI/基础设施的工程师。它展示了如何通过简单配置调整优化CI资源使用,并提供了Mergify条件使用的实际示例。关注点包括:check-failure与status-failure的区别,以及团队在平衡自动化和成本时的决策。

讨论亮点

review中只有一条实质性讨论:gemini-code-assist[bot]建议除了检查#check-failure = 0外,还应添加#check-error = 0条件,以覆盖GitHub的error状态(如基础设施问题或工作流配置错误)。但作者DarkLight1337回复“There is no such condition”,表明Mergify可能不支持该条件或不需要额外检查。讨论以作者的决定结束,未采纳建议。

实现拆解

该PR仅修改了一个文件:.github/mergify.yml。关键改动包括:

  1. 将pre-commit和DCO检查的条件从status-failure更新为check-failure(根据Mergify文档,这是正确的条件名称)。
  2. 在自动rebase规则中添加了#check-failure = 0条件,确保只有没有CI失败的PR才会被自动rebase。这些改动通过简单的配置更新实现,不涉及代码逻辑变更。
文件 模块 状态 重要度
.github/mergify.yml CI/ 基础设施 modified 8.0

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

是否添加 check-error 条件以覆盖 GitHub error 状态 正确性

gemini-code-assist[bot] 建议添加 #check-error = 0 条件以确保 PR 在基础设施错误时不被 rebase,但 DarkLight1337 回复 Mergify 没有此条件。

结论:未采纳建议,仅使用 #check-failure = 0 条件。 · 已解决

风险与影响

风险较低:

  1. 配置错误风险:如果check-failure条件不正确或与GitHub状态不匹配,可能导致自动rebase行为异常(如错误地rebase CI失败的PR或跳过应rebase的PR)。但根据PR body引用Mergify文档,该条件是正确的。
  2. 功能遗漏风险:未添加check-error条件可能在某些基础设施错误情况下仍rebase PR,但根据作者回复,这可能不是问题或Mergify不支持。
  3. 回归风险:修改现有配置可能影响其他依赖status-failure的规则,但本次改动仅限于pre-commit和DCO检查,且是修复性更新。

影响范围:

  1. 对CI系统:显著减少自动rebase触发的CI运行次数,从而降低CI压力和维护成本。
  2. 对开发流程:确保只有CI通过的PR才会被自动更新,避免对未修复CI失败的PR进行不必要的rebase,提高PR管理效率。
  3. 对用户:无直接影响,因为这是内部CI配置变更。影响程度中等,主要优化团队资源使用。
配置条件可能不完整

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论