build: Move Node toolchain to 26 LTS #18

Open
opened 2026-11-03 16:15:15 +00:00 by mira · 1 comment
Collaborator

Maintenance/quality. Purpose: keeps meets #3 (CI tests pass reliably) on a supported toolchain.

Standard: https://git.s1d3sw1ped.com/s1d3sw1ped/forge-standards/src/branch/master/forge-toolchain.md (Node row). Node 26 "Lithium" has been Active LTS since 2026-10-28 (v26.13.0). Node 24 went to Maintenance LTS on 2026-10-20. Justin approved the move on 2026-11-03.

What uses Node today (master)

  • .forgejo/workflows/ci.yaml: two setup-node@v4 steps with node-version: "24"
  • .forgejo/workflows/release.yaml: node-version: "24"
  • .nvmrc: 24
  • Dockerfile: RUN apk add --no-cache nodejs npm in the golang:1.27.2-alpine3.24 builder. This gets whatever Node version Alpine ships, not a pinned one. Pin 26 instead, for example with a node:26-alpine UI stage like helix-proxy uses, or with an Alpine package that is actually 26.
  • web/ui/package.json (Svelte 5, Vite 8) and web/ui/package-lock.json. No engines field.

Acceptance criteria

  1. Every Node pin is set to 26: CI node-version, .nvmrc, engines (if present), and any Docker base image or Node package.
  2. Install, build and test pass on Node 26 in CI, and the PR links the green run.
  3. Lockfiles are regenerated if needed (npm install on Node 26 with the bundled npm). Commit them only if they actually change.
  4. Nothing about the product behaves differently.
  5. Preflight: if the repo has a preflight, its Node check (found/required/fix) requires 26.
  6. The Docker build's UI step runs on Node 26. Show node --version in the build log.

Scope: only the Node version. setup-node stays on @v4.

Maintenance/quality. Purpose: keeps meets #3 (CI tests pass reliably) on a supported toolchain. Standard: https://git.s1d3sw1ped.com/s1d3sw1ped/forge-standards/src/branch/master/forge-toolchain.md (Node row). Node 26 "Lithium" has been Active LTS since 2026-10-28 (v26.13.0). Node 24 went to Maintenance LTS on 2026-10-20. Justin approved the move on 2026-11-03. ## What uses Node today (master) - `.forgejo/workflows/ci.yaml`: two `setup-node@v4` steps with `node-version: "24"` - `.forgejo/workflows/release.yaml`: `node-version: "24"` - `.nvmrc`: 24 - `Dockerfile`: `RUN apk add --no-cache nodejs npm` in the `golang:1.27.2-alpine3.24` builder. This gets whatever Node version Alpine ships, not a pinned one. Pin 26 instead, for example with a `node:26-alpine` UI stage like helix-proxy uses, or with an Alpine package that is actually 26. - `web/ui/package.json` (Svelte 5, Vite 8) and `web/ui/package-lock.json`. No `engines` field. ## Acceptance criteria 1. Every Node pin is set to 26: CI `node-version`, `.nvmrc`, `engines` (if present), and any Docker base image or Node package. 2. Install, build and test pass on Node 26 in CI, and the PR links the green run. 3. Lockfiles are regenerated if needed (`npm install` on Node 26 with the bundled npm). Commit them only if they actually change. 4. Nothing about the product behaves differently. 5. Preflight: if the repo has a preflight, its Node check (found/required/fix) requires 26. 6. The Docker build's UI step runs on Node 26. Show `node --version` in the build log. Scope: only the Node version. setup-node stays on @v4.
Owner

Routing this to Ash to implement. It touches CI workflows and the Dockerfile, so Blake should review the PR along with me. Linus merges once it's green.

Routing this to Ash to implement. It touches CI workflows and the Dockerfile, so Blake should review the PR along with me. Linus merges once it's green.
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
s1d3sw1ped/scratchbox#18
No description provided.