用途:从近期 BuildKite 运行中找出最慢的测试文件,用于定位 CI 中的性能瓶颈。参数为 [N] [#channel],均可选;N 默认 500,省略频道时只打印表格。
主要能力:脚本 scripts/ci-slowest-tests.ts 会列出 bk build view <N> 中的 test-bun 任务并跳过 retried: true;用 Authorization: Bearer $BUILDKITE_TOKEN 直接抓取各任务的 raw_log_url(不要用 bk job log,它在部分 Windows/alpine 任务上会挂起);日志缓存到 $TMPDIR/bun-ci-logs-<build>/;解析 _bk;t=<ms> ... --- [N/TOTAL] <file> 分组头,统一反斜杠并去掉 [attempt #N];按平台取最大耗时聚合,丢弃 package.json 等非测试条目。
用法:bun run ci:slowest 取最近合并 PR 构建的前 500;bun run ci:slowest 47324 100 指定构建取前 100;bun run ci:slowest --json > /tmp/slow.json 输出 JSON。若无法自动选构建,可用 gh pr list --state merged --limit 10 --json number,headRefName 再配合 bk build list --branch <headRefName> 手动指定。
发 Slack:slack_send_message 不支持 markdown 表格,需先用 slack_search_channels 查频道 ID,把完整表格写入文件并用 gh gist create 生成 secret gist,再发主消息(构建链接、gist 链接、前 20 条)并在 thread 中续发 21–N 条,每块控制在 4800 字符内。
限制:合并 PR 构建常因 flaky 测试显示 failed,但计时数据仍有效;Slack 无文件上传工具,gist 为约定回退方案;Canvas 在约 10 KB 以上会 502。