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 门里能复用,实际开销可能比想象的低。

相关

Activity

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

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