Skip to content

chore: bump CI Node versions to 22 and 24#524

Merged
wemeetagain merged 3 commits into
ChainSafe:masterfrom
lodekeeper:chore/update-node-versions-22-24
May 14, 2026
Merged

chore: bump CI Node versions to 22 and 24#524
wemeetagain merged 3 commits into
ChainSafe:masterfrom
lodekeeper:chore/update-node-versions-22-24

Conversation

@lodekeeper
Copy link
Copy Markdown
Contributor

Summary

  • Bump test matrix Node versions from [18, 20] to [22, 24] (Node 18 is EOL).
  • Bump benchmark workflow Node version from 20 to 24 to match the release workflow.

Closes #495

Test plan

  • CI green on test-node matrix for both Node 22 and Node 24
  • Benchmark workflow runs on Node 24

🤖 Generated with AI assistance

Node 18 is EOL; switch test matrix from [18, 20] to [22, 24] per @nflaig
in ChainSafe#495. Bump benchmark workflow to Node 24 to match the release workflow.

Closes ChainSafe#495

🤖 Generated with AI assistance
@lodekeeper lodekeeper requested a review from a team as a code owner April 21, 2026 12:26
nflaig
nflaig previously approved these changes Apr 21, 2026
@nflaig
Copy link
Copy Markdown
Member

nflaig commented Apr 21, 2026

I believe this might need some repo setting changes to be able to merge it cc @wemeetagain

@lodekeeper
Copy link
Copy Markdown
Contributor Author

Triaged before you get a chance to look at it — the blocker here isn't a repo setting. I checked:

  • branches/master/protection → 404 (no classic branch protection)
  • rulesets[] (no rulesets)
  • mergeable: true, mergeable_state: "blocked" is driven purely by the failing required status checks.

The actual blocker is two failing checks: Tests Node (22) and Tests Node (24). Both fail with the same symptom in packages/ssz spec-mainnet:

× mainnet/phase0/ssz_static/BeaconState/ssz_random case_0  16565ms
  → Test timed out in 15000ms.
× ... case_1 16023ms
× ... case_2, case_3, case_4 — all > 15000ms

Master's last Tests run (5ae98cf, Node 18/20) was green at 12:21 UTC, so it's specifically the big BeaconState/ssz_random cases crossing the 15s line on newer Node runners. Root cause looks like a latent bug in the test itself: test/spec/ssz_static.ts:53 calls vi.setConfig({testTimeout: 30 * 1000}) inside the it() callback, which doesn't take effect for the currently running test. Node 18/20 finished fast enough to stay under the default 15s; Node 22/24 pushed past it.

Fix is probably a one-liner — pass the timeout as the 3rd arg to it() or raise the default in vitest.base.unit.config.ts. Happy to push that here, or split it into its own PR first if you'd prefer to land the test fix independently before the Node bump. Let me know.

@nflaig
Copy link
Copy Markdown
Member

nflaig commented Apr 21, 2026

@lodekeeper please fix the tests as part of this PR

`vi.setConfig({testTimeout: 30 * 1000})` was called inside the `it()`
callback, which does not affect the currently-running test's timeout.
On Node 22/24 runners the mainnet `BeaconState/ssz_random` cases take
16-17s and exceed the default 15s, causing `Tests Node (22)` and
`Tests Node (24)` to fail. Move the timeout to the third argument of
`it()` so it actually applies.

🤖 Generated with AI assistance
@lodekeeper
Copy link
Copy Markdown
Contributor Author

Pushed 9342349 — moves the mainnet timeout to it()'s 3rd arg in packages/ssz/test/spec/ssz_static.ts. The vi.setConfig({testTimeout: 30_000}) call was inside the it() callback and therefore didn't apply to the currently-running test, which is why the default 15s was still in effect and the BeaconState/ssz_random cases (16–17s on Node 22/24 runners) were timing out. Also dropped the now-unused vi import. CI is running — I'll watch for Tests Node (22)/(24) to go green.

@lodekeeper
Copy link
Copy Markdown
Contributor Author

Heads up — the push landed action_required on Tests, Benchmark, and Labeler. The workflow runs need a maintainer to approve them before Node 22/24 will actually re-run against the fix. (This is probably the repo setting you were pointing at earlier — likely Settings → Actions → Require approval for all outside collaborators.) Could you (or @wemeetagain) kick off approval so the checks can run? I'll monitor once they start.

Comment thread packages/ssz/test/spec/ssz_static.ts
[email protected] requires Node 22.13+, but the Bun job installed pnpm
globally via Bun and ran it under the ubuntu-latest default Node 20:

  warn: This version of pnpm requires at least Node.js v22.13
  warn: The current version of Node.js is v20.20.2
  Error [ERR_UNKNOWN_BUILTIN_MODULE]: No such built-in module: node:sqlite

Set up Node 22 explicitly before installing Bun, and use corepack to
provide pnpm (mirrors the test-node job). Drops the duplicated
oven-sh/setup-bun steps and bumps checkout to v3 for consistency.

🤖 Generated with AI assistance
@wemeetagain wemeetagain merged commit e8c3edb into ChainSafe:master May 14, 2026
9 checks passed
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.

Remove the support for Node 18

3 participants