Node.js versions
Avoid needing to update your CI config files for every Node.js release or EOL event.
This action retrieves a list of Node.js release versions and exports the versions for consumption by automated processes.
The output of the yaml function is designed to populate a GitHub Actions matrix declaration so that your CI is testing with the version(s) of Node.js you choose, typically the LTS version(s).
Usage
This action has the following outputs:
active
are Active LTS versionsmaintenance
are Maintenance LTS versionslts
is all LTS versions (active + maintenance)current
is the Current node versionmin
is the lowest LTS version
active
The currently active Node.js version. This is like a baton that is handed from one version of Node.js to the next.
maintenance
Every version of Node.js that is actively maintained by the Node.js project.
lts
Similar to maintenance, except it excludes odd number releases that are never considered Long Term Stable. This is the target most modules should use in their CI tests.
current
The current
version would usually be used in your CI tests to always tests your code against the latest Node.js version, but perhaps without failing the CI tests.
min
The min
version is the lowest supported version of Node.js. It couple be used for modules with scarce updates, whose SLA is a best effort to support any version of Node.js.
manually (the normal way)
test:
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
node-version: [20, 22]
fail-fast: false
steps:
automatically
test:
needs: get-lts
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
node-version: ${{ fromJson(needs.get-lts.outputs.lts) }}
fail-fast: false
steps:
get-lts:
runs-on: ubuntu-latest
steps:
- id: get
uses: msimerson/node-lts-versions@v1
outputs:
active: ${{ steps.get.outputs.active }}
maintenance: ${{ steps.get.outputs.maintenance }}
lts: ${{ steps.get.outputs.lts }}
current: ${{ steps.get.outputs.current }}
min: ${{ steps.get.outputs.min }}
Example
✗ node main.js
::set-output name=active::["22"]
::set-output name=maintenance::["18","20"]
::set-output name=lts::["18","20","22"]
::set-output name=current::["23"]
::set-output name=min::"18"
RAW
const ltsv = require('node-lts-versions')
ltsv.fetchLTS().then(() => {
console.log(ltsv.json())
console.log(ltsv.yaml())
ltsv.print()
})
Methods
fetchLTS
Retrieves Node.js version information.
json
Display Node.js version information in JSON format.
> ltsv.json('active')
'["22"]'
> ltsv.json('lts')
'["18","20","22"]'
> ltsv.json()
'["23"]'
yaml
Display Node.js version information in YAML format.
> ltsv.yaml('lts')
[ '18', '20', '22' ]
> ltsv.yaml('active')
[ '22' ]
> ltsv.yaml('maintenance')
[ '18', '20' ]
> ltsv.yaml('current')
[ '23' ]
Display Node.js version information in tabular format.
Ver Codename Latest Release LTS Period
18 Hydrogen v18.20.8 on 2025-03-27 2022-10-17 to 2025-04-30
20 Iron v20.19.1 on 2025-04-22 2023-10-16 to 2026-04-30
22 Jod v22.15.0 on 2025-04-22 2024-10-23 to 2027-04-30
Reference
- GitHub Actions: New workflow features
- Using tags for Release management
Future
Got ideas? Contributions are welcome. Submit a PR with tests and it will likely be accepted.