Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
101 commits
Select commit Hold shift + click to select a range
7560670
build: add --enable-all-experimentals build flag
ShogunPanda Apr 20, 2026
e0c9637
tools: exclude @node-core/doc-kit from dependabot cooldown
kxxt Apr 20, 2026
5e0bcab
doc: clarify dns.lookup() callback signature when all is true
galaxy4276 Apr 20, 2026
952c9e8
node-api: update libuv ABI stability note
legendecas Apr 20, 2026
e729c5f
test: update test/addons/openssl-binding for OpenSSL 4.0
panva Apr 18, 2026
b2403f2
test: accept renamed OpenSSL 4.0 error code and reason
panva Apr 18, 2026
38aeed2
test: skip test-tls-error-stack when engines are unsupported
panva Apr 18, 2026
f974dbd
test: use valid DER OCSP responses
panva Apr 18, 2026
ba835bf
test: use an always invalid cipher and cover OpenSSL 4.0 behaviours
panva Apr 18, 2026
fb1e373
test: skip tls-deprecated secp256k1 on OpenSSL 4.0
panva Apr 18, 2026
12750e1
test: account for RFC 7919 FFDHE negotiation in OpenSSL 4.0
panva Apr 18, 2026
c3dd52a
test: accept OpenSSL 4 generic internal error for DH key-type mismatches
panva Apr 18, 2026
cee146f
doc: remove Ayase-252 and meixg from triagger team
aduh95 Apr 20, 2026
e02087c
src: fix MaybeStackBuffer char_traits deprecation warning
omghante Mar 30, 2026
dd6a0b5
tools: bump @node-core/doc-kit in /tools/doc in the doc group
dependabot[bot] Apr 20, 2026
ecf3435
doc,src,test: fix dead inspector help URL
semimikoh Apr 20, 2026
53b8d3c
src: use DCHECK in AsyncWrap::MakeCallback instead emiting a warning
Flarna Apr 21, 2026
eb54e70
doc: clarify diffieHellman.generateKeys recomputes same key
kovan Apr 21, 2026
3e32a13
tools: update nixpkgs-unstable to ab72be9733b41190ea34f1422a3e4e243ed
nodejs-github-bot Apr 21, 2026
dd85293
stream: ensuring cross-destruction in _duplexify to prevent leaks
watilde Apr 21, 2026
34f7433
doc: fix typos and inconsistencies in crypto.md and webcrypto.md
panva Apr 21, 2026
a6e8368
stream: reject duplicate nested transferables
daeyeon Apr 21, 2026
b2248fd
http: reject addTrailers after finish
islandryu Apr 21, 2026
c29a34c
crypto: add JWK support for ML-KEM and SLH-DSA key types
panva Apr 21, 2026
141c31c
tools: bump brace-expansion in /tools/clang-format
dependabot[bot] Apr 21, 2026
bd8345b
tools: bump brace-expansion from 5.0.4 to 5.0.5 in /tools/eslint
dependabot[bot] Apr 21, 2026
7e5e60b
module: remove duplicated checks from `_resolveFilename`
aduh95 Apr 21, 2026
05d002f
build: make test-addons dependency-free
joyeecheung Apr 22, 2026
f5808ed
lib: short-circuit WebIDL BufferSource SAB check
panva Apr 22, 2026
3a53447
doc,test: mem protection must be observed in ffi
bengl Apr 22, 2026
f9d78bb
meta: bump actions/setup-node from 6.3.0 to 6.4.0
dependabot[bot] Apr 22, 2026
0585f8c
meta: bump actions/github-script from 8.0.0 to 9.0.0
dependabot[bot] Apr 22, 2026
c812df7
meta: bump step-security/harden-runner from 2.16.1 to 2.19.0
dependabot[bot] Apr 22, 2026
58a237b
meta: bump peter-evans/create-pull-request from 8.1.0 to 8.1.1
dependabot[bot] Apr 22, 2026
379aba1
doc: trust FFI in the threat model
ShogunPanda Apr 22, 2026
5be0bd9
tools: set bot as author of tools-deps-update PRs
aduh95 Apr 22, 2026
c69c6f1
src: simplify and fix FFI ArrayBuffer accesses
addaleax Apr 22, 2026
fe41105
src: align FFI error handling with Node.js source
addaleax Apr 22, 2026
045febc
meta: move VoltrexKeyva to emeritus
mcollina Apr 22, 2026
d1ac02f
test_runner: add mock-timers support for AbortSignal.timeout
DeveloperViraj Nov 16, 2025
9531947
fs: restore fs patchability in ESM loader
joyeecheung Apr 22, 2026
c028766
Revert "deps: V8: cherry-pick 7107287"
richardlau Apr 22, 2026
acb1bd7
deps: V8: cherry-pick fcf8b990c73c
abmusse Dec 11, 2025
633b963
test_runner: fix suite rerun edge case
MoLow Apr 23, 2026
d44a71a
http: fix no_proxy leading-dot suffix matching
watilde Mar 19, 2026
1178926
test: update WPT for streams to f8f26a372f
nodejs-github-bot Apr 23, 2026
262dee5
build,win: enable x64 PGO
StefanStojanovic Apr 23, 2026
5f92b6d
doc: fix Argon2 parameter bounds
tniessen Apr 23, 2026
800f582
crypto: reject inherited key type names
JonathanLopes404 Apr 23, 2026
1f6f3ac
lib: harden kKeyOps lookup with null prototype
panva Apr 23, 2026
3dc06ae
test: normalize known inspector crash as completion
joyeecheung Apr 23, 2026
a5b3d76
test_runner: align mock timeout api
Han5991 Apr 23, 2026
78007d2
meta: update CODEOWNERS for FFI
ShogunPanda Apr 24, 2026
2428030
http: fix leaked error listener on sync HTTP req create + destroy
pimterry Apr 24, 2026
9c4ca0a
doc: fix typo in dns.lookup options description
watilde Apr 24, 2026
f1e0b83
deps: update V8 to 14.6.202.33
targos Apr 23, 2026
72bc9b4
build: reset embedder string to "-node.0"
targos Apr 23, 2026
34408ae
src: update NODE_MODULE_VERSION to 147
targos Mar 30, 2026
b6a9674
deps: patch V8 to avoid duplicated zlib symbol
targos Sep 16, 2023
add506a
deps: define V8_PRESERVE_MOST as no-op on Windows
StefanStojanovic Dec 16, 2024
232fc89
deps: remove problematic comment from v8-internal
targos Mar 19, 2025
593bb51
deps: patch V8 for illumos
danmcd Apr 16, 2025
2bae6ac
deps: support madvise(3C) across ALL illumos revisions
danmcd Aug 7, 2025
4ec8aa0
deps: V8: cherry-pick highway@989a498fdf3
richardlau Nov 13, 2025
512c5aa
deps: patch V8 to fix Windows build
StefanStojanovic Mar 17, 2026
ec508dd
deps: V8: cherry-pick aa0b288f87cc
richardlau Mar 9, 2026
38d98c3
deps: V8: cherry-pick edeb0a4fa181
joyeecheung Mar 14, 2026
d40be95
deps: V8: cherry-pick d83f479604c8
joyeecheung Mar 14, 2026
e6f9cd5
deps: V8: cherry-pick daf4656ba85e
miladfarca Feb 23, 2026
cc5a331
deps: V8: cherry-pick cf1bce40a5ef
richardlau Mar 28, 2026
13fb819
deps: V8: backport bef0d9c1bc90
joyeecheung Mar 5, 2026
2387042
deps: V8: cherry-pick 00f6e834029f
joyeecheung Apr 1, 2026
4dafa68
deps: V8: backport 088b7112e7ab
isheludko Apr 1, 2026
8405ee9
deps: V8: cherry-pick cd2c216e7658
luyahan Feb 26, 2026
b07bc44
deps: fix V8 race condition for AIX
abmusse Apr 20, 2026
fff9a8a
build,test: test array index hash collision
joyeecheung Jan 29, 2026
b5031b3
tools: update V8 gypfiles for 14.4
targos Nov 19, 2025
6f9100c
tools: update V8 gypfiles for 14.5
targos Dec 22, 2025
db03be7
tools: update V8 gypfiles for 14.6
targos Jan 24, 2026
bbae66f
tools: add Rust args to `tools/make-v8.sh`
richardlau Jan 27, 2026
fafe164
src: avoid deprecated `FixedArray::Get`
backes Dec 1, 2025
f3e0b79
src: avoid deprecated Wasm API
backes Dec 1, 2025
8aea917
src: stop using `v8::PropertyCallbackInfo<T>::This()`
isheludko Dec 7, 2025
49c2b4b
src: replace uses of deprecated v8::External APIs
gahaas Jan 21, 2026
9b67b06
test: add type tags to uses of v8::External
gahaas Feb 13, 2026
f59bd6b
test: support presence of Temporal global
targos Dec 22, 2025
492d65a
tools: remove v8_initializers_slow workaround from v8.gyp
targos Mar 27, 2026
4f3e6a4
build: enable V8_VERIFY_WRITE_BARRIERS in debug build
joyeecheung Mar 29, 2026
61c9b76
test: update wpt Wasm jsapi expectations
targos Apr 3, 2026
fcff458
test: skip wasm allocation tests in workers
targos Apr 21, 2026
8176c2c
buffer: fix end parameter bugs in indexOf/lastIndexOf
ronag Apr 24, 2026
4744070
fs: add followSymlinks option to glob
mcollina Apr 24, 2026
fe7ebcc
crypto: deduplicate and canonicalize CryptoKey usages
panva Apr 25, 2026
8f348bc
crypto: reject duplicate ML-KEM JWK key_ops
panva Apr 25, 2026
da7f2c8
deps: cherry-pick libuv/libuv@439a54b
skooch Apr 25, 2026
ce21c87
crypto: remove Argon2 KDF derivation from its job setup
panva Apr 25, 2026
10ae641
lib: fix FLOAT_32 and FLOAT_64 type constants in ffi
watilde Apr 24, 2026
21436f0
http: make req.headers have a null prototype
mcollina Apr 25, 2026
42a154b
stream: validate ReadableStream.from iterator objects
daeyeon Apr 25, 2026
34adeeb
doc: fix doubled word typo in stream_iter.md
watilde Apr 25, 2026
0f68423
tools: add non-default OpenSSL versions to the test-shared workflow
panva Apr 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
8 changes: 8 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -243,3 +243,11 @@
# dev container
/.devcontainer/* @nodejs/devcontainer
/doc/contributing/using-devcontainer.md @nodejs/devcontainer

# FFI
/deps/libffi/ @nodejs/ffi
/doc/api/ffi.md @nodejs/ffi
/lib/ffi.js @nodejs/ffi
/src/ffi/ @nodejs/ffi
/src/node_ffi.* @nodejs/ffi
/test/ffi/ @nodejs/ffi
72 changes: 72 additions & 0 deletions .github/actions/build-shared/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
name: Build Node.js (shared libraries)
description: >
Downloads the slim tarball built by the `build-tarball` job, extracts it,
installs Nix (+ cachix + sccache), then builds Node.js and runs the CI
test suite inside the pinned nix-shell.

inputs:
system:
description: System label (e.g. x86_64-linux, aarch64-darwin).
required: true
extra-nix-args:
description: Additional arguments appended to the nix-shell invocation.
required: false
default: ''
cachix-auth-token:
description: Cachix auth token for nodejs.cachix.org.
required: false
default: ''

runs:
using: composite
steps:
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
if: ${{ github.event_name != 'workflow_dispatch' }}
with:
name: tarballs
path: tarballs

- name: Extract tarball
if: ${{ github.event_name != 'workflow_dispatch' }}
shell: bash
run: |
tar xzf tarballs/*.tar.gz -C "$RUNNER_TEMP"
echo "TAR_DIR=$RUNNER_TEMP/$(basename tarballs/*.tar.gz .tar.gz)" >> "$GITHUB_ENV"

- uses: cachix/install-nix-action@96951a368ba55167b55f1c916f7d416bac6505fe # v31.10.3
with:
extra_nix_config: sandbox = true

- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
with:
name: nodejs
authToken: ${{ inputs.cachix-auth-token }}

- name: Configure sccache
if: github.base_ref == 'main' || github.ref_name == 'main'
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
with:
script: |
core.exportVariable('SCCACHE_GHA_ENABLED', 'on');
core.exportVariable('ACTIONS_CACHE_SERVICE_V2', 'on');
core.exportVariable('ACTIONS_RESULTS_URL', process.env.ACTIONS_RESULTS_URL || '');
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
core.exportVariable('NIX_SCCACHE', '(import <nixpkgs> {}).sccache');

- name: Build Node.js and run tests
shell: bash
run: |
nix-shell \
-I "nixpkgs=$TAR_DIR/tools/nix/pkgs.nix" \
--pure --keep TAR_DIR --keep FLAKY_TESTS \
--keep SCCACHE_GHA_ENABLED --keep ACTIONS_CACHE_SERVICE_V2 --keep ACTIONS_RESULTS_URL --keep ACTIONS_RUNTIME_TOKEN \
--arg loadJSBuiltinsDynamically false \
--arg useSeparateDerivationForV8 true \
--arg ccache "${NIX_SCCACHE:-null}" \
--arg devTools '[]' \
--arg benchmarkTools '[]' \
${{ endsWith(inputs.system, '-darwin') && '--arg withAmaro false --arg withLief false --arg withSQLite false --arg withFFI false --arg extraConfigFlags ''["--without-inspector" "--without-node-options"]'' \' || '\' }}
${{ inputs.extra-nix-args }} \
--run '
make -C "$TAR_DIR" run-ci -j4 V=1 TEST_CI_ARGS="-p actions --measure-flakiness 9 --skip-tests=$CI_SKIP_TESTS"
' "$TAR_DIR/shell.nix"
2 changes: 2 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@ updates:
semver-major-days: 5
semver-minor-days: 5
semver-patch-days: 5
exclude:
- '@node-core/doc-kit'
commit-message:
prefix: tools
open-pull-requests-limit: 10
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/auto-start-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ jobs:
runs-on: ubuntu-slim
steps:
- name: Install Node.js
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: ${{ env.NODE_VERSION }}

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/commit-lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
persist-credentials: false
- run: git reset HEAD^2
- name: Install Node.js
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: ${{ env.NODE_VERSION }}
- name: Validate commit message
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/commit-queue.yml
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ jobs:

# Install dependencies
- name: Install Node.js
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: ${{ env.NODE_VERSION }}
- name: Install @node-core/utils
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/create-release-proposal.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ jobs:

# Install dependencies
- name: Install Node.js
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: ${{ env.NODE_VERSION }}

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/daily-wpt-fyi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ jobs:
run: echo "NIGHTLY=$(curl -s https://nodejs.org/download/nightly/index.json | jq -r '[.[] | select(.files[] | contains("linux-arm64"))][0].version')" >> $GITHUB_ENV
- name: Install Node.js
id: setup-node
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: ${{ env.NIGHTLY || matrix.node-version }}
check-latest: true
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/daily.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
with:
persist-credentials: false
- name: Use Node.js ${{ env.NODE_VERSION }}
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: ${{ env.NODE_VERSION }}
- name: Environment Information
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/doc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:
with:
persist-credentials: false
- name: Use Node.js ${{ env.NODE_VERSION }}
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: ${{ env.NODE_VERSION }}
- name: Environment Information
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/find-inactive-collaborators.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ jobs:
persist-credentials: false

- name: Use Node.js ${{ env.NODE_VERSION }}
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: ${{ env.NODE_VERSION }}

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/find-inactive-tsc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ jobs:
repository: nodejs/TSC

- name: Use Node.js ${{ env.NODE_VERSION }}
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: ${{ env.NODE_VERSION }}

Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/linters.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ jobs:
with:
persist-credentials: false
- name: Use Node.js ${{ env.NODE_VERSION }}
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: ${{ env.NODE_VERSION }}
- name: Environment Information
Expand Down Expand Up @@ -61,7 +61,7 @@ jobs:
fetch-depth: 0
persist-credentials: false
- name: Use Node.js ${{ env.NODE_VERSION }}
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: ${{ env.NODE_VERSION }}
- name: Set up Python ${{ env.PYTHON_VERSION }}
Expand Down Expand Up @@ -99,7 +99,7 @@ jobs:
with:
persist-credentials: false
- name: Use Node.js ${{ env.NODE_VERSION }}
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: ${{ env.NODE_VERSION }}
- name: Environment Information
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/scorecard.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ jobs:

steps:
- name: Harden Runner
uses: step-security/harden-runner@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1
uses: step-security/harden-runner@8d3c67de8e2fe68ef647c8db1e6a09f647780f40 # v2.19.0
with:
egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs

Expand Down
120 changes: 92 additions & 28 deletions .github/workflows/test-shared.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ on:
- vcbuild.bat
- .**
- '!.github/workflows/test-shared.yml'
- '!.github/actions/build-shared/**'
types: [opened, synchronize, reopened, ready_for_review]
push:
branches:
Expand Down Expand Up @@ -97,6 +98,7 @@ on:
- vcbuild.bat
- .**
- '!.github/workflows/test-shared.yml'
- '!.github/actions/build-shared/**'

concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
Expand Down Expand Up @@ -144,59 +146,121 @@ jobs:
include:
- runner: ubuntu-24.04
system: x86_64-linux
- runner: ubuntu-24.04-arm
system: aarch64-linux
# built separately in build-aarch64-linux-v8
# - runner: ubuntu-24.04-arm
# system: aarch64-linux
- runner: macos-15-intel
system: x86_64-darwin
- runner: macos-latest
system: aarch64-darwin
name: '${{ matrix.system }}: with shared libraries'
runs-on: ${{ matrix.runner }}
steps:
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
if: ${{ github.event_name != 'workflow_dispatch' }}
with:
persist-credentials: false
sparse-checkout: .github/actions
- uses: ./.github/actions/build-shared
if: ${{ github.event_name != 'workflow_dispatch' }}
with:
system: ${{ matrix.system }}
cachix-auth-token: ${{ secrets.CACHIX_AUTH_TOKEN }}

build-aarch64-linux-v8:
needs: build-tarball
runs-on: ubuntu-24.04-arm
name: 'aarch64-linux: Cache V8 build'
steps:
- name: Check if Cachix is available
id: cachix-check
run: echo 'IS_AVAILABLE=${{ secrets.CACHIX_AUTH_TOKEN && 'true' }}' >> "$GITHUB_OUTPUT"

- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
if: ${{ steps.cachix-check.outputs.IS_AVAILABLE == 'true' }}
with:
name: tarballs
path: tarballs

- name: Extract tarball
if: ${{ github.event_name != 'workflow_dispatch' }}
if: ${{ steps.cachix-check.outputs.IS_AVAILABLE == 'true' }}
shell: bash
run: |
tar xzf tarballs/*.tar.gz -C "$RUNNER_TEMP"
echo "TAR_DIR=$RUNNER_TEMP/$(basename tarballs/*.tar.gz .tar.gz)" >> "$GITHUB_ENV"

- uses: cachix/install-nix-action@96951a368ba55167b55f1c916f7d416bac6505fe # v31.10.3
if: ${{ steps.cachix-check.outputs.IS_AVAILABLE == 'true' }}
with:
extra_nix_config: sandbox = true

- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
if: ${{ steps.cachix-check.outputs.IS_AVAILABLE == 'true' }}
with:
name: nodejs
authToken: ${{ secrets.CACHIX_AUTH_TOKEN }}

- name: Configure sccache
if: github.base_ref == 'main' || github.ref_name == 'main'
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
- name: Build V8 derivation
if: ${{ steps.cachix-check.outputs.IS_AVAILABLE == 'true' }}
run: |
nix-build "$(
nix-instantiate -E "builtins.filter (p: p.pname == ''v8'') (import $TAR_DIR/shell.nix { useSeparateDerivationForV8=true; }).buildInputs"
)"

# Builds the matrix for `build-openssl` from tools/nix/openssl-matrix.json.
# Output shape:
# [{ "version": "3.6.1", "attr": "openssl_3_6", "continue-on-error": false }, ...]
collect-openssl-versions:
if: github.event.pull_request.draft == false
runs-on: ubuntu-slim
outputs:
matrix: ${{ steps.query.outputs.matrix }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
script: |
core.exportVariable('SCCACHE_GHA_ENABLED', 'on');
core.exportVariable('ACTIONS_CACHE_SERVICE_V2', 'on');
core.exportVariable('ACTIONS_RESULTS_URL', process.env.ACTIONS_RESULTS_URL || '');
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
core.exportVariable('NIX_SCCACHE', '(import <nixpkgs> {}).sccache');

- name: Build Node.js and run tests
persist-credentials: false
sparse-checkout: tools/nix/openssl-matrix.json
sparse-checkout-cone-mode: false
- id: query
run: |
nix-shell \
-I "nixpkgs=$TAR_DIR/tools/nix/pkgs.nix" \
--pure --keep TAR_DIR --keep FLAKY_TESTS \
--keep SCCACHE_GHA_ENABLED --keep ACTIONS_CACHE_SERVICE_V2 --keep ACTIONS_RESULTS_URL --keep ACTIONS_RUNTIME_TOKEN \
--arg loadJSBuiltinsDynamically false \
--arg useSeparateDerivationForV8 true \
--arg ccache "${NIX_SCCACHE:-null}" \
--arg devTools '[]' \
--arg benchmarkTools '[]' \
${{ endsWith(matrix.system, '-darwin') && '--arg withAmaro false --arg withLief false --arg withSQLite false --arg withFFI false --arg extraConfigFlags ''["--without-inspector" "--without-node-options"]'' \' || '\' }}
--run '
make -C "$TAR_DIR" run-ci -j4 V=1 TEST_CI_ARGS="-p actions --measure-flakiness 9 --skip-tests=$CI_SKIP_TESTS"
' "$TAR_DIR/shell.nix"
{
echo 'matrix<<EOF'
cat tools/nix/openssl-matrix.json
echo 'EOF'
} >> "$GITHUB_OUTPUT"

# Builds and tests Node.js with shared libraries against every supported
# OpenSSL release version available in the repo-pinned nixpkgs. The default
# shared `openssl` from tools/nix/sharedLibDeps.nix is overridden per matrix
# entry, while all other shared libs remain at their defaults. Only runs on
# a single runner/system (aarch64-linux) to keep the matrix to a minimum.
build-openssl:
needs:
- build-aarch64-linux-v8
- collect-openssl-versions
strategy:
fail-fast: false
matrix:
openssl: ${{ fromJSON(needs.collect-openssl-versions.outputs.matrix) }}
name: 'aarch64-linux: with shared ${{ matrix.openssl.attr }} (${{ matrix.openssl.version }})'
runs-on: ubuntu-24.04-arm
continue-on-error: ${{ matrix.openssl['continue-on-error'] }}
env:
OPENSSL_ATTR: ${{ matrix.openssl.attr }}
OPENSSL_VERSION: ${{ matrix.openssl.version }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
sparse-checkout: .github/actions
- uses: ./.github/actions/build-shared
with:
system: aarch64-linux
cachix-auth-token: ${{ secrets.CACHIX_AUTH_TOKEN }}
# Override just the `openssl` attr of the default shared-lib set with
# the matrix-selected nixpkgs attribute (e.g. `openssl_3_6`). All
# other shared libs (brotli, cares, libuv, …) keep their defaults.
# `permittedInsecurePackages` whitelists just the matrix-selected
# release (e.g. `openssl-1.1.1w`) so EOL-with-extended-support
# cycles evaluate without relaxing nixpkgs' meta check globally.
extra-nix-args: --arg sharedLibDeps "(import $TAR_DIR/tools/nix/sharedLibDeps.nix {}) // { openssl = (import $TAR_DIR/tools/nix/pkgs.nix { config.permittedInsecurePackages = [ \"openssl-$OPENSSL_VERSION\" ]; }).$OPENSSL_ATTR; }"
Loading