Skip to content

ci: move actions off the deprecated Node 20 runtime - #108

Merged
austenstone merged 1 commit into
mainfrom
chore/action-majors
Aug 20, 2026
Merged

ci: move actions off the deprecated Node 20 runtime#108
austenstone merged 1 commit into
mainfrom
chore/action-majors

Conversation

@austenstone

Copy link
Copy Markdown
Owner

Every action in both workflows was pinned old enough that the runner was already force-migrating it and warning on every single run:

Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4, actions/setup-node@v4

I only noticed because I read the annotations on a CI run rather than the green check.

action from to
actions/checkout v4 v7
actions/setup-node v4 v7
actions/configure-pages v5 v6
actions/upload-pages-artifact v3 v5
actions/deploy-pages v4 v5

The two changes that could have broken things quietly

These majors contain two behaviour changes that fail silently rather than loudly, so I checked both against this repo instead of assuming:

setup-node v5 auto-caches off a packageManager field in package.json, in addition to an explicit cache: input — so you can end up with two cache cycles. This repo has no packageManager field, so package-manager-cache: false isn't needed.

upload-pages-artifact v4 stopped bundling dotfiles by default. If dist/ contained a .nojekyll, it would have vanished from the artifact and Jekyll would start eating underscore-prefixed paths. A built dist/ here has no dotfiles at all, so include-hidden-files isn't needed.

upload-pages-artifact and deploy-pages are a matched pair and move together. No new permissions: scopes are required — the existing contents: read / pages: write / id-token: write covers all five.

Not affected

checkout v7's headline change blocks fork checkouts under pull_request_target and workflow_run. Neither workflow uses those triggers.

Verification

npm run build clean, both workflows still parse, and the real test is this PR's own CI run — it exercises the new checkout and setup-node on the ci job. The Pages-specific three only run on push to main, so those get exercised on merge.

Every action pin was old enough that the runner was already
force-migrating it to Node 24 and warning on every run:

  Node.js 20 is deprecated. The following actions target Node.js 20
  but are being forced to run on Node.js 24

checkout v4->v7, setup-node v4->v7, configure-pages v5->v6,
upload-pages-artifact v3->v5, deploy-pages v4->v5.

Two silent behaviour changes in these majors were checked against
this repo rather than assumed:

  - setup-node v5 auto-caches when package.json has a packageManager
    field, on top of an explicit cache: input. This repo has no such
    field, so no package-manager-cache: false is needed.
  - upload-pages-artifact v4 stopped including dotfiles by default.
    A built dist/ has none, so include-hidden-files is not needed.

upload-pages-artifact and deploy-pages are a matched pair and move
together. No new permissions scopes are required.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 3cf40db0-fafb-4793-92c6-3fe2b92d70bd
@austenstone
austenstone merged commit 9eca8c6 into main Aug 20, 2026
3 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.

1 participant