ci: move workflows from Node 20 (EOL) to Node 24 LTS - #111
Merged
Conversation
Node 20 reached end-of-life on 2026-04-30, so every job in this repo has been building and testing on an unsupported runtime that no longer receives security patches. Bumps all six node-version pins across ci.yml, deploy.yml and release.yml to Node 24, the current LTS (supported to April 2028). This also unblocks #95. jsdom 30 requires Node ^22.22.2 || ^24.15.0 || >=26, so on Node 20 every vitest worker died while loading jsdom/lib/api.js: Error: [vitest-pool]: Failed to start forks worker for test files ... at Object.<anonymous> node_modules/jsdom/lib/api.js:12:33 No test executed, which reported as 0% coverage and tripped the 80/75 thresholds. The coverage errors were the symptom; the EOL runtime was the cause. Raising Node is the fix rather than pinning jsdom back to 29 or lowering the thresholds. No engines field is added to package.json: this is a browser-targeted library, Node is only a build/test concern, and declaring a floor would constrain consumers for no benefit.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Moves all CI/CD jobs off an end-of-life Node runtime, and unblocks #95 as a consequence.
Node 20 is EOL
Node 20 reached end-of-life on 2026-04-30. Every job in this repo — CI, Pages deploy, and release — has been running on a runtime that no longer receives security patches. All six
node-versionpins acrossci.yml,deploy.yml, andrelease.ymlmove to Node 24, the current LTS (supported to April 2028).This is also the real fix for #95
#95 (
jsdom29 → 30) fails CI, and the reported error is misleading:That is a symptom, not the cause. The actual failure is that every vitest worker crashed before running a single test:
jsdom@30requires Node^22.22.2 || ^24.15.0 || >=26.0.0. On Node 20 it cannot load at all, so no test executed, so coverage was 0%, so the 80/75 thresholds failed.The tempting quick fixes here are both wrong:
jsdomback to 29 hides the fact that CI runs an EOL runtime.mainis healthy at 92.9% statements / 84.1% branches — the thresholds are correct and should not be touched.Raising Node fixes the underlying condition, after which #95 can merge on its own merits.
Deliberately not adding an
enginesfieldThis is a browser-targeted library; Node is only a build and test concern. Declaring a Node floor in
package.jsonwould constrain consumers without benefiting them.Verification
CI on this PR is itself the test — every job now runs on Node 24. Once green, I will rebase #95 onto this and confirm the jsdom 30 suite passes.