feat: upgrade to Node.js 24 LTS across CI, Docker, and package config (#1165)

Node.js 24.11.0 entered LTS (Krypton) with support through April 2028.
This upgrades all CI pipelines, Docker images, and package metadata
from Node 22 to Node 24.

Changes:
- ci.yml: node-version 22 → 24 (build + windows-portability jobs)
- pipeline.yml: node-version 22 → 24 (dev-publish, test-verify, prod-release)
- build-native.yml: node-version 22 → 24, actions/checkout@v4 → v6,
  actions/setup-node@v4 → v6
- cleanup-dev-versions.yml: node-version 22 → 24
- Dockerfile: node:22-bookworm → node:24-bookworm,
  node:22-slim → node:24-slim
- package.json: engines.node >=20.6.0 → >=22.0.0 (supports both 22 and 24)
- @types/node: ^22.0.0 → ^24.0.0

Verified: tsc --noEmit passes, 1729 unit tests pass on Node 24.14.0.
This commit is contained in:
Tom Boucher 2026-03-18 11:28:49 -04:00 committed by GitHub
parent 6eccae3b4b
commit 6bf15b44f3
7 changed files with 40 additions and 40 deletions

View file

@ -42,7 +42,7 @@ jobs:
name: Build ${{ matrix.platform }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
@ -101,11 +101,11 @@ jobs:
name: Publish platform packages
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- uses: actions/setup-node@v4
- uses: actions/setup-node@v6
with:
node-version: "22"
node-version: "24"
registry-url: "https://registry.npmjs.org"
- name: Download all artifacts

View file

@ -39,7 +39,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: '22'
node-version: '24'
cache: 'npm'
- name: Install dependencies
@ -72,7 +72,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: '22'
node-version: '24'
cache: 'npm'
- name: Install dependencies

View file

@ -15,7 +15,7 @@ jobs:
steps:
- uses: actions/setup-node@v6
with:
node-version: 22
node-version: 24
registry-url: https://registry.npmjs.org
- name: Unpublish old dev versions

View file

@ -34,7 +34,7 @@ jobs:
- uses: actions/setup-node@v6
with:
node-version: 22
node-version: 24
registry-url: https://registry.npmjs.org
- name: Install dependencies
@ -76,7 +76,7 @@ jobs:
- uses: actions/setup-node@v6
with:
node-version: 22
node-version: 24
registry-url: https://registry.npmjs.org
- name: Install gsd-pi@dev globally
@ -126,7 +126,7 @@ jobs:
- uses: actions/setup-node@v6
with:
node-version: 22
node-version: 24
registry-url: https://registry.npmjs.org
- name: Run live LLM tests (optional)

View file

@ -3,7 +3,7 @@
# Image: ghcr.io/gsd-build/gsd-ci-builder
# Used by: pipeline.yml Dev stage
# ──────────────────────────────────────────────
FROM node:22-bookworm AS builder
FROM node:24-bookworm AS builder
# Rust toolchain (stable, minimal profile)
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain stable --profile minimal
@ -24,7 +24,7 @@ RUN node --version && rustc --version && cargo --version
# Image: ghcr.io/gsd-build/gsd-pi
# Used by: end users via docker run
# ──────────────────────────────────────────────
FROM node:22-slim AS runtime
FROM node:24-slim AS runtime
# Git is required for GSD's git operations
RUN apt-get update && apt-get install -y --no-install-recommends \

52
package-lock.json generated
View file

@ -57,14 +57,14 @@
"gsd-cli": "dist/loader.js"
},
"devDependencies": {
"@types/node": "^22.0.0",
"@types/node": "^24.12.0",
"@types/picomatch": "^4.0.2",
"c8": "^11.0.0",
"jiti": "^2.6.1",
"typescript": "^5.4.0"
},
"engines": {
"node": ">=20.6.0"
"node": ">=22.0.0"
},
"optionalDependencies": {
"@gsd-build/engine-darwin-arm64": ">=2.10.2",
@ -4085,12 +4085,12 @@
"license": "MIT"
},
"node_modules/@types/node": {
"version": "22.19.15",
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.15.tgz",
"integrity": "sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg==",
"version": "24.12.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.12.0.tgz",
"integrity": "sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ==",
"license": "MIT",
"dependencies": {
"undici-types": "~6.21.0"
"undici-types": "~7.16.0"
}
},
"node_modules/@types/picomatch": {
@ -5001,23 +5001,6 @@
}
}
},
"node_modules/electron/node_modules/@types/node": {
"version": "24.12.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.12.0.tgz",
"integrity": "sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"undici-types": "~7.16.0"
}
},
"node_modules/electron/node_modules/undici-types": {
"version": "7.16.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
"integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
"dev": true,
"license": "MIT"
},
"node_modules/emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
@ -8162,9 +8145,9 @@
}
},
"node_modules/undici-types": {
"version": "6.21.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
"integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
"version": "7.16.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
"integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
"license": "MIT"
},
"node_modules/universal-user-agent": {
@ -9181,6 +9164,23 @@
"tailwindcss": "^4.2.1",
"typescript": "^5.9.3"
}
},
"studio/node_modules/@types/node": {
"version": "22.19.15",
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.15.tgz",
"integrity": "sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg==",
"dev": true,
"license": "MIT",
"dependencies": {
"undici-types": "~6.21.0"
}
},
"studio/node_modules/undici-types": {
"version": "6.21.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
"integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
"dev": true,
"license": "MIT"
}
}
}

View file

@ -35,7 +35,7 @@
"configDir": ".gsd"
},
"engines": {
"node": ">=20.6.0"
"node": ">=22.0.0"
},
"packageManager": "npm@10.9.3",
"scripts": {
@ -117,7 +117,7 @@
"zod-to-json-schema": "^3.24.6"
},
"devDependencies": {
"@types/node": "^22.0.0",
"@types/node": "^24.12.0",
"@types/picomatch": "^4.0.2",
"c8": "^11.0.0",
"jiti": "^2.6.1",