diff --git a/.github/workflows/build-tarball.yml b/.github/workflows/build-tarball.yml index 53e625ef889..feaac740d07 100644 --- a/.github/workflows/build-tarball.yml +++ b/.github/workflows/build-tarball.yml @@ -66,7 +66,7 @@ concurrency: env: PYTHON_VERSION: '3.14' FLAKY_TESTS: keep_retrying - CLANG_VERSION: '19' + CLANG_VERSION: '21' NODE_VERSION: lts/* permissions: @@ -102,10 +102,10 @@ jobs: archive: false test-tarball-linux: needs: build-tarball - runs-on: ubuntu-24.04-arm + runs-on: ubuntu-26.04-arm env: - CC: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} clang-19 - CXX: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} clang++-19 + CC: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} clang-21 + CXX: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} clang++-21 SCCACHE_GHA_ENABLED: ${{ github.base_ref == 'main' || github.ref_name == 'main' }} SCCACHE_IDLE_TIMEOUT: '0' steps: diff --git a/.github/workflows/coverage-linux-without-intl.yml b/.github/workflows/coverage-linux-without-intl.yml index aa5ed3a3747..c37344cfd5c 100644 --- a/.github/workflows/coverage-linux-without-intl.yml +++ b/.github/workflows/coverage-linux-without-intl.yml @@ -36,9 +36,9 @@ concurrency: env: PYTHON_VERSION: '3.14' FLAKY_TESTS: keep_retrying - CLANG_VERSION: '19' - CC: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} clang-19 - CXX: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} clang++-19 + CLANG_VERSION: '21' + CC: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} clang-21 + CXX: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} clang++-21 SCCACHE_GHA_ENABLED: ${{ github.base_ref == 'main' || github.ref_name == 'main' }} SCCACHE_IDLE_TIMEOUT: '0' @@ -48,7 +48,7 @@ permissions: jobs: coverage-linux-without-intl: if: github.event.pull_request.draft == false - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: @@ -80,7 +80,7 @@ jobs: env: NODE_OPTIONS: --max-old-space-size=8192 - name: Report C++ - run: gcovr --object-directory=out -v --filter src --xml -o ./coverage/coverage-cxx.xml --root=./ --gcov-executable="llvm-cov-18 gcov" + run: gcovr --object-directory=out -v --filter src --xml -o ./coverage/coverage-cxx.xml --root=./ --gcov-executable="llvm-cov-$CLANG_VERSION gcov" # Clean temporary output from gcov and c8, so that it's not uploaded: - name: Clean tmp run: rm -rf coverage/tmp && rm -rf out diff --git a/.github/workflows/coverage-linux.yml b/.github/workflows/coverage-linux.yml index 63ac4fa5f2e..b43ba3b2477 100644 --- a/.github/workflows/coverage-linux.yml +++ b/.github/workflows/coverage-linux.yml @@ -36,9 +36,9 @@ concurrency: env: PYTHON_VERSION: '3.14' FLAKY_TESTS: keep_retrying - CLANG_VERSION: '19' - CC: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} clang-19 - CXX: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} clang++-19 + CLANG_VERSION: '21' + CC: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} clang-21 + CXX: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} clang++-21 SCCACHE_GHA_ENABLED: ${{ github.base_ref == 'main' || github.ref_name == 'main' }} SCCACHE_IDLE_TIMEOUT: '0' @@ -48,7 +48,7 @@ permissions: jobs: coverage-linux: if: github.event.pull_request.draft == false - runs-on: ubuntu-24.04-arm + runs-on: ubuntu-26.04-arm steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: @@ -80,7 +80,7 @@ jobs: env: NODE_OPTIONS: --max-old-space-size=8192 - name: Report C++ - run: gcovr --object-directory=out -v --filter src --xml -o ./coverage/coverage-cxx.xml --root=./ --gcov-executable="llvm-cov-18 gcov" + run: gcovr --object-directory=out -v --filter src --xml -o ./coverage/coverage-cxx.xml --root=./ --gcov-executable="llvm-cov-$CLANG_VERSION gcov" # Clean temporary output from gcov and c8, so that it's not uploaded: - name: Clean tmp run: rm -rf coverage/tmp && rm -rf out diff --git a/.github/workflows/daily-wpt-fyi.yml b/.github/workflows/daily-wpt-fyi.yml index d15f21010cd..bbab25d2f93 100644 --- a/.github/workflows/daily-wpt-fyi.yml +++ b/.github/workflows/daily-wpt-fyi.yml @@ -36,7 +36,7 @@ jobs: matrix: node-version: ${{ fromJSON(needs.collect-versions.outputs.matrix) }} fail-fast: false - runs-on: ubuntu-24.04-arm + runs-on: ubuntu-26.04-arm steps: - name: Set up Python ${{ env.PYTHON_VERSION }} uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 diff --git a/.github/workflows/daily.yml b/.github/workflows/daily.yml index b7a616e2df5..ce38ab65244 100644 --- a/.github/workflows/daily.yml +++ b/.github/workflows/daily.yml @@ -14,7 +14,7 @@ permissions: jobs: build-lto: if: github.repository == 'nodejs/node' || github.event_name == 'workflow_dispatch' - runs-on: ubuntu-24.04-arm + runs-on: ubuntu-26.04-arm steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: diff --git a/.github/workflows/stress-test.yml b/.github/workflows/stress-test.yml index 0f17615671c..ded509432b0 100644 --- a/.github/workflows/stress-test.yml +++ b/.github/workflows/stress-test.yml @@ -14,8 +14,8 @@ on: type: choice options: - macos-15 - - ubuntu-24.04 - - ubuntu-24.04-arm + - ubuntu-26.04 + - ubuntu-26.04-arm repeat: description: Number of times to repeat each test (--repeat) required: true @@ -35,7 +35,7 @@ on: env: PYTHON_VERSION: '3.14' XCODE_VERSION: '16.4' - CLANG_VERSION: '19' + CLANG_VERSION: '21' RUSTC_VERSION: '1.88' permissions: @@ -46,8 +46,8 @@ jobs: runs-on: ${{ inputs.os }} env: # Linux builds with clang (matching test-linux.yml), macOS with gcc/g++. - CC: ${{ startsWith(inputs.os, 'ubuntu') && 'sccache clang-19' || 'sccache gcc' }} - CXX: ${{ startsWith(inputs.os, 'ubuntu') && 'sccache clang++-19' || 'sccache g++' }} + CC: ${{ startsWith(inputs.os, 'ubuntu') && 'sccache clang-21' || 'sccache gcc' }} + CXX: ${{ startsWith(inputs.os, 'ubuntu') && 'sccache clang++-21' || 'sccache g++' }} # Enable sccache - this is okay for a manually-dispatched workflow that is typically used to # test lib-only or test-only deflaking changes. This should be able to pick up cache from # test-linux.yml and test-macos.yml running on the main branch. diff --git a/.github/workflows/test-internet.yml b/.github/workflows/test-internet.yml index 672893a999a..5ea2f8878b1 100644 --- a/.github/workflows/test-internet.yml +++ b/.github/workflows/test-internet.yml @@ -41,9 +41,9 @@ concurrency: env: PYTHON_VERSION: '3.14' FLAKY_TESTS: keep_retrying - CLANG_VERSION: '19' - CC: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} clang-19 - CXX: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} clang++-19 + CLANG_VERSION: '21' + CC: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} clang-21 + CXX: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} clang++-21 SCCACHE_GHA_ENABLED: ${{ github.base_ref == 'main' || github.ref_name == 'main' }} SCCACHE_IDLE_TIMEOUT: '0' @@ -53,7 +53,7 @@ permissions: jobs: test-internet: if: (github.event_name == 'schedule' && github.repository == 'nodejs/node') || (github.event.pull_request && github.event.pull_request.draft == false) - runs-on: ubuntu-24.04-arm + runs-on: ubuntu-26.04-arm steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: diff --git a/.github/workflows/test-linux-perfetto.yml b/.github/workflows/test-linux-perfetto.yml index f11970e8f6f..d5f64f5026a 100644 --- a/.github/workflows/test-linux-perfetto.yml +++ b/.github/workflows/test-linux-perfetto.yml @@ -22,9 +22,9 @@ concurrency: env: PYTHON_VERSION: '3.14' FLAKY_TESTS: keep_retrying - CLANG_VERSION: '19' - CC: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} clang-19 - CXX: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} clang++-19 + CLANG_VERSION: '21' + CC: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} clang-21 + CXX: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} clang++-21 SCCACHE_GHA_ENABLED: ${{ github.base_ref == 'main' || github.ref_name == 'main' }} SCCACHE_IDLE_TIMEOUT: '0' RUSTC_VERSION: '1.88' @@ -35,7 +35,7 @@ permissions: jobs: test-perfetto: if: github.event.pull_request.draft == false - runs-on: ubuntu-24.04-arm + runs-on: ubuntu-26.04-arm steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: diff --git a/.github/workflows/test-linux-quic.yml b/.github/workflows/test-linux-quic.yml index eca8521a310..7d5470f4b14 100644 --- a/.github/workflows/test-linux-quic.yml +++ b/.github/workflows/test-linux-quic.yml @@ -32,9 +32,9 @@ concurrency: env: PYTHON_VERSION: '3.14' FLAKY_TESTS: keep_retrying - CLANG_VERSION: '19' - CC: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} clang-19 - CXX: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} clang++-19 + CLANG_VERSION: '21' + CC: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} clang-21 + CXX: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} clang++-21 SCCACHE_GHA_ENABLED: ${{ github.base_ref == 'main' || github.ref_name == 'main' }} SCCACHE_IDLE_TIMEOUT: '0' RUSTC_VERSION: '1.88' @@ -45,7 +45,7 @@ permissions: jobs: test-quic: if: github.event.pull_request.draft == false - runs-on: ubuntu-24.04-arm + runs-on: ubuntu-26.04-arm steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: diff --git a/.github/workflows/test-linux.yml b/.github/workflows/test-linux.yml index 65aead07b92..bbe3371365f 100644 --- a/.github/workflows/test-linux.yml +++ b/.github/workflows/test-linux.yml @@ -41,9 +41,9 @@ concurrency: env: PYTHON_VERSION: '3.14' FLAKY_TESTS: keep_retrying - CLANG_VERSION: '19' - CC: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} clang-19 - CXX: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} clang++-19 + CLANG_VERSION: '21' + CC: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} clang-21 + CXX: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} clang++-21 SCCACHE_GHA_ENABLED: ${{ github.base_ref == 'main' || github.ref_name == 'main' }} SCCACHE_IDLE_TIMEOUT: '0' RUSTC_VERSION: '1.88' @@ -58,7 +58,7 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-24.04, ubuntu-24.04-arm] + os: [ubuntu-26.04, ubuntu-26.04-arm] steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: diff --git a/.github/workflows/test-macos.yml b/.github/workflows/test-macos.yml index c5638281e5a..fc153f648df 100644 --- a/.github/workflows/test-macos.yml +++ b/.github/workflows/test-macos.yml @@ -66,7 +66,7 @@ concurrency: env: PYTHON_VERSION: '3.14' - XCODE_VERSION: '16.4' + XCODE_VERSION: '26.4' FLAKY_TESTS: keep_retrying RUSTC_VERSION: '1.88' @@ -78,7 +78,7 @@ jobs: if: github.event.pull_request.draft == false strategy: fail-fast: false - runs-on: macos-15 + runs-on: macos-26 env: CC: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} gcc CXX: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} g++ diff --git a/BUILDING.md b/BUILDING.md index 6fc93ca2ad0..410482f5a8d 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -147,7 +147,7 @@ platforms. This is true regardless of entries in the table below. [^4]: Our macOS Binaries are compiled with 13.5 as a target. Xcode 16 is required to compile. -[^5]: Native riscv64 builds need GCC >= 14 or Clang >= 19 because V8 +[^5]: Native riscv64 builds need GCC >= 14 or Clang >= 21 because V8 includes `` and uses `target("arch=+v")` in `deps/v8/src/base/cpu.cc`. GCC 13's `riscv_vector.h` errors out without `-march=rv64gcv` and doesn't support the `target` attribute at all. @@ -162,9 +162,9 @@ Depending on the host platform, the selection of toolchains may vary. | Operating System | Compiler Versions | | ---------------- | ------------------------------------------------------------------- | -| Linux | GCC >= 13.2 or Clang >= 19.1 | +| Linux | GCC >= 13.2 or Clang >= 21 | | Windows | Visual Studio 2022 or 2026 with the Windows 11 SDK on a 64-bit host | -| macOS | Xcode >= 16.4 (Apple LLVM >= 19) | +| macOS | Xcode >= 26.4 (Apple LLVM >= 21) | ### Official binary platforms and toolchains @@ -241,7 +241,7 @@ tarball and/or browse the git repository checked out at the relevant tag. #### Unix prerequisites -* `gcc` and `g++` >= 13.2 or `clang` and `clang++` >= 19.1 +* `gcc` and `g++` >= 13.2 or `clang` and `clang++` >= 21 * GNU Make 3.81 or newer * [A supported version of Python][Python versions] * For test coverage, your Python installation must include pip. @@ -259,7 +259,7 @@ FreeBSD and OpenBSD users may also need to install `libexecinfo`. #### macOS prerequisites -* Xcode Command Line Tools >= 16.4 for macOS +* Xcode Command Line Tools >= 26.4 for macOS * [A supported version of Python][Python versions] * For test coverage, your Python installation must include pip. @@ -1036,7 +1036,7 @@ Node.js supports the [Temporal](https://github.com/tc39/proposal-temporal) APIs, linking statically or dynamically with a version of [temporal\_rs](https://github.com/boa-dev/temporal). Building it requires a Rust toolchain: -* rustc >= 1.88 (with LLVM >= 19) +* rustc >= 1.88 (with LLVM >= 21) * cargo >= 1.86 Refer to [Install Rust](https://rust-lang.org/tools/install/) for instructions.