Repository navigation
build: bump node runtime to 22.23.4 - #290
Closed
ralph-bitgo[bot] wants to merge 1 commit into
Closed
ralph-bitgo[bot] wants to merge 1 commit into
ralph-bitgo[bot] wants to merge 1 commit into
Conversation
What: pin node:22.23.4-alpine (verified index digest) as the base for both stages of Dockerfile and integration-tests.Dockerfile, set ENV NODE_VERSION and .nvmrc to 22.23.4, align the CI Node pins and the README prerequisite. Retires node:22.14.0-alpine and the stale OpenSSL/CVE-2024-6119 base-image comments. Why: node 22.14.0 predates the October 2026 Node.js security releases; 22.23.4 is the supported floor for the 22.x line (WCN-3304). Dev and CI now run the same runtime floor the images are built on, so validation exercises the shipped runtime. Ticket: WCN-3304 Session-Id: f30beebb-8c56-4feb-8b32-7995c516d145 Task-Id: 3c4e09f9-1938-4077-8c5b-e31220c97008
Contributor
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.
What
Dockerfileand both stages ofintegration-tests.Dockerfiletonode:22.23.4-alpine@sha256:ce8d97f7cfc7c5386421eb932df20a29df99b1a7f469f6157d5c9956702ffadc, replacingnode:22.14.0-alpine@sha256:9bef0ef1e268f60627da9ba7d7605e8831d5b56ad07487d24d1aa386336d1944. The supply-chain pinning pattern and the "To update:" comment are kept; only the version and resolved digest changed.ENV NODE_VERSION=22.23.4in the builder stage and.nvmrcto22.23.4(was22.1.0), and refresh the base-image comments — the OpenSSL/CVE-2024-6119 note described the old base and no longer applies.build-and-test.yamldefault input, twosetup-nodepins inpull_request.yaml) and the README prerequisite to22.23.4so dev and CI run the same runtime floor the images ship.package.jsonengines: >=22.12.0is intentionally unchanged: it is an install-compatibility floor satisfied by 22.23.4, not a runtime selector.Why
Digest attestation
Docker-Content-Digestheader equals sha256 of the manifest body):node:22.23.4-alpineindex digestsha256:ce8d97f7cfc7c5386421eb932df20a29df99b1a7f469f6157d5c9956702ffadc; linux/amd64 manifest digestsha256:b7ef7583bfe52302a002cc282f93fe15b8116688a7304bdc7b459b7cfcf29865. OCI annotations on the amd64 manifest show the image was built 2026-10-21 fromnodejs/docker-node22/alpine3.24.sha256:9bef0ef1e268f60627da9ba7d7605e8831d5b56ad07487d24d1aa386336d1944is exactly the index digest that the Dockerfile's documenteddocker pull --platform linux/amd64+docker inspectprocedure produced fornode:22.14.0-alpine— the same digest semantics are preserved. The pin stays at index level, so multi-arch builds (including the documented s390x IBM HPVS build path) keep resolving their platform variant.docker pull/docker build(the egress proxy returnsForbiddenfor Docker Hub blob-CDN downloads), so thedocker inspectcross-check was not executed here. The digest above is registry-sourced, and this PR's CI image builds resolve it against Docker Hub — a mismatch would failbuild-docker-imageandintegration-test.Test plan (executed on Node 22.23.x)
npm ci(native addons such as keccak compile from source) +npm run build— pass on Node v22.23.3npm test— 460 passingnpm run test:integration— 29 passing (recovery, sendMany, key-provider flows)build/testonsetup-node22.23.4,integration-testviadocker compose -f docker-compose.integ.yml up --build(integration-tests.Dockerfile on the new base), andbuild-docker-image(production Dockerfile on the new base)Deployment usage (WCN-3707 step 1)
.github/workflows/release-to-ghcr.yamlbuilds this exactDockerfileand publishesghcr.io/bitgo/advanced-wallets:<version>|lateston release;pull_request.yamlcarriespackages: read # required for ArgoCD deploy, i.e. the published image is deployed via ArgoCD. There are no in-repo helm/k8s manifests.node --version, deployed image digest vs. the pinned one, rollback criteria) is intentionally left to the rollout child (WCN-3713), which must record observed runtime evidence — a green build does not attest the runtime.CI results (observed on this branch)
Build & Test (CI) / Build,Test,Lint,Commit Lint,License - Fossa Scan,Integration Test(docker-compose build ofintegration-tests.Dockerfileon the new base +npm run test:integrationinside it) andBuild the Docker Image(productionDockerfileon the new base) all passed.Audit API Specalso passed.Security - Trivy Scanfailed on pre-existing dependency state, not on this diff:package-lock.jsonis byte-identical tomaster(this diff touches only version-pin and doc files). Findings:follow-redirects@1.16.0CVE-2026-111755 and CVE-2026-111756 (HIGH, fixed in 1.16.1), a transitive dep via@bitgo-beta/sdk-coin-algo -> stellar-sdk -> axios. The job only runs whenpackage.json/package-lock.json/Dockerfilechange, so this PR's Dockerfile edit is what surfaced it. Fixing it needs a dependency bump, which WCN-3304 explicitly scopes out; tracked for a separate change.Ticket: WCN-3304