Skip to content

Pin Node.js to eMudhra-patched versions in docs and JS toolchains (GDS-477) - #489

Merged
FlorentinD merged 3 commits into
mainfrom
gds-477-pin-nodejs-version-in-python-graph-visualization-docsjs
Oct 29, 2026
Merged

FlorentinD merged 3 commits into
mainfrom
gds-477-pin-nodejs-version-in-python-graph-visualization-docsjs

Conversation

@tyndria

@tyndria tyndria commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Supersedes #488, which was auto-closed when its head branch was replaced by the renamed one. CI on that PR was fully green (13/13) at the same commits.

Fixes GDS-477 (sub-issue of GDS-473) — the python-graph-visualization portion of the eMudhra intermediate CA compromise remediation (CVE-2026-111943, INC-1013).

Why

Node.js bundles its own CA trust store, independent of the OS store — so the ca-certificates patch step already present in CI does not protect npm/yarn/Antora during TLS. Only patched Node releases (22.23.4 / 24.22.1 / 26.12.1) distrust the compromised intermediates. Until now, both toolchains in this repo ran on an unpinned Node version.

Notably, the antora-docs CI job had no setup-node step at all and ran npm ci on the runner's ambient Node.

🤖 Generated with Claude Code

tyndria and others added 2 commits October 28, 2026 13:21
CVE-2026-111943 (eMudhra intermediate CA compromise): Node.js bundles
its own CA trust store, so the OS-level ca-certificates patch already
in CI does not protect npm/yarn/Antora TLS. Only Node 22.23.4 / 24.22.1
/ 26.12.1+ distrust the compromised intermediates.

- Add engines.node range admitting only patched release lines
  (^22.23.4 || ^24.22.1 || >=26.12.1) to docs/antora and js-applet
- Enforce it for npm via engine-strict=true in docs/antora/.npmrc
  (yarn already fails on incompatible engines)
- Add .nvmrc (24.22.1) for local dev
- Add a setup-node step to the antora-docs job, which previously ran
  npm ci on the runner's ambient Node with no version control

Refs GDS-473, INC-1013.

Co-Authored-By: Claude Code <noreply@anthropic.com>
CI jobs (build-js action, js-code-style, antora-docs) now read the Node
version from .nvmrc via node-version-file instead of the lts/* alias,
which resolved inconsistently across runners (24.22.1 on one, unpatched
24.21.0 on another) and made yarn fail the engines check.

Bumping Node is now a one-line change to .nvmrc.

Also move the engines block to the end of js-applet/package.json as
required by oxfmt's package.json key ordering.

Refs GDS-473, INC-1013.

Co-Authored-By: Claude Code <noreply@anthropic.com>
@tyndria
tyndria requested a review from a team as a code owner October 28, 2026 13:37
Comment thread .nvmrc
Antora 3.1.x supports Node LTS releases only (docs: "LTS (>= 16)").
Empirically, on Node 26.12.1 the Antora pipeline never settles: the
process exits 0 within half a second without logging, downloading the
UI bundle, or writing any output — a completely silent no-op. Node
24.22.1 builds the same playbook fine.

- Narrow docs/antora engines.node to "^22.23.4 || ^24.22.1" so an
  install on Node 26 fails loudly (EBADENGINE) instead of producing a
  silent empty build. js-applet keeps the wider range since its Vite 8
  toolchain works on Node 26.
- Add a build/site/index.html existence check to the antora-docs CI job
  so a future silent no-op cannot pass as green.

Long term, Node 26 support means upgrading the docs toolchain to
Antora 3.2 (supports Node >= 20).

Refs GDS-477, INC-1013.

Co-Authored-By: Claude Code <noreply@anthropic.com>
run: |
npm ci
npm run verify
# Antora 3.1.x silently exits 0 without generating anything on

@tyndria tyndria Oct 28, 2026 •

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I've also realised antora 3.1.14 doesn't work with node 26

@FlorentinD FlorentinD left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

thank you for picking this up!

- name: Setup Node
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version: "lts/*"

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

isnt it better to us the latest lts version (i.e. automatically use the last patch?)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

good question, I initially left lts but then I had failed checks here, because unpatched Node version 24.21.0 was cached on machine (even if lts/* is specified).
I believe it's possible to enable checking of the latest version with check-latest: false, but I've also learnt that Antora doesn't work with some versions, so I've decided to pin it instead

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

(specifically Antora 3.1.14)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I've realised Antora is not installed in this pipeline, I'll recheck this PR

@FlorentinD
FlorentinD merged commit 7288036 into main Oct 29, 2026
13 checks passed
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