Skip to content

ci: merge queue 吞吐优化——Test Core / Dogfood 各 2→3 分片 + 队列失败自动分诊评论 #4859

Description

@xuyushun441-sys

背景(2026-08-03 上午实测数据)

merge queue 体感慢。查了当天全部 merge_group 运行:

  1. 单次队列构建关键路径 ~11 分钟filter(10s) → Test Core (2/2) 测试步 9m50s → 聚合 gate。分片按测试文件数均分但运行时长不均(shard 2 = 9m50s vs shard 1 = 7m47s)。Test Core 砍掉后,下一根长杆是 Dogfood (2/2) 7m38s。
  2. 失败放大是主因:当天 20 个队列构建 7 个失败。fix(service-analytics): 按聚合种类填充「查询从未报告过的分组」,并补上 compareTo 这一道接缝 (#4708) #4822 同内容红 4 次第 5 次过(09:19→10:22 才落地),每次失败连坐后面所有构建重建(refactor(spec)!: 退役 activationEvents(两处键)与 ActivationEventSchema 词表 —— 四仓零 runtime reader 的惰性激活声明 (#4657) #4831/feat(plugin-audit)!: sys_comment 的 visibility / reply_count 退役 —— ADR-0049 enforce-or-remove,两键都移除 (#4756) #4849 失败 4 分钟后原样通过)。失败全部集中在 Test Core 分片——PR 侧跑 affected-only、队列跑全量,flaky 测试专门在队列(最贵的位置)爆炸。而每次失败都被盲目重排,没有人先回答「失败的测试与本 PR 相关吗」。

范围

  1. Test Core 2→3 分片ci.yml):matrix + 分区参数 /3。安全性:branch protection 只 require 聚合 gate Test Corechore(ci): cut PR wall-clock ~9.5min → ~5-6min — dedupe dogfood, shard it, cache lint's build #3622 之后 gate 承载稳定名,分片数可变正是建 gate 的目的)。关键路径预期 ~11min → ~8min。
  2. Dogfood 2→3 分片ci.yml):同上,vitest --shard=x/3(单包 ~60 文件,3 分片安全)。顺带给 dogfood 的 turbo restore 补一个 job 级兜底恢复键(现在只有 shard 级前缀,新 shard 3 在 main 播种前全冷;Test Core 的同名 fallback 模式已存在)。
  3. 新 workflow:merge_group 失败自动分诊评论workflow_run(CI, completed) + event == merge_group && conclusion == failure 触发:从队列分支名解析 PR 号,列出失败 job/step、从日志抽取失败测试名,附本 PR 的重排失败历史与当天队列失败面板,评论到 PR 上,带分诊清单(与本 PR 相关→修 PR;无关→先查 flaky/同组语义冲突,不要盲目重排)。给人和 PM agent 一个机器可读的「先诊断再重排」信号。

不做(已查证)

  • lint.yml typecheck 加 turbo 缓存——已存在(restore + main 播种 save 都在),10 分钟档是 spec 改动全量重编译的真实代价。
  • merge queue 设置(并发构建数、组大小)是仓库 Settings,不在代码内;建议维护者:并发 ≥5,flaky 清掉前组保持小。

验收

  • 队列构建里 Test Core 最慢分片 ≤ ~7min,Dogfood 最慢分片 ≤ ~5.5min;Test Core / Dogfood Regression Gate 两个 required 上下文名字不变。
  • 人为让一个 merge_group 构建失败,对应 PR 收到分诊评论,含失败测试名与重排历史;cancelled(连坐撤销)不触发评论。

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions