Skip to content

An objectui pin bump reaches main without any PR gate ever building the pinned SHA #4290

Description

@os-zhuang

#4288.objectui-sha96ee72e 推到 bebaebd)上发现的。合并没问题 —— 但它绿得太容易了,查下来是真缺口。

现象

.objectui-sha 是 vendored Console SPA 的唯一真相源:发布流水线读它、clone objectui、构建 @object-ui/console、把 dist 拷进 packages/console/。改这个文件等于改平台发出去的整个前端。

而在 #4288 上,14 项检查里 6 项直接 skip,包括 Build Core、Test Core、Check Generated Artifacts、Build Docs、Dogfood Regression Gate。原因是路径过滤:tracked diff 只有 .objectui-sha + 一个 changeset,ci.yml 里没有任何 job 以这个文件为触发路径。

grep 确认 .objectui-sha 只出现在两处,都不是 PR 门

.github/workflows/release.yml       ← 发布时才构建
.github/workflows/showcase-smoke.yml

而 showcase-smoke 自己的头注释写得很清楚:

Manual + nightly only; it never gates PRs. Promote to a PR gate once it has proven stable here.

后果

一个构建不出来的 objectui SHA(打错、force-push 没了的提交、objectui 那边真的构建坏了、或 bundle canary 失效)可以一路绿灯进 main,直到:

  • 当晚的 nightly smoke(非阻塞,红了也不拦人),或者
  • 发布的时候才炸。

也就是说这个改动唯一的实际验证来自作者本地是否想起来跑 scripts/build-console.sh#4288 我跑了(✓ Bundle canary 'import/jobs' present、45900 KB dist、来自 objectui@bebaebd39ace),但那是纪律,不是门。下一个人未必跑 —— 而 pnpm objectui:refresh 这个命令本身包含构建步骤,所以正常路径下确实会构建;风险在于有人只手改 .objectui-sha(或从别的分支 cherry-pick 这一行),那就完全没人拦。

建议

最小改动:在 ci.yml 的路径过滤里给 .objectui-shascripts/build-console.sh 加一个专门的 job,跑 bash scripts/build-console.sh + pnpm check:console-sha(后者已存在,验证 dist 被戳上了钉住的 SHA)。

成本考量是真实的 —— 构建 console 不便宜(本地约几分钟)。但它只在这两个文件变动时触发,而这类 PR 很少(这次的 pin 已经陈旧了 76 个提交,说明频率很低)。用「罕见但高影响」换「每次都跑」是划算的。

release.yml 已经有 dist 缓存(hashFiles('.objectui-sha', 'scripts/build-console.sh')),同样的 key 在 PR 门里能复用,实际开销可能比想象的低。

相关

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