Skip to content

CI installs Node once per job, from setup-node - #1397

Merged
nedtwigg merged 2 commits into
mainfrom
ci-single-node-download
Oct 28, 2026
Merged

nedtwigg merged 2 commits into
mainfrom
ci-single-node-download

Conversation

@nedtwigg

Copy link
Copy Markdown
Member

devEngines.runtime uses onFail: "download", so the lockfile carries node@runtime:24.22.1. Every pnpm install therefore fetched Node from nodejs.org again, even when setup-node had already installed the same pinned version. On 2026-10-28, between 07:10 and 07:30 UTC, that fetch timed out: it failed Library Tests, hung the Standalone Smoketest for 30 minutes, and stalled the macOS platform check.

  • PR workflows (Library Tests, the webview and standalone smoketests, the platform check, Argos, Hosted preview, the security audit) now run pnpm install --frozen-lockfile --no-runtime and use setup-node's binary. That binary comes from the runner's tool cache or GitHub's actions/node-versions, with nodejs.org only as a last resort. The version still comes only from devEngines.runtime, through node-version-file: package.json.
  • Build & Test is the exception. Its self-host installer step runs a plain pnpm install, which provisions the runtime anyway. So this job drops setup-node instead, takes pnpm's runtime, checks it against the pin, and puts it on GITHUB_PATH. That is one download, still from nodejs.org.
  • Release workflows are unchanged. build.rs bundles the node on PATH, and under pnpm tauri that is pnpm's lockfile-checked runtime. The new FAIL IF S278 (security-supply-chain.md, pinned by scripts/supply-chain-config.test.mjs) fails if release.yml's build-standalone ever passes --no-runtime, which would make it ship a different binary.

Caching the pnpm store was considered and rejected: it would compete with rust-cache for the 10 GB cache quota.

The Windows and macOS runners first exercise this in this PR's own CI.

🤖 Generated with Claude Code

nedtwigg and others added 2 commits October 28, 2026 01:30
package.json's devEngines.runtime (onFail: download) puts a node@runtime
dependency in the lockfile, so every `pnpm install` fetched Node from
nodejs.org again after setup-node had already put the same pinned version
on PATH. On 2026-10-28 that fetch timed out and failed Library Tests, hung
Standalone Smoketest, and stalled the macOS platform check.

PR workflows (ci.yml, argos.yml, hosted-preview.yml, security-audit.yaml)
now install with `--no-runtime` and run on setup-node's binary, which
setup-node takes from the runner's tool cache or the actions/node-versions
releases on GitHub rather than nodejs.org. Build & Test is the one
exception: its self-host installer step runs a plain `pnpm install` that
provisions the runtime regardless, so that job drops setup-node and puts
pnpm's runtime on PATH instead, after checking it matches the pin.

The version still comes from devEngines.runtime alone. Release, publish,
and production-deploy workflows are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
`build.rs` bundles the `node` on PATH, which under `pnpm tauri` is the
devEngines.runtime install, checked against the lockfile's sha256. Copying
CI's new `--no-runtime` into release.yml's build-standalone would swap in
setup-node's binary and still pass the version check. S278 makes that a
FAIL IF, pinned by scripts/supply-chain-config.test.mjs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Oct 28, 2026 •

Copy link
Copy Markdown

Deploying mouseterm with  Cloudflare Pages  Cloudflare Pages

Latest commit: 7e98cac
Status: ✅  Deploy successful!
Preview URL: https://b1628052.mouseterm.pages.dev
Branch Preview URL: https://ci-single-node-download.mouseterm.pages.dev

View logs

@nedtwigg
nedtwigg merged commit 6dabb41 into main Oct 28, 2026
13 checks passed
@nedtwigg
nedtwigg deleted the ci-single-node-download branch October 28, 2026 08:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants