Skip to content

Commit ec37a18

Browse files
authored
Merge pull request #516 from Hack23/copilot/update-node-to-25
Address PR review thread feedback for Node 25 upgrade docs and dev environment metadata
2 parents c60a619 + 79945a1 commit ec37a18

15 files changed

+574
-56
lines changed

.devcontainer/devcontainer.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
{
2-
"name": "CIA Compliance Manager Dev Container",
3-
"image": "mcr.microsoft.com/devcontainers/javascript-node:24-trixie",
2+
"name": "React Three.js Game Template Dev Container",
3+
"image": "mcr.microsoft.com/devcontainers/javascript-node:25-trixie",
44
"features": {
55
"ghcr.io/devcontainers/features/github-cli:1": {},
66
"ghcr.io/devcontainers/features/node:1": {
77
"nodeGypDependencies": true,
8-
"version": "24"
8+
"version": "25"
99
}
1010
},
11-
// MCP Servers: See .github/mcp-config.json for Model Context Protocol configuration
11+
// MCP Servers: See .github/copilot-mcp.json for Model Context Protocol configuration
1212
// These enhance GitHub Copilot with filesystem, git, github, and search capabilities
1313
// Update system dependencies
1414
"onCreateCommand": "sudo apt-get update && sudo apt-get install -y graphviz libgtk2.0-0 libgtk-3-0 libgbm-dev libnotify-dev libnss3 libxss1 libasound2 libxtst6 xauth xvfb dbus dbus-x11",

.github/workflows/codeql.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ jobs:
5151
- name: Setup Node.js
5252
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
5353
with:
54-
node-version: "24"
54+
node-version: "25"
5555
cache: "npm"
5656

5757
- name: Cache dependencies

.github/workflows/copilot-setup-steps.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ jobs:
4646
- name: Setup Node.js
4747
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
4848
with:
49-
node-version: "24"
49+
node-version: "25"
5050
cache: "npm"
5151

5252
- name: Install dependencies

.github/workflows/copilot-setup.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ jobs:
3434
- name: Setup Node.js
3535
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
3636
with:
37-
node-version: '24'
37+
node-version: '25'
3838
cache: 'npm'
3939

4040
- name: Cache dependencies
@@ -214,7 +214,7 @@ jobs:
214214
- [ ] Brave Search Server - Requires API key
215215
216216
### System Dependencies
217-
- [x] Node.js 24
217+
- [x] Node.js 25
218218
- [x] Build tools
219219
- [x] Display server (Xvfb)
220220
- [x] Cypress dependencies

.github/workflows/release.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ jobs:
6060
- name: Setup Node.js
6161
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
6262
with:
63-
node-version: "24"
63+
node-version: "25"
6464
cache: "npm"
6565

6666
- name: Cache Cypress binary
@@ -132,7 +132,7 @@ jobs:
132132
- name: Setup Node.js
133133
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
134134
with:
135-
node-version: "24"
135+
node-version: "25"
136136
cache: "npm"
137137

138138
- name: Install dependencies

.github/workflows/test-and-report.yml

Lines changed: 4 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ jobs:
2424
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
2525
- uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
2626
with:
27-
node-version: "24"
27+
node-version: "25"
2828
cache: "npm"
2929

3030
- name: Cache apt packages
@@ -42,14 +42,6 @@ jobs:
4242
sudo mkdir -p /var/run/dbus
4343
sudo dbus-daemon --system --fork
4444
45-
- name: Cache dependencies
46-
uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3
47-
with:
48-
path: ~/.npm
49-
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
50-
restore-keys: |
51-
${{ runner.os }}-node-
52-
5345
- name: Install dependencies
5446
run: npm install
5547

@@ -82,17 +74,9 @@ jobs:
8274
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
8375
- uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
8476
with:
85-
node-version: "24"
77+
node-version: "25"
8678
cache: "npm"
8779

88-
- name: Cache dependencies
89-
uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3
90-
with:
91-
path: ~/.npm
92-
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
93-
restore-keys: |
94-
${{ runner.os }}-node-
95-
9680
- name: Install dependencies
9781
run: npm ci
9882

@@ -163,17 +147,9 @@ jobs:
163147
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
164148
- uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
165149
with:
166-
node-version: "24"
150+
node-version: "25"
167151
cache: "npm"
168152

169-
- name: Cache dependencies
170-
uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3
171-
with:
172-
path: ~/.npm
173-
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
174-
restore-keys: |
175-
${{ runner.os }}-node-
176-
177153
- name: Install dependencies
178154
run: npm install
179155

@@ -208,7 +184,7 @@ jobs:
208184
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
209185
- uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
210186
with:
211-
node-version: "24"
187+
node-version: "25"
212188
cache: "npm"
213189

214190
- name: Cache Cypress binary

cypress/tsconfig.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"compilerOptions": {
3-
"target": "ES2020",
4-
"lib": ["ES2020", "DOM", "DOM.Iterable"],
3+
"target": "ES2024",
4+
"lib": ["ES2024", "DOM", "DOM.Iterable"],
55
"module": "ESNext",
66
"moduleResolution": "Node",
77
"composite": true,

docs/End-of-Life-Strategy.md

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
# Node.js End-of-Life Strategy
2+
3+
## Overview
4+
5+
This document defines the strategy for managing Node.js runtime versions in the **game** project, ensuring we stay on actively maintained releases and plan upgrades proactively. All version decisions align with the [Hack23 ISMS Secure Development Policy](https://github.com/Hack23/ISMS-PUBLIC).
6+
7+
---
8+
9+
## Current Status (March 2026)
10+
11+
| Node.js | Release Date | Status | Bug Fixes Until | Security Fixes Until |
12+
|---------|-------------|--------|-----------------|----------------------|
13+
| **25 (Current)** | Oct 15, 2025 |**Active — in use** | Apr 1, 2026 | Jun 1, 2026 |
14+
| 24 (LTS – Krypton) | May 2025 | Active LTS | Oct 2026 | Apr 28, 2028 |
15+
| 22 (LTS – Jod) | Apr 2024 | Maintenance | Oct 2025 | Apr 30, 2027 |
16+
| 20 (LTS – Iron) | Apr 2023 | Maintenance | Oct 2024 | Apr 30, 2026 |
17+
18+
> **Note:** Node.js 25 is an odd-numbered "Current" release, meaning it does **not** receive LTS status. It is supported for approximately 6 months before reaching end-of-life. We use it to validate readiness for Node.js 26.
19+
20+
---
21+
22+
## Node.js Release Cadence
23+
24+
The OpenJS Foundation follows a predictable release schedule:
25+
26+
- **Every April** — A new **even-numbered** major version is published as "Current"; odd-numbered Current versions reach EOL
27+
- **Every October** — The April even-numbered release graduates to "Active LTS", and a new odd-numbered major is published as "Current"
28+
- **Active LTS** lasts 12 months; **Maintenance LTS** lasts an additional 18 months
29+
30+
```
31+
Version | Release | Current | Active LTS | Maintenance LTS | EOL
32+
---------|-----------|----------|---------------|-----------------|----------
33+
Node 20 | Apr 2023 | ~6 mo | Oct 2023 | Oct 2024 | Apr 2026
34+
Node 22 | Apr 2024 | ~6 mo | Oct 2024 | Oct 2025 | Apr 2027
35+
Node 24 | May 2025 | ~6 mo | Oct 2025 | Oct 2026 | Apr 2028
36+
Node 25 | Oct 2025 | ~6 mo | N/A (odd) | N/A | Jun 2026
37+
Node 26 | Apr 2026 | ~6 mo | Oct 2026 | Oct 2027 | Apr 2029
38+
Node 27 | Oct 2026 | ~6 mo | N/A (odd) | N/A | Jun 2027
39+
Node 28 | Apr 2027 | ~6 mo | Oct 2027 | Oct 2028 | Apr 2030
40+
```
41+
42+
---
43+
44+
## Version Upgrade Policy
45+
46+
### Principles
47+
48+
1. **Never run end-of-life Node.js in CI/CD or production** — upgrade within 30 days of EOL.
49+
2. **Track even-numbered LTS releases for stability** — use Current (odd) releases for forward compatibility testing.
50+
3. **Upgrade CI/CD and dev containers together** — single PR, all-or-nothing.
51+
4. **Test on the next version before it is released** — reduce upgrade friction.
52+
53+
### Upgrade Triggers
54+
55+
| Trigger | Action | Timeline |
56+
|---------|--------|----------|
57+
| New major version release | Update `test-and-report-latest-node.yml` to new version | Within 1 week of release |
58+
| Current version reaches EOL | Upgrade all workflows to next version | Before EOL date |
59+
| LTS version graduates | Evaluate adoption for main workflow | Within 2 weeks |
60+
| Security advisory | Apply patch or upgrade immediately | Within 24 hours |
61+
62+
---
63+
64+
## Upcoming Milestones
65+
66+
### ⚠️ Immediate — Node.js 25 End of Bug Fixes: April 1, 2026
67+
68+
Node.js 25 receives its final bug-fix release around **April 1, 2026**. Security-only patches continue until **June 1, 2026**.
69+
70+
Action required: Upgrade all CI/CD workflows to Node.js 26 immediately after its release in April 2026. See [FUTURE_WORKFLOWS.md](./FUTURE_WORKFLOWS.md) for the detailed upgrade plan.
71+
72+
### 🔜 Upcoming — Node.js 26 Release: April 2026
73+
74+
Node.js 26 is expected in **April 2026**. It will:
75+
76+
- Enter "Current" status immediately upon release
77+
- Graduate to **Active LTS in October 2026**
78+
- Be maintained (Active + Maintenance) until **April 2029**
79+
80+
**Planned upgrade:** Within **2 weeks** of the Node.js 26 release. See [FUTURE_WORKFLOWS.md](./FUTURE_WORKFLOWS.md).
81+
82+
### 📅 Future — Node.js 26 Active LTS: October 2026
83+
84+
When Node.js 26 enters Active LTS, it becomes the recommended production runtime. At this point:
85+
86+
- Node.js 24 transitions from Active LTS to Maintenance LTS
87+
- The primary workflow (`test-and-report.yml`) should target Node.js 26
88+
89+
### 📅 Future — Node.js 24 EOL: April 2028
90+
91+
Node.js 24 reaches end-of-life in April 2028. By this date, all workflows and devcontainers must have moved to Node.js 26 or later.
92+
93+
---
94+
95+
## Version Matrix
96+
97+
The project maintains two parallel test workflows:
98+
99+
| Workflow | Purpose | Current Node Version |
100+
|----------|---------|----------------------|
101+
| `test-and-report.yml` | Primary CI — stable, production-ready | **25** |
102+
| `test-and-report-latest-node.yml` | Forward-compat — tests next version | **25** (will become 26) |
103+
104+
When a new Node.js version is released:
105+
1. Update `test-and-report-latest-node.yml` to the new version first
106+
2. Once validated (typically within the same sprint), update `test-and-report.yml`
107+
3. Update all other workflows (`release.yml`, `codeql.yml`, copilot setup) together
108+
109+
---
110+
111+
## Risk Assessment
112+
113+
| Risk | Likelihood | Impact | Mitigation |
114+
|------|-----------|--------|------------|
115+
| Security vulnerability in EOL Node.js | High (after EOL) | Critical | Upgrade before EOL |
116+
| Incompatible npm packages | Medium | High | Run tests on new version early |
117+
| Breaking API changes | Low | High | Test on Current release before it becomes primary |
118+
| CI/CD downtime during upgrade | Low | Medium | Upgrade in dedicated PR with rollback plan |
119+
120+
---
121+
122+
## References
123+
124+
- [Node.js Release Schedule](https://nodejs.org/en/about/previous-releases)
125+
- [Node.js End-of-Life Dates — endoflife.date](https://endoflife.date/nodejs)
126+
- [Hack23 ISMS Secure Development Policy](https://github.com/Hack23/ISMS-PUBLIC)
127+
- [WORKFLOWS.md](./WORKFLOWS.md) — Current CI/CD workflow documentation
128+
- [FUTURE_WORKFLOWS.md](./FUTURE_WORKFLOWS.md) — Planned Node.js 26 upgrade

0 commit comments

Comments
 (0)