Skip to content

ci: bump actions off the deprecated Node 20 runtime - #12

Merged
narfman0 merged 1 commit into
masterfrom
ci-action-bumps
Jul 29, 2026
Merged

ci: bump actions off the deprecated Node 20 runtime#12
narfman0 merged 1 commit into
masterfrom
ci-action-bumps

Conversation

@narfman0

Copy link
Copy Markdown
Owner

Every action in ci.yml targeted Node 20, which GitHub deprecated. The runners were already force-running them on Node 24 and annotating every build with it.

action from to
actions/checkout v4 v7
actions/setup-node v4 v7
actions/upload-artifact v4 v7
pnpm/action-setup v4 v6

The one breaking change that mattered

actions/setup-node@v6 stopped auto-enabling caching for pnpm and yarn — it now only auto-caches npm, "to avoid compatibility issues" (#1374).

We're unaffected, because we pass cache: pnpm explicitly and the manual input is still the supported path. But it means that input is now load-bearing rather than a nicety, so I added a comment saying so — along with the ordering requirement that pnpm/action-setup must run before setup-node, or the binary isn't on PATH when the cache step looks for it.

Worth knowing because the failure mode is silent: it wouldn't break the build, just quietly stop caching and make every run slower.

Everything else

ESM migrations, Node 24 runtimes, additive inputs. checkout@v7 blocks fork checkout for pull_request_target / workflow_run; this workflow triggers on push and pull_request, so it doesn't apply.

Deliberately not included

The runtime Node stays on 22node-version: 22, FROM node:22-alpine, and @types/node@^22. That's a separate decision: Node 22 is in maintenance LTS until April 2027, and moving the Docker base means rebuilding better-sqlite3 against a new ABI on the image that serves prod. Worth doing deliberately, not as a side effect of a CI hygiene change.

Note also superfly/flyctl-actions/setup-flyctl@master is pinned to a moving branch rather than a tag — unchanged here, but it's the one remaining supply-chain soft spot in this file.

Verification

CI on this PR exercises the ci and e2e jobs with the new pins. The deploy job only runs on push to master, so its checkout@v7 is first exercised on merge — it takes no inputs, so the risk is minimal.

Every pinned action targeted Node 20, which GitHub deprecated — the
runners were already force-running them on Node 24 and annotating every
build. checkout/setup-node/upload-artifact go to v7 and pnpm/action-setup
to v6; all four now declare node24 natively.

Reviewed the intermediate majors rather than bumping blind. One real
breaking change: setup-node v6 stopped auto-enabling caching for pnpm and
yarn (it now only auto-caches npm). It does not affect us — we pass
`cache: pnpm` explicitly, which is still the supported path — but the
input is now load-bearing rather than decorative, so it gets a comment
saying so, including the ordering requirement that pnpm/action-setup runs
first so the binary is on PATH.

The rest are ESM migrations, Node 24 runtimes, and additive inputs.
checkout v7 blocks fork checkout for pull_request_target/workflow_run;
this workflow triggers on push and pull_request, so it's unaffected.

Only the actions changed. `node-version: 22`, the Dockerfile base and
@types/node are all still 22 — moving the runtime is a separate decision
with a native-module (better-sqlite3) rebuild behind it.
@narfman0
narfman0 merged commit 5d473fd into master Jul 29, 2026
3 checks passed
@narfman0
narfman0 deleted the ci-action-bumps branch July 29, 2026 14:42
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.

1 participant