Skip to content

feat(root): support Node.js 26 and test Node.js 27 - #10043

Open
zahin-mohammad wants to merge 6 commits into
masterfrom
WCN-3753-add-nodejs-26-support
Open

zahin-mohammad wants to merge 6 commits into
masterfrom
WCN-3753-add-nodejs-26-support

Conversation

@zahin-mohammad

@zahin-mohammad zahin-mohammad commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Make Node.js 26 a required continuous integration (CI) unit-test runtime alongside Node.js 22 and 24.
  • Run the latest Node.js 27 nightly build as an experimental, non-blocking early-warning check.
  • Apply non-blocking behavior to every Node.js 27 setup, install, build, and test step so an incompatibility produces a green check plus a warning comment instead of a failed pull-request check.
  • Document that Node.js 28 replaces Node.js 27 as the single experimental entry when Node.js 28 development builds become available.
  • Upgrade the frozen yargs command-line parser dependency to 16.2.2, which fixes Mocha startup on Node.js 26 by using an explicit CommonJS entry point.
  • Align the documented Node.js engine range and both coin-package generators on >=22, which includes Node.js 26.
  • Keep the BitGo Express container on Node.js 24.22.1 after rebasing onto master, and document that it tracks the older of the two most recent Long-Term Support (LTS) releases. Express source installs support Node.js 22, 24, and 26.

The default .nvmrc development runtime remains Node.js 24 until Node.js 26 reaches LTS, following the repository upgrade policy. The Node.js 26 CI leg is intentionally blocking before that transition.

Validation

  • yarn install --frozen-lockfile --ignore-scripts --registry https://registry.npmjs.org
  • yarn unit-test-changed on Node.js v26.8.1: passed for bitgo and @bitgo/express; 1,978 Express tests passed
  • yarn check-versions
  • yarn commitlint --from=origin/master -V
  • go run github.com/rhysd/actionlint/cmd/actionlint@v1.7.7 .github/workflows/ci.yml
  • yarn prettier --check .github/workflows/ci.yml modules/express/README.md
  • docker build --check --platform=linux/amd64 .
  • ESLint on scripts/sdk-coin-generator-v2/core/generator.ts
  • Verified all 94 declared Node.js engine ranges accept Node.js 26

Ticket

WCN-3753: Add Node.js 26 support to BitGoJS

@linear-code

linear-code Bot commented Oct 23, 2026

Copy link
Copy Markdown
Contributor

WCN-3753

@zahin-mohammad zahin-mohammad changed the title feat(root): support Node.js 26 feat(root): support Node.js 26 and test Node.js 27 Oct 23, 2026
@zahin-mohammad

Copy link
Copy Markdown
Contributor Author

@claude review

@github-actions

github-actions Bot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Claude encountered an error —— View job


I'll analyze this and get back to you.

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I reviewed this PR and didn't find any bugs. A human should still look, because it changes CI merge-gating policy and swaps a resolved dependency in yarn.lock, and CODEOWNERS assigns both to owning teams.

What was reviewed:

  • CI matrix: 26.x is now required. The 27-nightly leg is non-blocking through job-level continue-on-error, so a setup or install failure there shouldn't fail all-checks. Adding ci.yml to the source filter means workflow-only edits now run unit tests.
  • yarn.lock moves yargs from 16.2.0 to 16.2.2 within the existing ^16.2.0 range. I couldn't check the new version and integrity hash against the npm registry from this environment, so that's worth confirming.
  • Engine ranges: both coin generators now use >=22, which matches the updated README and DEVELOPERS.md. The rest of the diff is Prettier reformatting and wording in CLAUDE.md and the READMEs.
Extended reasoning...

The change touches the CI workflow (which Node.js versions must pass before merge), one transitive dependency resolution in yarn.lock, the engine ranges in both coin-package generators, and docs. No runtime SDK code, authentication or cryptographic paths change. The CODEOWNERS file assigns the root, /scripts/ and /yarn.lock to specific teams. The yargs lockfile bump is a supply-chain change whose registry metadata couldn't be checked from here. Together, these make a human review worthwhile even though the diff is small.

@zahin-mohammad
zahin-mohammad force-pushed the WCN-3753-add-nodejs-26-support branch from 8966ebc to 3ae2591 Compare October 23, 2026 18:22
@github-actions

github-actions Bot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

⚠️ Compatibility checks are failing on Node.js 27-nightly (experimental, non-blocking). This does not block merge, but it signals an incompatibility to fix before this release becomes supported.

View run

@zahin-mohammad
zahin-mohammad marked this pull request as ready for review October 23, 2026 18:59
@zahin-mohammad
zahin-mohammad requested review from a team as code owners October 23, 2026 18:59

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Claude Code Review

This repository is configured for manual code reviews. Comment @claude review for a one-time review, or @claude review always to subscribe this PR to a review on every future push.

Tip: disable this comment in your organization's Code Review settings.

pranishnepal
pranishnepal previously approved these changes Oct 23, 2026
@zahin-mohammad

Copy link
Copy Markdown
Contributor Author

@claude review

@github-actions

github-actions Bot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Claude encountered an error —— View job


I'll analyze this and get back to you.

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nothing blocking. The comments below are optional suggestions. There is no need to push a fix for them before merging.

Additional findings (outside the current diff — GitHub can't attach inline comments there):

  • 🟡 .github/workflows/ci.yml — A hang on the Node.js 27 nightly leg can still block every pull request's merge, despite the non-blocking setup. Step-level continue-on-error only absorbs a step that exits with failure. The unit-test job has no timeout-minutes, so a hung step runs until GitHub's 360-minute job limit. The job then ends as failed or cancelled, and all-checks requires success or skipped. Fix: set timeout-minutes on the experimental Unit Test and build packages steps (for example 60), well under the job limit, so a hang becomes a step failure that continue-on-error absorbs and the warning comment reports.

    Why this was flagged

    Trigger: a Node.js 27 nightly regression makes mocha or tsc under yarn run unit-test-changed or yarn run postinstall hang instead of exiting non-zero. An open handle that keeps the event loop alive, or a deadlock in the nightly runtime, would do it; I cannot reproduce this from the checkout. The unit-test job (.github/workflows/ci.yml:55) sets no timeout-minutes at job or step level. Its continue-on-error: ${{ matrix.experimental }} (ci.yml:141, :133) only applies when a step finishes with a failure. A job hitting the 360-minute default ends as failed or cancelled, and all-checks (ci.yml:539-556) passes only when every needs result is success or skipped, so merge is blocked. The base had the same gap on a released 26.x Current line. This change moves the experimental leg to master nightlies, which are much more likely to regress. The description says every 27 step yields a green check plus a warning, and that does not hold for a hang. A step timeout turns the hang into a step failure, which the existing continue-on-error and failure-comment logic already handle.

    Verification: The unit-test job (ci.yml:55-61) has no timeout-minutes. The experimental steps only get continue-on-error: ${{ matrix.experimental }} (ci.yml:133, :141). A step that never exits runs until GitHub's 6-hour job limit and ends cancelled or failed. all-checks then fails at ci.yml:556, which blocks merge. The base had the same gap for its experimental 26.x leg.

Comment thread .github/workflows/ci.yml
Comment thread .github/workflows/ci.yml
@zahin-mohammad

Copy link
Copy Markdown
Contributor Author

Addressed the remaining Node.js 27 nightly review findings in a36d0d4: setup now times out after 15 minutes, while install, build, and unit-test steps time out after 60 minutes. Because these experimental steps retain continue-on-error, a timeout becomes a reported compatibility warning instead of waiting for GitHub’s six-hour job limit. The same commit prevents failed installs from being cached and requires an actual successful unit-test outcome before resolving the warning. Validation: actionlint v1.7.7 and Prettier both pass for .github/workflows/ci.yml.

@zahin-mohammad

Copy link
Copy Markdown
Contributor Author

@claude review

@github-actions

github-actions Bot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Claude encountered an error —— View job


I'll analyze this and get back to you.

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nothing blocking. The comments below are optional suggestions. There is no need to push a fix for them before merging.

Comment thread .github/workflows/ci.yml
@zahin-mohammad
zahin-mohammad force-pushed the WCN-3753-add-nodejs-26-support branch from 3235ff7 to 171091b Compare October 23, 2026 23:09
pranishnepal
pranishnepal previously approved these changes Oct 26, 2026
@zahin-mohammad
zahin-mohammad force-pushed the WCN-3753-add-nodejs-26-support branch from 171091b to dd0f0d9 Compare October 26, 2026 17:41
@zahin-mohammad
zahin-mohammad force-pushed the WCN-3753-add-nodejs-26-support branch from dd0f0d9 to 1f26128 Compare October 26, 2026 17:48
dpkjnr
dpkjnr previously approved these changes Oct 26, 2026
@zahin-mohammad
zahin-mohammad force-pushed the WCN-3753-add-nodejs-26-support branch 2 times, most recently from 6256756 to 9696afe Compare October 27, 2026 15:55
Document the Node.js 24 container baseline.

Align source prerequisites with the supported Node.js 22, 24, and 26 releases.

Ticket: WCN-3753
Limit repository-wide Prettier checks to eight processes and ESLint checks
to two processes. This avoids V8 crashes and runner resource exhaustion.

Ticket: WCN-3753
Use the current wallet signing method in mocks and assert exact expected responses.

Unexpected missing-method errors now fail instead of satisfying broad error checks.

Ticket: WCN-3753

This branch has not been deployed

No deployments
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.

6 participants