fix(docker): move published image to Node 24 LTS, not the EOL Node 25 - #73
Conversation
Dependabot PR #72 proposed node:22-alpine -> node:25-alpine. Node 25 is a Current (odd-numbered) release that reached END OF LIFE on 2026-06-01, per nodejs/Release schedule.json — so that bump would have pinned the published container to a runtime receiving no further security patches, five days short of three months after EOL. CI was green because the workflows test the packed npm artifact on Node 18/20/22/24 and never build the Dockerfile. Bump to node:24-alpine instead (Krypton, Active LTS, maintenance 2026-10-20, end 2028-04-30) and tell Dependabot to stop proposing Node majors so the next one is a deliberate move to v26 when it becomes Active LTS on 2026-10-28. Digest-level minor/patch refreshes on the pinned major still come through. Verified locally on 2026-08-22: docker build ... -> success docker run --entrypoint node -> v24.19.0 MCP stdio initialize -> serverInfo {"name":"oilpriceapi","version":"3.2.3"} Closes #72 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JKAExynd9zoKwt6rYA66EA
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
The two red checks are pre-existing on Reproduced on unmodified Byte-identical to the CI failure. Structurally it could not have been this PR anyway: Root cause — api#6641, reaching its third and fourth consumerThe live endpoint declares Every exact-match consumer breaks on it. Known casualties now:
api#6641 (typed product facts v2) is the fix; it is CLEAN with 15/15 checks green and awaiting the Friday ≥21:00 UTC elevated window. These checks go green when v2 deploys, not before — merging #6641 alone is not enough, since What this PR was verified againstThe Node 24 change itself was proven locally, independently of the above: The container builds and completes a real MCP stdio handshake on Node 24. Recommendation: do not merge this on a green board — the board cannot go green until api#6641 deploys. Merge on the evidence above, or hold it behind #6641. |
Replaces #72.
The finding
Dependabot #72 proposed
node:22-alpine→node:25-alpineand CI went green.Node 25 reached end of life on 2026-06-01 — 82 days before that PR was opened.
Verified against the authoritative source
(nodejs/Release
schedule.json),read live on 2026-08-22:
Merging #72 would have pinned the published container to a runtime that
receives no further security patches.
Why CI did not catch it
live-tests.ymlandpublish.ymlexercise the packed npm artifact on Node18/20/22/24. Nothing in CI builds the
Dockerfile, so the base-image major isunverified by construction — the seven green checks on #72 were all true and
none of them was about the thing being changed.
The container is a real distribution surface:
server.jsonregisters the npmstdio package, but registry scanners (Glama, etc.) build this
Dockerfilefromthe repo.
Changes
Dockerfile— both stagesnode:22-alpine→node:24-alpine, pinned bydigest
sha256:d32cdf61…(resolved from the Docker Hub registry API; OCIimage index, amd64/arm64/s390x).
.github/dependabot.yml— ignoreversion-update:semver-majorfornodein the docker ecosystem, with the EOL history in the comment. Digestand minor/patch refreshes on the pinned major still flow. Bump to v26
deliberately when it becomes Active LTS on 2026-10-28.
Verification (local, 2026-08-22)
The image builds, the runtime is the LTS line, and the server completes a real
MCP stdio handshake — not just "the build did not error".
Closes #72
🤖 Generated with Claude Code
https://claude.ai/code/session_01JKAExynd9zoKwt6rYA66EA