Skip to content

Check Changeset 从事件载荷读 skip-changeset 标签:开 PR 后 5 秒内加标签,首个 run 永久红(重跑复用载荷)—— 一日三例 #5580

Description

@os-zhuang

发现于 devx 车道当日三个 PR 的同款竞态,按查重先行确认无既有单(changeset-check label payload 检索仅命中登记表)。

签名(一日三例)

PR 创建(opened 事件)后数秒内加 skip-changeset 标签,则:

  • opened 事件触发的 Check Changeset run 读事件载荷里的标签集(当时为空)→ 走计数路径 → 无 changeset → ;
  • 标签落上后,labeled 事件的新 run → skipped(正确);
  • 但首个红 run 永久红:rerun_failed_jobs 复用原事件载荷(Operational notes 5 的语义),重跑多少次都不会看见后来的标签。
现场 处置
PR #5467(该门禁文案自己的修复 PR) 红 run 被后续 skipped 取代,带着 stale 红合并
PR #5501 dev 用一次真实 labeled/synchronize 事件顶掉
PR #5577 标签在位,stale 红挂着(非必需检查,不阻塞)

每例的直接成本:一个需要人/agent 停下来「认签名解释掉」的红检查 —— 恰好是 merge-queue-triage、PM 复核、事件订阅三方都会各自撞一次的噪音源。

建议修法

pr-automation.yml 的 changeset-check 在 job 内实时读标签(gh api repos/$REPO/issues/$PR/labels 或等价物)替代 contains(github.event.pull_request.labels.*.name, ...) 的载荷读法 —— 这样首个 run 也能看见「创建后、运行前」落上的标签;重跑也随实时状态收敛。事件载荷读法保留为 fast-path 亦可(载荷有标签 → 直接 skip,无标签 → API 再确认一次)。

注意与该 job 现行「⛔ 不改计数逻辑」边界的关系:本单只动标签读取时机,不动 BASE_SHA diff 计数(#5292/PR #5467 的修正照旧)。

关联

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions