Repository navigation
ci: build and tag the Current and all supported LTS releases - #336
Merged
Merged
Conversation
Replace check-missing-versions.sh with get-build-targets.sh, which resolves the latest Current and Active LTS releases (ordered by version, not release date) and the tags each should be published under: exact version, major, LTS codename, lts, current, and latest. The publish workflow now builds a matrix over those targets instead of a single version, so LTS builds no longer steal the current/latest tags, and older patch builds no longer move the major tag. Staging tags, ccache keys, and buildx cache scopes include the version/major so parallel targets don't collide. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Let a target's merge job run even if another target's build failed, so one broken release line doesn't block publishing the other. Name the matrix jobs by version and platform, and note in the README that the major and codename tags stop updating once a line leaves Active LTS. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Build the latest release of every LTS line that hasn't reached end-of-life, using the end dates from the nodejs/Release schedule, so the major and codename tags of Maintenance LTS lines (e.g. 22, jod) keep receiving updates until end-of-life. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Bats suite only ran locally. Run it on PRs that touch the script or tests, and weekly so the live integration test catches upstream changes to the Node.js release index or schedule. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Builds and publishes the latest Node.js Current release and the latest release of every supported LTS line (Active and Maintenance) instead of a single version, and tags them by release line.
Tag rules
get-build-targets.sh(replacescheck-missing-versions.sh) reads the Node.js release index, ordered by version, not release date, and the release schedule for end-of-life dates, and emits a JSON build matrix of{version, major, tags}:<version><major><codename>(e.g.krypton)ltscurrentlatestToday:
26.10.0→26,current,latest;24.21.0→24,krypton,lts;22.23.3→22,jod.20.xhas reached end-of-life and is not built;22drops out automatically after 2027-04-30.Gap behaviour: after a major enters LTS and before the next major ships, there is no Current release.
latestfollows the new LTS release andcurrentstays on the last Current release.Ordering by version matters: by date,
22.23.3(Sep 23) is newer than26.10.0(Sep 21).Workflow changes
update-current-image.yml:buildandmergeare matrices over the targets. Staging tags include the version, and each target's merge runs independently, so one broken line doesn't block the other. LTS builds no longer overwritecurrent/latest, and manual rebuilds of older patches no longer move the major tag.dockerimage.yml: PR builds test every target (Current and each supported LTS line).tests.yml(new): runs the Bats suite on PRs that touch the script or tests, and weekly so the live integration test catches upstream changes to the release index or schedule. Previously the tests only ran locally.Testing
test/get-build-targets.bats: 20 tests, mostly offline against fixture indexes and a fixture schedule intest/fixtures/(Current, Active and Maintenance LTS, end-of-life cutoff, no-Current gap, SKIP_VERSIONS fallback,-nmanual versions)Not testable in this PR: the publish path (merge matrix and tag loop) only runs after merge. The first scheduled run will publish
24.21.0and22.23.3if they're not on Docker Hub yet, moving24/22and addingkrypton,jod, andlts. Consider triggeringworkflow_dispatchafter merge and watching it.🤖 Generated with Claude Code