Repository navigation
Move CI and release to Node.js 24 and add a Node 20 compatibility check for the bundle #77
Copy link
Copy link
Closed
Labels
enhancementNew feature or requestNew feature or request
Description
Problem / Use case
CI and the release workflow currently run on Node.js 20, which reached end-of-life on 2026-04-30.
This now blocks dependency updates. #73 bumps vitest to 5.x, which requires node: ^22.12.0 || ^24.0.0 || >=26.0.0. CI on that PR is green, but npm ci logs EBADENGINE for vitest@5.0.3 on v20.20.2. It only works by accident and may break with a future 5.x patch.
At the same time, we want to keep "engines": { "node": ">=20.0.0" } so that existing users are not affected. Users run plugin/scripts/bundle.js with whatever node they have (plugin/.mcp.json invokes node directly). Once the test suite moves off Node 20, nothing in CI verifies that the published bundle still runs on the minimum supported version.
Proposed solution
- Move CI and release tooling to Node 24 (Active LTS, supported until 2028-04-30).
.github/workflows/ci.yml:node-version: 20→24.github/workflows/release.yml: bothnode-version: 20entries (bundle regeneration and publish) →24
- Keep
engines.nodeat>=20.0.0. No user-facing change. - Add a compatibility job that runs the built bundle on Node 20 (the
enginesminimum).- Build
plugin/scripts/bundle.json Node 24 (npm ci && npm run bundle), then upload it as an artifact or pass it to the next step. - On Node 20, run the bundle without installing dev dependencies (vitest does not support Node 20), and do a stdio MCP smoke test:
- send
initializeand check thatserverInfo.nameisdeploygate - send
notifications/initialized, thentools/list, and check that the tool list is non-empty - fail on a non-zero exit, a timeout, or a missing response
- send
- A small dependency-free Node script (for example
scripts/smoke-bundle.mjs) is enough. It can also be run locally against any Node version.
- Build
- Merge order: land this change first, let Dependabot rebase Bump the dev-dependencies group across 1 directory with 5 updates #73, confirm that the
EBADENGINEwarning is gone, then merge Bump the dev-dependencies group across 1 directory with 5 updates #73.
Alternatives considered
- Node 22: maintenance LTS, but its end-of-life is 2027-04-30, so we would need another bump within about 7 months.
- Node 26: longest support (until 2029-04-30), but it only becomes LTS on 2026-10-28. CI can move to 26 later as a follow-up.
- Holding vitest at 4.x: avoids the CI change for now, but keeps CI on an EOL runtime and blocks future test-tooling updates.
- Raising
engines.nodeto>=22: matches what the test suite can run on, but it is a user-facing breaking change. Deferred to a separately planned release.
Additional context
- Node.js release schedule: https://github.com/nodejs/Release/blob/main/schedule.json
- In local verification of Bump the dev-dependencies group across 1 directory with 5 updates #73,
tsc, all 234 tests and the bundle build pass, and the bundle'stools/listoutput (58 tools) is identical to that ofmain.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request
Activity