Skip to content

Move CI and release to Node.js 24 and add a Node 20 compatibility check for the bundle #77

Description

@satsukies

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

  1. 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: both node-version: 20 entries (bundle regeneration and publish) → 24
  2. Keep engines.node at >=20.0.0. No user-facing change.
  3. Add a compatibility job that runs the built bundle on Node 20 (the engines minimum).
    • Build plugin/scripts/bundle.js on 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 initialize and check that serverInfo.name is deploygate
      • send notifications/initialized, then tools/list, and check that the tool list is non-empty
      • fail on a non-zero exit, a timeout, or a missing response
    • A small dependency-free Node script (for example scripts/smoke-bundle.mjs) is enough. It can also be run locally against any Node version.
  4. Merge order: land this change first, let Dependabot rebase Bump the dev-dependencies group across 1 directory with 5 updates #73, confirm that the EBADENGINE warning 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.node to >=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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions