Skip to content

build: upgrade node from 24.21.0 to 26.10.0 - #3588

Merged
Pooya Raki (PooyaRaki) merged 1 commit into
mainfrom
claude/wizardly-meitner-fofnos
Oct 15, 2026
Merged

Pooya Raki (PooyaRaki) merged 1 commit into
mainfrom
claude/wizardly-meitner-fofnos

Conversation

@PooyaRaki

Copy link
Copy Markdown
Contributor

Summary

Upgrade the runtime from Node 24.21.0 to 26.10.0 everywhere at once. Node 26 enters Active LTS later this month.

This replaces Dependabot's #3576. That PR changed only the Dockerfile, while CI kept linting and testing on Node 24 (the _ci-node.yml default and .nvmrc). Its green run therefore said nothing about Node 26, and the first time the code would have run on 26 was the devstaging image. Here the version CI tests against is the version the image ships.

Risk: this is a runtime major. CI now runs the full unit and integration suites on 26.10.0, but the image itself is only built after merge (devstaging.yml). It's worth letting it run in devstaging for a while before cutting a release.

Changes

  • Dockerfile: node:26.10.0-alpine3.24 for both the build and production stages
  • .github/workflows/_ci-node.yml: node_version default 26.10.0; drop the stale # Krypton (Node 24) comments
  • .nvmrc: 26.10.0
  • package.json: engines.node >=26.10.0
  • .devcontainer/Dockerfile: typescript-node:26-bookworm, pinned by digest (ships Node 26.10.0)
  • README.md: requirements line

Locally on Node 26.10.0: yarn install --immutable, format, lint, typecheck and build are clean, and yarn test passes 384 files, 6962 tests, 18 skipped. Integration tests run in CI.

🤖 Generated with Claude Code

https://claude.ai/code/session_012HJcjmPgnddvbTCwe5kvW3


Generated by Claude Code

Move the production image, CI, .nvmrc, engines, the dev container and the
README to Node 26 together, so the version CI tests against is the version
the image ships.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_012HJcjmPgnddvbTCwe5kvW3
@PooyaRaki
Pooya Raki (PooyaRaki) merged commit 0e4bf79 into main Oct 15, 2026
12 checks passed
@PooyaRaki
Pooya Raki (PooyaRaki) deleted the claude/wizardly-meitner-fofnos branch October 15, 2026 12:12
Pooya Raki (PooyaRaki) added a commit that referenced this pull request Oct 15, 2026
The node:26 images no longer bundle Yarn and Node 25+ no longer ships Corepack, so `yarn install` failed with exit code 127 in the devstaging build after the Node 26 upgrade (#3588). CI was unaffected because GitHub runners have Yarn installed globally.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Pooya Raki (PooyaRaki) added a commit that referenced this pull request Oct 15, 2026
The Docker image build has been failing on `main` since the Node 26 upgrade (#3588): `RUN yarn install` exits with `/bin/sh: yarn: not found` (exit code 127) — [failed run](https://github.com/safe-global/safe-client-gateway/actions/runs/38732856014/job/116417969071). The official `node` images stopped bundling Yarn v1 from Node 26 ([nodejs/docker-node#2474](nodejs/docker-node#2474)), and Node itself stopped shipping Corepack from v25, so the build stage has no way to start Yarn. CI didn't catch it because the GitHub runners have Yarn installed globally; only the Docker build runs inside the bare image.

This installs Corepack in the build stage and enables it. Corepack resolves `[email protected]` from `packageManager`, which then defers to the vendored release via `yarnPath`. The Corepack version is pinned as a devDependency (0.36.0, past the 7-day `npmMinimalAgeGate`) and the Dockerfile reads it from `package.json`, so the existing npm Dependabot ecosystem bumps it — Dependabot's docker ecosystem only updates `FROM` tags, not version values in `ARG`/`ENV`. The production stage runs `node` directly and is unchanged.

---------

Co-authored-by: Claude Opus 5.5 <[email protected]>
Pooya Raki (PooyaRaki) added a commit that referenced this pull request Oct 21, 2026
Upgrade the runtime from Node 26.10.0 to 26.12.1, the latest Node release (published 2026-10-21), on `alpine3.24`, the newest Alpine variant of the official image.

As in #3588, every place that pins the version moves together, so the version CI lints and tests against is the version the image ships. This supersedes Dependabot's #3634 (26.11.1), which only touched the `Dockerfile`.

The dev container's digest moves from image release 5.2.2 to 5.2.3, the latest stable `typescript-node:26-bookworm`. Both ship Node 26.10.0: Microsoft hasn't published a 26.12.1 build yet, so the dev container stays one patch behind production until it does. Yarn 4 doesn't enforce `engines`, so the dev container keeps working on 26.10.0.

---------

Co-authored-by: Claude Opus 5.5 <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants