Prhub

#41362 Stop mergify labelling from skipping pre-commit

原始 PR 作者 hmellor 合并时间 2026-04-30 20:48 文件变更 1 提交数 4 评论 1 代码增减 +2 / -11

执行摘要

修复 mergify 标注导致 pre-commit 被跳过

PR #39523 的标签名过滤导致 mergify 自动标注后 pre-commit 被跳过。作者在 PR body 中详细描述了 bug 的根因:mergify 自动应用标签的 labeled 事件会取消 in-progress 的运行,但新运行因标签名不在白名单中而立即跳过。

此 PR 值得快速合并,修复了 CI 流程中的回归问题,逻辑清晰,改动小。

讨论亮点

PR 无审核评论。维护者 DarkLight1337 批准并合并。

实现拆解

此 PR 回退了 #39523 中的标签名过滤逻辑,仅保留 labeled 事件触发。具体变更如下:

  1. 移除 pre-run-check 作业的标签名过滤:在 .github/workflows/pre-commit.yml 中,将 pre-run-check 作业的 if 条件从复杂的标签名过滤简化为 github.event_name == 'pull_request'。这使得无论什么标签被添加,pre-run-check 都会执行。

  2. 移除 pre-commit 作业的标签名过滤:同样将该作业的 if 条件中的标签名过滤移除,恢复为仅依赖 pre-run-check 的结果(successskipped)。

  3. 保持 labeled 事件触发:保留 PR #39523 添加的 types: [opened, synchronize, reopened, labeled] 触发条件,确保标签添加时仍能触发工作流。

关键逻辑:标签添加会触发工作流,pre-run-check 内部脚本(基于 PR 标签和作者合并数)决定是否实际执行 pre-commit,而非在 workflow 层面通过 if 过滤。

文件 模块 状态 重要度
.github/workflows/pre-commit.yml CI/CD modified 4.85

关键源码片段

.github/workflows/pre-commit.yml infrastructure

核心变更文件,移除了导致 pre-commit 被跳过的标签名过滤条件。

# pre-run-check 作业:移除了标签名过滤,只检查 pull_request 事件
pre-run-check:
  if: github.event_name == 'pull_request'
  # 内部脚本仍会检查 PR 标签和作者,决定是否需要运行 pre-commit# pre-commit 作业:移除标签名过滤,仅依赖 pre-run-check 结果
pre-commit:
  needs: pre-run-check
  if: always() && (needs.pre-run-check.result == 'success' || needs.pre-run-check.result == 'skipped')

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

低风险。此 PR 本质上是回退有问题的过滤逻辑,恢复为更简单的触发方式。潜在风险包括:

  • 如果 pre-run-check 内部逻辑有缺陷,可能导致 pre-commit 在不该运行时运行,但该逻辑已存在且稳定。
  • 移除标签名过滤后,任何标签添加都会触发工作流,但仅会多执行一次 pre-run-check,对 CI 资源影响极小。

影响范围限于 CI 基础设施,开发者无感知。核心效果是确保 pre-commit 在 PR 被 mergify 标注后仍能正确触发,避免 CI 遗漏检查。

CI 流程变更

关联 Issue

#39523 Fix pre-commit labeled trigger system

完整报告

参与讨论