Skip to content

Remove support for Node 18 which is now EOL #1310

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ on:
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
runs-on: ubuntu-24.04
permissions:
actions: read
contents: read
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/dependency-review.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ permissions:

jobs:
dependency-review:
runs-on: ubuntu-latest
runs-on: ubuntu-24.04
steps:
- name: 'Checkout Repository'
uses: actions/checkout@v4
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/test-real-github-actions-cache-service.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ jobs:
strategy:
matrix:
include:
- node: 20 # LTS
os: ubuntu-22.04
- node: 22 # Active LTS
os: ubuntu-24.04

runs-on: ${{ matrix.os }}

Expand Down
40 changes: 20 additions & 20 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,33 +5,33 @@ on: [push, pull_request]
jobs:
tests:
strategy:
# We support Node Current, LTS, and Maintenance. See
# https://github.com/nodejs/release#release-schedule for release schedule
# We support Node Active LTS, Maintenance LTS, and Current. See
# https://github.com/nodejs/release#release-schedule for release schedule.
#
# We test all supported Node versions on Linux, and the oldest and newest
# on macOS/Windows. See
# on macOS/Windows. We use the latest images for each OS. See
# https://github.com/actions/runner-images?tab=readme-ov-file#available-images
# for the latest available images.
matrix:
include:
# Maintenance
- node: 18
os: ubuntu-22.04
- node: 18
os: macos-13
- node: 18
os: windows-2022

# LTS
# Maintenance LTS (EOL 2026-04-30)
- node: 20
os: ubuntu-24.04
- node: 20
os: macos-15
- node: 20
os: ubuntu-22.04
os: windows-2022

# Current
- node: 22
os: ubuntu-22.04
- node: 22
os: macos-13
# Active LTS (EOL 2027-04-30)
- node: 22
os: ubuntu-24.04

# Current (EOL 2025-06-01)
- node: 23
os: ubuntu-24.04
- node: 23
os: macos-15
- node: 23
os: windows-2022

# Allow all matrix configurations to complete, instead of cancelling as
Expand Down Expand Up @@ -72,12 +72,12 @@ jobs:

lint-and-format:
timeout-minutes: 5
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
node-version: 22
cache: npm

- run: npm ci
Expand Down
13 changes: 12 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,17 @@ Versioning](https://semver.org/spec/v2.0.0.html).

## Unreleased

### Changed

- **[BREAKING]** Node 18 is no longer supported because it has reached
end-of-life. Node 20 is now the oldest supported version. See
https://github.com/nodejs/Release#release-schedule.

Note we will no longer issue breaking semver increments for changes to
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure how I feel about that. Why?

Copy link
Member Author

@aomarks aomarks Apr 30, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure how I feel about that. Why?

Benefits of incrementing:

  • Users on unsupported versions of Node can continue using Wireit without interruption (which would be updating their Node or pinning their Wireit version).

Costs of incrementing:

  • Users are less likely to receive our bug fixes and security patches, because updating to a new major version is usually a manual action that users are slow to perform.

I also offer this principle (which I hold lightly):

If you are maintaining a Node project, you have the baseline responsibility to use a supported version of Node, just as you have a responsibility to use a supported version of your operating system. It should not be surprising that if you are using an unsupported version of Node, the dependencies you download from NPM might not work properly. If you're running an unsupported Node, you have the bigger problem of not getting security updates anymore, and it should not the responsibility of NPM package maintainers to help you defer doing that important update.


Thinking about alternative strategies...

Things we could do when a Node version becomes unsupported:

  1. Update the documented Node versions we support in the README.
  2. Increment the engines field in the package.json. (This warns, but doesn't block, users who are installing on older Node versions.)
  3. Stop testing the unsupported version in CI.
  4. Start using Node features not available in the unsupported version (this is of course what actually breaks users).
  5. Major increment our version.

Some strategies we could adopt:

A. 1-3 (this PR), 4 whenever we want
B. 1-5
C. 1+2, wait for a grace period (e.g. 3 months), then 3+4
D. Don't actually do anything (other than maybe 1) unless there is actually a new Node feature we want to start using, and in that case do 1-5.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good writeup of the options.

IMO, D makes a lot of sense to me.

supported Node versions.

### Fixed

- HTTP errors from the GitHub Actions cache service are no longer ever fatal,
and should always continue gracefully with GitHub Actions caching temporarily
disabled (previously only network errors and HTTP 429/503 errors failed
Expand Down Expand Up @@ -136,7 +147,7 @@ Versioning](https://semver.org/spec/v2.0.0.html).

### Changed

- **[BREAKING]** Node 14 and Node 16 are no longer supported. Node 14 is past its end of life and Node 16 will be shortly. See the Node Release Schedule here:https://github.com/nodejs/Release#release-schedule. Node 18 will be supported until April 2025.
- **[BREAKING]** Node 14 and Node 16 are no longer supported. Node 14 is past its end of life and Node 16 will be shortly. See the Node Release Schedule here: https://github.com/nodejs/Release#release-schedule. Node 18 will be supported until April 2025.

## [0.12.0] - 2023-09-01

Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -383,12 +383,12 @@ name: Tests
on: [push, pull_request]
jobs:
tests:
runs-on: ubuntu-latest
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18
node-version: 22
cache: npm

# Set up GitHub Actions caching for Wireit.
Expand Down Expand Up @@ -948,8 +948,8 @@ input also affects the fingerprint:

Wireit is supported on Linux, macOS, and Windows.

Wireit is supported on Node Current (22), Active LTS (20), and Maintenance LTS
(18). See [Node releases](https://nodejs.org/en/about/releases/) for the
Wireit is supported on Node Current (23), Active LTS (22), and Maintenance LTS
(20). See [Node releases](https://nodejs.org/en/about/releases/) for the
schedule.

Wireit scripts can be launched via `npm`, `node --run`, `pnpm`, and `yarn`.
Expand Down
Loading