Skip to content

观察单:Resolve the diff base 是 Check Changeset 里唯一只认快路径标签读取的可失败步骤,标签晚到 + git 基准不可用时会红一个本该豁免的 PR #6434

Description

@hotlong

#6378 / PR #6429 的实现过程中记录,未在该 PR 内修复(超出本单范围),按 Prime Directive #10 单独立观察单。

现象

pr-automation.ymlchangeset-check job 里,能让 PR 变红的步骤共五个。PR #6429 之后,其中四个同时认两次活标签读取(快路径读取 + 结算读):

  • Require a changeset (or the skip-changeset label)
  • Reject an empty-frontmatter changeset added by this PR
  • Require an ADR-0087 disposition on a declared-breaking changeset
  • Guard against accidental major bumps (launch window)

第五个 —— Resolve the diff base (merge base with the base branch) —— 只带 steps.labels.outputs.skip != 'true' 这一条快路径守卫,而它自己有两处 exit 1:

  • 事件不带 base 分支;
  • git merge-base 算不出来(例如 origin/BASE_REF 取不到)。

后果(复合条件,今天没人撞得到)

要踩到需要同时成立两件事:

  1. skip-changeset 标签晚于快路径读取才落地(即 Check Changeset 的首跑对 skip-changeset 路线结构性必红:job 在 PR 打开瞬间读标签,而标签只能在创建之后打上(今日实测复现 21 次) #6378 的那个窗口内 —— 这恰恰是常态),并且
  2. 该跑的 git 基准解析真的失败。

此时 Resolve the diff base 会在结算读有机会纠正之前就把 job 判红,而这个 PR 本该是豁免的。条件 2 极少发生(需要 fetch 失败一类的基础设施抖动),所以今天没有已知实例,归观察类。

这是有意留下的,不是遗漏

PR #6429 在正文的「不在本 PR 里」一节写明了该格,理由是:它的 exit 1 表达的是「git 基准不可用」,不是 changeset 判决,本就不受标签豁免;#6378 的范围是消除结构性假红,顺手扩大一个豁免面不在其内。该 PR 新增的 CONSUMER 断言按「跑 check-*.mjs 或发出 no-changeset 错误」来圈定判定步骤,有意把这一步排除在外,以免断言把一个没论证过的豁免钉成契约。

候选处置(未预设结论)

  1. 维持现状,只补注释说明该格是有意的(最省,今天也确实没人撞到)。
  2. 把结算读前移Resolve the diff base 之前。代价:结算读能白拿的已流逝时间从「约 +45s」降到「约 +20s」(checkout 之前),窗口内需要真等的概率上升 —— 而 fix(ci): Check Changeset 的 skip-changeset 判定加一次「结算读」,首跑不再结构性必红 (#6378) #6429 的成本论证正建立在「等待只向将红的 PR 收取」上,前移会让计数尚未发生、无法判断该 PR 是否将红,等待面因此扩大到所有无标签的 PR。这一条与 Check Changeset 的首跑对 skip-changeset 路线结构性必红:job 在 PR 打开瞬间读标签,而标签只能在创建之后打上(今日实测复现 21 次) #6378 的成本结论直接冲突,需要重新测量再决定。
  3. Resolve the diff base 的失败先落成一个 output,由后面已认两次读取的判定步骤统一裁决。

倾向 1 或 3;⛔ 选 2 之前必须重测,否则会把 #6378 刚消掉的成本以另一种形式加回来。

未认领,交分诊定级。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions