[Node EOL] Upgrade to Node 24 LTS#1
Conversation
Node.js EOL migration — Node 24 LTS
Addresses Node 16/18/20 EOL findings detected by Semgrep rules:
- abridge.supply-chain.dockerfile-node{XX}-eol
- abridge.supply-chain.nvmrc-node{XX}-eol
See SEC-382 and the node-24-upgrade skill for context.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
Warning Rate limit exceeded
Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 5 minutes and 9 seconds. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Enterprise Run ID: 📒 Files selected for processing (2)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
Remove the `chainguard-private/` segment — not present in Abridge's Chainguard subscription. The canonical path is `abridge.com/node-fips` (same path used by the already-migrated clinician-web/main). The digest is unchanged and valid against the canonical path. Verified via: docker pull us-docker.pkg.dev/abridge-artifact-registry/cgr/abridge.com/node-fips:24@sha256:2ce422dd44b26b25d0dcca2cf9e3c06b6ded78517d5fea7be5ff4a81aa0df54e # → node v24.15.0 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Summary
Migrates this NVIDIA Riva websocket bridge from Node 16 to Node 24 LTS to address EOL findings from Semgrep supply-chain rules (SEC-382). This is the largest jump in the batch (16 -> 24), so the full step-3 breaking-change audit from the
node-24-upgradeskill applies.Findings addressed
Dockerfile:1—abridge.supply-chain.dockerfile-node16-eol(high)Changes
Dockerfile: base imagenode:16-> Chainguard FIPSnode-fips:24(pinned by digest per security standard). Dropped thenpm install -g npm@8.5.5pin — Node 24 ships npm 11, and the old pin would be a downgrade..circleci/config.yml:node/testorbversion: '16.10'->'24.0'. Orb kept atcircleci/node@4.7(already supportscimg/node:24.0).package.json: noengines.nodefield to update; left untouched.Breaking-change audit (per node-24-upgrade skill)
Scope:
server.js,modules/,tests/,riva_client/.Node 16 -> 18 cliff (most disruptive hurdle for this repo):
createHash('md4')/--openssl-legacy-provider/ legacy ciphers (des-ede3-cbc,rc2,bf-cbc,rc4,ripemd160,md4): no hits in source or Dockerfile.certificates/cert.pemis 4096-bit RSA + SHA256 (regenerated fresh viamake_certs.shwithrsa:4096). Safely above OpenSSL 3.5 level 2's 2048-bit RSA minimum.node-fetch/abort-controlleras direct deps: not present — no polyfill removal needed.headersTimeout/requestTimeoutoverrides: none. The server useshttps.createServer(...).listen()with no timeout tuning, so it'll pick up the Node 18+ defaults (60s headers / 300s request). Websocket upgrade requests complete quickly so this should be fine; slow-ASR long-lived connections happen after the WS upgrade viawslibrary, not the HTTP server, so they're unaffected.server.address().family(string -> integer): no references.Node 18 -> 20:
new WASI(...),autoSelectFamily,process.exitwith non-number: no hits.Node 20 -> 22:
require('punycode'),require('sys'),--loader,crypto.createCipher: no hits.fs.read/fs.readSyncwithout buffer: no hits.Node 23 / 24 removals:
dirent.path,fs.F_OKdirect,process.assert,url.parse,util.isX,util._extend,util.log,zlib.bytesRead: no hits.Native addons / deps worth flagging for reviewers (not blocking this diff):
grpc@^1.24.11— the legacy native-addon gRPC package; deprecated upstream for years and almost certainly won't have prebuilt binaries for Node 24's NODE_MODULE_VERSION 137.@grpc/grpc-js@^1.7.1is already a dep and is the modern pure-JS replacement. Recommend removinggrpcin a follow-up; a quick grep shows norequire('grpc')inserver.js/modules//riva_client/so it may already be dead.jest@^28.1.3— skill recommends Jest v29+ for Node 22 and v30 for Node 24. Existing tests may throwjest-environment-nodeerrors; flag for a follow-up bump.bluebird/regenerator-runtime— ES5-era polyfills; likely no-ops on Node 24 but not required.Tests added
None — no behavioral changes beyond version refs.
How this was tested
npm ci— skipped locally (audit workstation; gRPC native addon install is finicky).npm test(Jest 28) — CircleCI will validate oncimg/node:24.0. Expect potential fallout from Jest 28 on Node 24; see flagged follow-up above.Reviewers
🤖 Generated with Claude Code