Repository navigation
ci(ui-merge): queue builds decide the four ui lanes from the merged diff against merge_group.base_sha - #25881
Conversation
…iff against merge_group.base_sha On merge_group the paths-filter step was skipped and the ui / ui_consumers outputs fell back to 'true', so every queue entry ran Test UI, Type Check UI, Build & E2E UI and Lint UI, docs-only entries included. dorny/paths-filter v4.0.3 resolves merge_group itself (payload base_sha vs head_sha), so the step now runs on that event too, continue-on-error there so a failed diff fails open to 'true'. docs / core / crosspkg ignore the step on merge_group and stay 'true', as before. schedule and workflow_dispatch are unchanged. check-expected-skips' header and ui roster reasons now say what the queue build does for the ui family. Claude-Session: https://claude.ai/code/session_01Suqt7vsGh5kE2NhDZyqeh6 Co-authored-by: Claude <noreply@anthropic.com>
…ps' declaration to line 137 The header paragraph on the ui jobs' queue-diff outputs moved the self-test-reads declaration down four lines. Claude-Session: https://claude.ai/code/session_01Suqt7vsGh5kE2NhDZyqeh6 Co-authored-by: Claude <noreply@anthropic.com>
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 40263232770 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 分类: 失败的 job(日志抽取,best effort):
跨 PR 相同签名(24h,按失败测试文件聚合):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
Requested by Tesla · project thread
Fixes #25867
Part of #25677 (post-cutover CI speed, item 1).
Clause-②: no
Metadata-protocol: none
What changed
ci.ymlfilterjob, nothing else in the workflow:dorny/paths-filterstep's allow-list gainsmerge_group. At the pinned v4.0.3 (ceb8a2b8) the action resolves that event itself:src/main.tstakesmerge_group.base_sha/merge_group.head_shafrom the payload whenbase/refare unset, andsrc/git.tsfetches the base sha at depth 1 and diffs the two trees (base..head). So the queue build reads the same filter block, with the same globs, as thepull_requestrun. There is no second copy of the globs to keep in step.merge_groupthe step iscontinue-on-error, so a base that cannot be fetched leaves the outputs empty,|| 'true'fills them in and every ui lane runs (fail-open). Onpull_request/pusha failure stays red, as before.docs,coreandcrosspkgignore the step onmerge_group: they are spelledgithub.event_name != 'merge_group' && steps.changes.outputs.X || 'true', so Build Core, Build Docs and Test Core keep running on every queue entry exactly as today. Onlyuiandui_consumersread the queue diff.schedule/workflow_dispatchstill skip the step and widen everything to'true'(full battery, ruling Q6-b).pushis unchanged.The four ui lanes'
if:lines are untouched.scripts/pm/check-expected-skips.mjs: the header and the four ui roster reasons now say that a queue build skips the ui lanes when the merged diff touches no ui path, rather than "every output widens to 'true' on merge_group".scripts/pm/dispatch-gates.self-test.mjs: the marker-census row for that file moves 133 to 137 (the header grew four lines).Resulting outputs per event (step value, then output):
uiuicorecore'true''true''true''true''true'Verification
Replayed the pinned action's
dist/index.jslocally with a syntheticmerge_groupevent payload (GITHUB_EVENT_NAME=merge_group,base_sha/head_shaset,INPUT_FILTERS= the filter block read out of this branch'sci.yml):uiui_consumers.claude/+scripts/only (abebc4e)ui/scripts (1210544)'true'fallback runs all fourThis PR's own queue entry changes
ci.yml, which is in theuifilter, so it runs all four ui lanes. The first non-ui entry after it lands is the live evidence the card asks for (four ui lanesskipped,Lint UIandBuild & E2E UIreported as skipped, which a required check accepts). It will be posted on #25867.Local gates at head
be2cff5e:node scripts/pm/dispatch-gates.mjs --commandsderives 67 commands; all 67 exit 0, and--ranreconciles 67 derived, 67 run, 0 NOT-MEASURED (a derived zero: every row carries its exit code). That includescheck:pm-dispatch-gates(fast tier, 1917 cases) and the fourdist/-reading Build Core guards, which ran after that battery's build. The gates the card names:check-ci-filter-parity(scan and--self-test),check:pm-expected-skips,check-step-collectors(scan and--self-test) all exit 0. The only failure on the way was thedispatch-gatesmarker census pinningcheck-expected-skips.mjs:133, fixed in the second commit.Acceptance notes
git diff --name-onlywith the same globs. Running the action itself on the event gives the same globs by construction and keepscheck-ci-filter-parity's one-step rule intact.docs/core/crosspkgcould read the queue diff the same way (Build Core and Build Docs would then skip on queue entries outside their paths). Not done here: the card scopes the ui outputs only, and the filter comment's "the queue build is the last validation before main" reasoning still governs those jobs. Carrier: none.维护者速读(草稿)
改了什么: 合并队列里,ui 的四个作业(Test UI、Type Check UI、Build & E2E UI、Lint UI)改成按"这批改动相对队列基点到底动没动 ui"来决定跑不跑。判定用的是 PR 上同一套路径规则。core、docs 那几个作业在队列里照旧全跑。
为什么改: 合并 ui 之后,每个排队条目都会把四个 ui 作业跑一遍,哪怕只改了文档或脚本。小条目从 4–10 分钟变成 16–18 分钟,每条多花约 220 runner-min。
风险与代价(含回滚): 判定失败(比如取不到基点)时按"全跑"处理,不会因此漏跑。动了 ui 或那七个被 ui 使用的包,队列里照样会跑 ui 作业。回滚只需 revert 这一个 PR。
席位意见:
你要做的: 这个 PR 改了
.github/workflows/ci.yml,属于 Tier H,需要你批准后由席位落地。落地后第一个非 ui 条目进队时,席位会在 #25867 贴出前后耗时对比。Generated by Claude Code