Repository navigation
perf(ci): install the remaining exact Node pins without GitHub API calls - #11073
Conversation
Switch the 16 remaining actions/setup-node steps that read .node-version to the local setup-pinned-node action, so they stop spending two job-token manifest reads per step on a tool-cache miss. - pr-require-checks: the six lanes whose root checkout is the code under test use ./.github/actions/setup-pinned-node; ci-status uses main's copy from its sparse .base checkout. - pr-review-hosted, pr-review-security-hosted, pr-review-main and eval-browser-dispatch use ./.base/... (main's copy). - maintenance-check-upstream-drift uses the root copy (schedule or dispatch). - maintenance-audit-test-selection stays on setup-node (cache: npm, about 0 calls/h). - ci-lanes-pr-hold.test.sh accepts a ci-status with no setup-node step. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
claude-review reviewed No findings. I read the whole diff (8 files) and the PR context. I checked the changes against the files they touch. I did not run anything, so the PR's lint and test results are author-claimed and unverified by me.
Cost: this change only reduces GitHub API calls and tool-cache misses. It starts no billed resource, so there is no hold. |
|
claude-security-review reviewed I found no security issues in this pull request, so What the change does. It replaces 16 Where the new action runs from
Why a shared tool cache doesn't add a path. The runners are GitHub-hosted Supply chain. Test change. The Trust controls. No hold script, trusted-actor list, kill-switch action, token request, or Spend. The change only lowers GitHub token API calls. It adds no billed resource, so I did not set |
No related issue: follow-up to #10840
Summary
#10840 added the local
setup-pinned-nodeaction and switched the steps that run from main. This PR switches the 16 remainingactions/setup-nodesteps that read the exact.node-versionpin (24.21.0). Each of those steps missed the runner's tool cache and spent two job-token API calls reading theactions/node-versionsmanifest.Fix
pr-require-checks.yml: lint-repo, check-plugins, check-catalog, test-bash, test-python, test-node./.github/actions/setup-pinned-node: the root checkout is the code under test and these jobs already run it with a read-only token, so a PR that changes the action is tested by its own CIpr-require-checks.yml: ci-status./.base/...: main's copy;/.github/actions/setup-pinned-node/added to its sparse.basecheckoutpr-review-hosted.yml,pr-review-security-hosted.yml: resolve-model, kill-switch./.base/..., path added to each sparse.basecheckoutpr-review-main.yml: review, review-subscription, review-fallback./.base/...:workflow_run,.baseis main's tip recorded in the same run, and no PR code is checked outeval-browser-dispatch.yml./.base/...(main), never.headmaintenance-check-upstream-drift.yml./.github/...(schedule runs main; dispatch needs write access)package-manager-cache: falseis dropped from each converted step: the action declares onlynode-version-fileand restores no cache.maintenance-audit-test-selection.ymlstays onactions/setup-node. It runs 3 times a day and usescache: npm, so converting it saves about 0 calls/h and drops its cache.scripts/ci-lanes-pr-hold.test.sh: the ci-status no-cache check now passes when ci-status has noactions/setup-nodestep. It still fails on any setup-node step withoutpackage-manager-cache: false. Before this change, the check failed whenever ci-status had no setup-node step.setup-pinned-node/README.mddocuments the root./.github/...form and when it must not be used.sync-hold-floor.pychange, per the owner's decision for this phase.Verification
Run locally on the head commit:
actionlinton the 6 edited workflows: exit 0.zizmor --offlineon the 6 edited workflows: no findings.scripts/ci-lanes-pr-hold.test.sh,ci-hold-cost-decision,ci-rerun-ci-status,setup-pinned-node, and everyscripts/*.test.shwhosetest-scopecovers these workflows (21 more, among themci-review-lanes,run-zizmor,workflow-self-paths,ci-hold-merge-group): all pass.node --test .github/actions/resolve-config/callers.test.mjs .github/scripts/pr-merge/workflow.test.mjs: pass (200 tests in callers).git grep -n -A3 actions/setup-node -- .github/workflows | grep node-version-filereturns onlymaintenance-audit-test-selection.yml.check-affected: pass.Metrics (§9)
Expected drop in pool-B
GITHUB_TOKENspend: about 880 calls/h, mostly from pr-require-checks (about 647/h) and the two hosted review workflows (about 210/h). The parent measures it before and after merge withbriefs/poolB-baseline.md: the hourly job-token spend over matched 24 h windows, plus one step log per converted workflow showingFound in cache @or a nodejs.org download, and noAcquiring 24.21.0 ... from https://github.com/actions/node-versions/.Related
pr-require-checks.ymland the hosted review files. There should be no textual conflict, since this PR adds no hold-list change.🤖 Generated with Claude Code