Repository navigation
ci: one setup-workspace composite action replaces the setup steps copied into 38 jobs, and pull requests stop saving the pnpm store - #26419
Conversation
…ence .github/actions/setup-workspace sets Node up from .nvmrc, acquires pnpm through setup-pnpm, restores the pnpm store, runs pnpm install --frozen-lockfile and saves the store on push and schedule runs only, so no pull_request or merge_group run writes a pnpm-store entry into the cache pool. 38 jobs call it; the node-only jobs read .nvmrc directly. Kept spelled out, each with the reason beside it: ci.yml's five ui jobs (pinned by name and text under ui/scripts/__tests__), the governed-surface-guard toolchain (pinned step by step by the queue guard's self-test; now restore-only), release.yml's release-integrity install of the version tree, and scaffold-e2e's registry canary (no checkout, so no .nvmrc). ui-deps saves the store on push and schedule only. check-pnpm-acquisition recognises the composite (two self-test cases); the queue guard's install-chain pin reads actions/cache/restore too. Dependabot reads .github/actions/* as well as the root. Claude-Session: https://claude.ai/code/session_01ADHkmQLxLez3gFZk5XQ3JX Co-authored-by: Claude <noreply@anthropic.com>
📓 Docs Drift CheckNothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 0 changed package(s)), so this run has no opinion about the docs. What this run could not see
Coarse fallback — 0 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
席位核对 · ACCEPT · devx seat 2 · 2026-10-27T03:11ZSeat
Still owed before landing: green CI on this head, and the os-dev-report's reading from this PR's own run that no |
|
devx seat 2 · ⛔ taken out of the merge queue (converted to draft), not rejected. @os-zhuang's approval stands and nothing on the branch changed.
The fix is in Generated by Claude Code |
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 40443632873 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 分类: 失败的 job(日志抽取,best effort):
跨 PR 相同签名(24h,按失败测试文件聚合):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
Requested by Steve · project thread
Fixes #26083
Clause-②: no
Metadata-protocol: none
维护者速读
.github/actions/setup-workspace组合 action(Node 读 .nvmrc、pnpm、store 缓存、pnpm install --frozen-lockfile),38 个 job 手抄的 setup 串换成它一步;只装 Node 的 job 改读 .nvmrc。.github/actions/setup-workspace/action.yml(保存条件那一步)、.github/workflows/release.yml的 publish job(组合 action 放在 Guard 之后)、.github/workflows/ci.yml的 ui-deps 保存条件。grep -c "node-version: '22'" .github/workflows/*.yml只剩 scaffold-e2e.yml 一处。.github/workflows/**),请 GOVERNED_APPROVERS 审批后由席位落地。What changes
.github/actions/setup-workspace/action.yml.actions/setup-nodewithnode-version-file: .nvmrc(andpackage-manager-cache: false, since pnpm is not on PATH yet), then./.github/actions/setup-pnpmas a step,pnpm store path,actions/cache/restoreon the one store key,pnpm install --frozen-lockfile, andactions/cache/saveonly whengithub.event_nameispushorscheduleand the exact key missed (continue-on-error: true). Inputs:install: 'false'(Node and pnpm only, for the jobs that run pnpm but install nothing),install-args(validate-deps keeps--prefer-offline),save-store: 'false'(the jobs that were deliberately restore-only stay so).showcase-smoke.ymlincluded: itspnpm/action-setupand setup-nodecache: pnpmare gone, so the acquisition census now reads 0 uncached sites. In release.yml'spublishjob the composite sits whereSetup pnpmwas, after the Guard step, so nothing is installed before the Guard has passed; that job keeps its own setup-node step (now.nvmrc).node-version-file: .nvmrc.ui-deps,type-check-ui,test-ui,lint-ui,build-e2e-ui). Pins underui/scripts/__tests__/read those steps by text and by name (see Acceptance notes); this PR does not touchui/**. They switch tonode-version-file: .nvmrc, andui-deps'Save pnpm cachenow also requirespushorschedule.check-governed-queue-guard.mjs --self-test. Its store step becomesactions/cache/restore(the workflow runs onpull_requestandmerge_grouponly, so it never saves now), and its Node pin reads.nvmrc.release-integrity: installs the version commit's tree, not the checkout.registry-canary: checks nothing out, so there is no.nvmrcto read; the one literalnode-version: '22'left, still held to.nvmrcbycheck:node-version.scripts/check-pnpm-acquisition.mjsrecognisesuses: ./.github/actions/setup-workspaceas a cached mechanism (MECHANISMS row, header spelling list, two new self-test cases: recognised, and late acquisition still fails; battery floor 12 to 14).scripts/pm/check-governed-queue-guard.mjs's install-chain pin matchesactions/cache/restore@as well asactions/cache@. No other behaviour changes in either..github/dependabot.yml: the github-actions entry readsdirectories: ["/", "/.github/actions/*"].TURBO_TOKENto every step of the job.fetch-depth, the Turbo seed keys, the Next.js cache and every job name are unchanged.Tests
The diff edits two gate scripts, so each one's own self-test ran, plus the derived family list (Verification).
node scripts/check-pnpm-acquisition.mjs --self-test:14 cases pass;pnpm check:pnpm-acquisition:OK, census45 acquisition site(s), 0 of them uncached(38 workspace, 7 setup-pnpm, 0 action-setup).node scripts/pm/check-governed-queue-guard.mjs --self-test:393 cases pass, exit 0.Acceptance notes
Counts re-taken on
origin/mainat c51aed4 before the edit and on this head after (.github/workflows/*.yml):node-version: '22'pnpm-store-v3-${{ hashFiles(...) }}pnpm install --frozen-lockfileuses: ./.github/actions/setup-workspaceThe ui pins that hold the five ui jobs' steps in place (for the ui lane to move onto the composite later; none edited here):
ui/scripts/__tests__/ci-setup-pnpm-wiring.test.ts: each ui job must contain the textuses: ./.github/actions/setup-pnpmbefore its first pnpm.ui/scripts/__tests__/turbo-cache-save-bound.test.ts:ui-depssaves the store through its own boundedactions/cache/savestep paired with a restore that has anid.pnpm install --frozen-lockfilelocated by text in the job block:check-action-forward-parity,check-i18n-call-site-keys,check-i18n-designer-table-parity,check-i18n-en-drift,check-package-self-import,check-phantom-dependencies,check-unreferenced-sources,check-vi-mock-override-shape(allui/scripts/__tests__/*.test.ts).The second Acceptance item (no
pnpm-store-*save on apull_requestrun) is read from this PR's own CI run and reported on the card.Verification
Gate families derived by
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackat the head below, each exit captured before any pipe, reconciled with--ran.Head
2cb5ee1f, merge basec51aed4f.dispatch-gates --ran:94 derived famil(ies) accounted for — 94 run, 0 NOT-MEASURED (a DERIVED zero — all 94 recorded an exit code and none of them is 3). All 94 exit 0.check:dts-closure,check:dual-build-cjs-loads,check:lean-entry-closure,check:sourcemap-no-sources-content) andcheck:type-check-debthit the loop's 300 s cap while it built. Afterturbo run build --filter='./packages/**'underos-verify-lock.sh(VERDICT command-exit 0, 75/75 tasks) all five re-ran to exit 0.pnpm check:pm-dispatch-gates:1901 cases pass(fast tier), exit 0.pnpm check:node-version:OK (23 setup-node step(s) across 39 workflow(s) and 3 composite action(s), all on Node 22).ci.yml's ui jobs: everyui/scripts/__tests__/*.test.tsthat reads the root workflows (41 files,vitest run --project unit):Test Files 41 passed (41),Tests 1284 passed (1284).pnpm lintand the rest ofLint & Repo Gates); this PR's check-runs are their reading.Generated by Claude Code