Skip to content

chore: move CI and the image build to Node 24 LTS - #57

Merged
JuanCF merged 2 commits into
mainfrom
chore/node-24-lts
Aug 25, 2026
Merged

chore: move CI and the image build to Node 24 LTS#57
JuanCF merged 2 commits into
mainfrom
chore/node-24-lts

Conversation

@JuanCF

@JuanCF JuanCF commented Aug 25, 2026

Copy link
Copy Markdown
Owner

Why

Two separate Node problems, both fixed by landing on the same version.

Node 20 is end-of-life. GitHub's runners now emit a deprecation warning
for every action declaring a node20 runtime, and already execute them on
Node 24 via a compatibility shim that will eventually go away.

CI and the image disagreed. lint.yml and release.yml built and
tested the frontend on Node 20, while the Dockerfile built that same
frontend on Node 22. The version validated in CI was never the version
shipped.

What

Node 24 is the current active LTS; Node 22 dropped to maintenance in
October 2025.

Project Node

File Before After
lint.yml node-version: '20' '24'
release.yml (×2) node-version: '20' '24'
Dockerfile node:22-slim node:24-slim

The Dockerfile is included on purpose — leaving it on 22 would just
recreate the tested-on-X / shipped-on-Y split this PR exists to close.

Local development

Adds src/frontend/.nvmrc pinning 24, so nvm use (or fnm/asdf) in the
frontend directory gives contributors the same Node the CI and the image
build use.

Action runtimes

Every action bumped one major to its node24 runtime. The pinned SHAs in
docker-publish.yml were re-resolved; lint.yml and release.yml keep
their existing unpinned-tag style.

Action Before After
actions/checkout v4 v5.1.0
docker/setup-qemu-action v3 v4.2.0
docker/setup-buildx-action v3 v4.3.0
docker/login-action v3 v4.6.0
docker/metadata-action v5 v6.2.0
docker/build-push-action v6 v7.3.0
actions/setup-python v5 v6
actions/setup-node v4 v5
softprops/action-gh-release v2 v3

Testing

Ran the full frontend suite inside node:24-slim (v24.19.0):

  • tsc -b clean
  • eslint . clean
  • 169 tests across 24 files pass
  • vite build succeeds

The image builds, and its digest comes out byte-identical to the Node
22 build — confirmed not to be a stale cache by checking node -v inside
the builder stage. The toolchain moves without changing the shipped
artifact.

Not covered by local testing

release.yml only fires on v*.*.* tags, so the
softprops/action-gh-release v2→v3 bump is unexercised until the next
release tag. The inputs this repo uses (files, generate_release_notes)
are unchanged in v3.

Node 20 reached the end of its life and GitHub's runners now warn on
actions that declare a node20 runtime. Separately, CI built and tested the
frontend on Node 20 while the Docker image built it on Node 22, so the
version validated in CI was never the version shipped.

Move everything to Node 24, the current active LTS (Node 22 dropped to
maintenance in October 2025):

- lint.yml and release.yml: node-version 20 -> 24.
- Dockerfile: node:22-slim -> node:24-slim, so the image builds the SPA on
  the same version CI tests it on.
- Bump every action one major to its node24 runtime, re-resolving the
  pinned SHAs in docker-publish.yml: checkout v5.1.0, setup-qemu v4.2.0,
  setup-buildx v4.3.0, login v4.6.0, metadata v6.2.0, build-push v7.3.0,
  plus setup-python v6, setup-node v5 and action-gh-release v3.

Verified against node:24-slim: tsc -b and eslint are clean, all 169
frontend tests pass, and the image builds. The resulting image digest is
byte-identical to the Node 22 build, so the toolchain moves without
changing the shipped artifact.
@coderabbitai

coderabbitai Bot commented Aug 25, 2026

Copy link
Copy Markdown

Warning

Review limit reached

Next included review available in 6 minutes.

View limit details

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: bbe3ab5e-1794-4f47-af45-028c3621d7fb

📥 Commits

Reviewing files that changed from the base of the PR and between 8736ada and 3411512.

📒 Files selected for processing (5)
  • .github/workflows/docker-publish.yml
  • .github/workflows/lint.yml
  • .github/workflows/release.yml
  • Dockerfile
  • src/frontend/.nvmrc

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Gives nvm, fnm and asdf users the same Node version CI and the Docker
image build use, so `nvm use` in src/frontend matches what the SPA is
actually tested and built on.
@JuanCF
JuanCF merged commit 732154f into main Aug 25, 2026
6 checks passed
@JuanCF
JuanCF deleted the chore/node-24-lts branch August 25, 2026 06:10
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.

2 participants