Repository navigation
ci: run the test suite on Node 20, 22 and 24 - #1
Merged
Merged
Conversation
The repo had no CI, so nothing checked the `engines: >=20` promise while development happens on v24. Deliberately not the stock GitHub Node template: that runs `npm ci` and caches on a lockfile, and this plugin has zero runtime dependencies, so there is no lockfile and `npm ci` would fail on the first step. With no install step needed the job is checkout, setup-node, `npm test`. fail-fast is off so a break on the floor version still reports the others. Verified locally before pushing: 344/344 on v20.20.2, v22.23.2 and v24.19.0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The first run warned three times that actions/checkout@v4 and actions/setup-node@v4 target Node 20, which GitHub deprecated for the action runtime and now force-runs on Node 24. This is about the runtime executing the action code, not the matrix — the Node 20 leg stays, since >=20 is the engines floor this repo promises. v5 and up target node24 and clear the warning; both are taken to the current major. setup-node v5 made caching automatic, which would have broken a repo with no lockfile. v6 narrowed that to fire only when package.json declares a `packageManager` field, and this one does not, so the bump is safe as-is. Setting package-manager-cache: false anyway, so adding that field later cannot silently reintroduce a cache step with no lockfile to key on. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
rogerjeasy
added a commit
that referenced
this pull request
Sep 1, 2026
The repo had no CI, so nothing checked the `engines: >=20` promise while development happens on v24. Matrix covers 20, 22 and 24, with fail-fast off so a break on the floor version still reports the others. Deliberately not the stock GitHub Node template: that runs `npm ci` and caches on a lockfile, and this plugin has zero runtime dependencies, so there is no lockfile and `npm ci` would fail on the first step. With no install needed the job is checkout, setup-node, `npm test`. setup-node is pinned with package-manager-cache: false for the same reason — v6+ only auto-caches when package.json declares a `packageManager` field, which this one does not, but pinning it off means adding that field later cannot silently reintroduce a cache step with no lockfile to key on. Verified on all three majors locally (344/344 on v20.20.2, v22.23.2, v24.19.0) and green on Actions before merge.
rogerjeasy
added a commit
that referenced
this pull request
Sep 1, 2026
The repo had no CI, so nothing checked the `engines: >=20` promise while development happens on v24. Matrix covers 20, 22 and 24, with fail-fast off so a break on the floor version still reports the others. Deliberately not the stock GitHub Node template: that runs `npm ci` and caches on a lockfile, and this plugin has zero runtime dependencies, so there is no lockfile and `npm ci` would fail on the first step. With no install needed the job is checkout, setup-node, `npm test`. setup-node is pinned with package-manager-cache: false for the same reason — v6+ only auto-caches when package.json declares a `packageManager` field, which this one does not, but pinning it off means adding that field later cannot silently reintroduce a cache step with no lockfile to key on. Verified on all three majors locally (344/344 on v20.20.2, v22.23.2, v24.19.0) and green on Actions before merge.
rogerjeasy
added a commit
that referenced
this pull request
Sep 1, 2026
The repo had no CI, so nothing checked the `engines: >=20` promise while development happens on v24. Matrix covers 20, 22 and 24, with fail-fast off so a break on the floor version still reports the others. Deliberately not the stock GitHub Node template: that runs `npm ci` and caches on a lockfile, and this plugin has zero runtime dependencies, so there is no lockfile and `npm ci` would fail on the first step. With no install needed the job is checkout, setup-node, `npm test`. setup-node is pinned with package-manager-cache: false for the same reason — v6+ only auto-caches when package.json declares a `packageManager` field, which this one does not, but pinning it off means adding that field later cannot silently reintroduce a cache step with no lockfile to key on. Verified on all three majors locally (344/344 on v20.20.2, v22.23.2, v24.19.0) and green on Actions before merge.
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.
Adds the repo's first CI workflow:
.github/workflows/test.yml.Why not the suggested template
GitHub's stock Node.js starter would fail on step one here. It runs
npm ciand setscache: npm, both of which key off a lockfile — and this plugin has zero runtime dependencies, so there is nopackage-lock.jsonand nothing to install. Stripping those leaves checkout → setup-node →npm test.The other two suggestions don't apply: Deno isn't used anywhere, and publishing to GitHub Packages is meaningless for a plugin that ships via
/plugin marketplace addcloning this repo, with"private": trueset.What it checks
Matrix over Node 20, 22, 24.
package.jsondeclaresengines: >=20but development happens on v24, so until now nothing verified the floor.fail-fast: falseso a break on 20 still reports 22 and 24.Also sets least-privilege
permissions: contents: readand a concurrency group that cancels superseded runs.Verification
Ran the full suite locally on all three majors before pushing:
The YAML was also parsed and structurally checked rather than eyeballed.
🤖 Generated with Claude Code