Latest Results
build: move the CI toolchain to node 24 (#91)
* build: move the CI toolchain to node 24
Node 20 reached end of life on 2026-04-30 and node 22 (Jod) has been in
maintenance-only since 2025-10-21. Node 24 (Krypton) is the active LTS until
2026-10-20 and is supported to 2028-04-30, and the release and publish jobs
already pinned 24.19.0 for the npm version it bundles -- so the rest of the
repo was building and testing on a line the release never used.
Everything that resolves a node now resolves 24:
- release.yml build, pr-checks.yml build / test / dist-size / browser-smoke:
'22' -> '24'
- release.yml release + publish: 24.19.0 -> 24.20.0
- bench.yml codspeed-bench, pr-checks.yml codspeed-walltime:
22.23.1 -> 24.20.0
- root package.json engines.node: >=22.13 -> >=24
- tools/docker/Dockerfile: nodesource setup_22.x -> setup_24.x
24.20.0 (2026-08-26) is the current LTS patch, and one exact version now covers
every exact pin in the repo. It bundles npm 11.19.0, still past the 11.5.1 that
OIDC trusted publishing needs, so the publish job's no-`npm install --global`
property is preserved -- tools/release/README.md updated for the new numbers.
THE CODSPEED PINS ARE A BASELINE RE-SEED. 22.23.1 -> 24.20.0 crosses a V8
major, and docs/ci/self-hosted-runner.md is explicit that a node change shifts
instruction counts the way a CPU or glibc change does. Expect the first main
run after this to report large deltas on every bench, and read none of them as
regressions. Noted in that doc alongside the existing pin-exactly rule.
Corepack is still bundled in node 24 (verified: deps/corepack is present in the
v24.20.0 tree), so `corepack enable pnpm` on the nashua box is unaffected. The
existing "node 25 unbundles corepack" caveat stays where it is -- it is about a
bump this commit does not make.
Published packages keep `"node": ">=0.14"`. That constrains consumers of the
wasm codecs, not this repo's build toolchain, and nothing here needs it raised.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* build: finish the node 24 move (devcontainer, cache keys, dist-size)
Follow-up on review of #91. The bump left three things behind on 22:
- .devcontainer/Dockerfile still ran setup_22.x under a comment reading
"node 22 to match CI", which stopped being true in the same commit -- and
engines.node became >=24, so pnpm now warns "Unsupported engine" on every
install in that container. Bumped to setup_24.x. The comment now says what
is actually shared with CI (the node major) and what deliberately is not
(the older emsdk pin), so it does not go stale the same way again.
- The node_modules cache keys in the test, browser-smoke and
codspeed-walltime jobs, plus codspeed-bench in bench.yml, all carried a
literal node22 discriminator. bench.yml's key hashes only pnpm-lock.yaml
and pnpm-workspace.yaml, so nothing in a node-only bump invalidates it:
the bench would have restored a node-22 node_modules tree, skipped the
install step (gated on cache-hit), and measured the "clean node 24
re-seed" against dependencies installed by the previous V8 major. Now
node24, with the reason for the discriminator written down next to the
build job's key so the next bump moves it too.
- dist-size had no setup-node at all, contrary to what the PR description
claimed, so the size gate ran on whatever node the runner image shipped.
check.js only needs fs/path/zlib, so this was harmless rather than broken,
but it was unpinned and could sit below the new engines floor. Pinned '24'
like every other job.
Also corrected two setup-node comments that justified the step with "fails
pnpm 11's engine check (>=22.13)" -- that floor is this repo's engines.node
and is now >=24.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> Latest Branches
-41%
AlasDiablo:worker-process-timer -21%
×2.1
© 2026 CodSpeed Technology