Commit 85543c1522c for nodejs
commit 85543c1522c0e098ee9d075f19ef3fcd9d960d4a
Author: Mike McCready <66998419+MikeMcC399@users.noreply.github.com>
Date: Sun Oct 11 17:56:06 2026 +0200
build: support Python 3.15
Signed-off-by: Mike McCready <66998419+MikeMcC399@users.noreply.github.com>
PR-URL: https://github.com/nodejs/node/pull/65750
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Reviewed-By: Stefan Stojanovic <stefan.stojanovic@janeasystems.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Ulises Gascón <ulisesgascongonzalez@gmail.com>
diff --git a/.github/workflows/build-tarball.yml b/.github/workflows/build-tarball.yml
index 53e625ef889..92aa35af00e 100644
--- a/.github/workflows/build-tarball.yml
+++ b/.github/workflows/build-tarball.yml
@@ -64,7 +64,7 @@ concurrency:
cancel-in-progress: true
env:
- PYTHON_VERSION: '3.14'
+ PYTHON_VERSION: '3.15'
FLAKY_TESTS: keep_retrying
CLANG_VERSION: '19'
NODE_VERSION: lts/*
diff --git a/.github/workflows/coverage-linux-without-intl.yml b/.github/workflows/coverage-linux-without-intl.yml
index aa5ed3a3747..4ab6975305b 100644
--- a/.github/workflows/coverage-linux-without-intl.yml
+++ b/.github/workflows/coverage-linux-without-intl.yml
@@ -34,7 +34,7 @@ concurrency:
cancel-in-progress: true
env:
- PYTHON_VERSION: '3.14'
+ PYTHON_VERSION: '3.15'
FLAKY_TESTS: keep_retrying
CLANG_VERSION: '19'
CC: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} clang-19
diff --git a/.github/workflows/coverage-linux.yml b/.github/workflows/coverage-linux.yml
index 63ac4fa5f2e..a642c0fada0 100644
--- a/.github/workflows/coverage-linux.yml
+++ b/.github/workflows/coverage-linux.yml
@@ -34,7 +34,7 @@ concurrency:
cancel-in-progress: true
env:
- PYTHON_VERSION: '3.14'
+ PYTHON_VERSION: '3.15'
FLAKY_TESTS: keep_retrying
CLANG_VERSION: '19'
CC: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} clang-19
diff --git a/.github/workflows/coverage-windows.yml b/.github/workflows/coverage-windows.yml
index 0736dea3252..beffb26f3ec 100644
--- a/.github/workflows/coverage-windows.yml
+++ b/.github/workflows/coverage-windows.yml
@@ -60,7 +60,7 @@ concurrency:
cancel-in-progress: true
env:
- PYTHON_VERSION: '3.14'
+ PYTHON_VERSION: '3.15'
FLAKY_TESTS: keep_retrying
RUSTC_VERSION: '1.88'
diff --git a/.github/workflows/daily-wpt-fyi.yml b/.github/workflows/daily-wpt-fyi.yml
index d15f21010cd..8dea276d052 100644
--- a/.github/workflows/daily-wpt-fyi.yml
+++ b/.github/workflows/daily-wpt-fyi.yml
@@ -13,7 +13,7 @@ on:
- cron: 30 0 * * *
env:
- PYTHON_VERSION: '3.14'
+ PYTHON_VERSION: '3.15'
permissions:
contents: read
diff --git a/.github/workflows/lint-release-proposal.yml b/.github/workflows/lint-release-proposal.yml
index 027aee336ac..9652eea91b8 100644
--- a/.github/workflows/lint-release-proposal.yml
+++ b/.github/workflows/lint-release-proposal.yml
@@ -10,7 +10,7 @@ concurrency:
cancel-in-progress: true
env:
- PYTHON_VERSION: '3.14'
+ PYTHON_VERSION: '3.15'
NODE_VERSION: lts/*
permissions:
diff --git a/.github/workflows/linters.yml b/.github/workflows/linters.yml
index 9afdb2ef5a6..a4997b3d4cc 100644
--- a/.github/workflows/linters.yml
+++ b/.github/workflows/linters.yml
@@ -14,7 +14,7 @@ concurrency:
cancel-in-progress: true
env:
- PYTHON_VERSION: '3.14'
+ PYTHON_VERSION: '3.15'
NODE_VERSION: lts/*
permissions:
diff --git a/.github/workflows/stress-test.yml b/.github/workflows/stress-test.yml
index 0f17615671c..f715815afc4 100644
--- a/.github/workflows/stress-test.yml
+++ b/.github/workflows/stress-test.yml
@@ -33,7 +33,7 @@ on:
type: string
env:
- PYTHON_VERSION: '3.14'
+ PYTHON_VERSION: '3.15'
XCODE_VERSION: '16.4'
CLANG_VERSION: '19'
RUSTC_VERSION: '1.88'
diff --git a/.github/workflows/test-internet.yml b/.github/workflows/test-internet.yml
index 672893a999a..fc569f4a53e 100644
--- a/.github/workflows/test-internet.yml
+++ b/.github/workflows/test-internet.yml
@@ -39,7 +39,7 @@ concurrency:
cancel-in-progress: true
env:
- PYTHON_VERSION: '3.14'
+ PYTHON_VERSION: '3.15'
FLAKY_TESTS: keep_retrying
CLANG_VERSION: '19'
CC: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} clang-19
diff --git a/.github/workflows/test-linux-perfetto.yml b/.github/workflows/test-linux-perfetto.yml
index f11970e8f6f..edc7e5c3a77 100644
--- a/.github/workflows/test-linux-perfetto.yml
+++ b/.github/workflows/test-linux-perfetto.yml
@@ -20,7 +20,7 @@ concurrency:
cancel-in-progress: true
env:
- PYTHON_VERSION: '3.14'
+ PYTHON_VERSION: '3.15'
FLAKY_TESTS: keep_retrying
CLANG_VERSION: '19'
CC: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} clang-19
diff --git a/.github/workflows/test-linux-quic.yml b/.github/workflows/test-linux-quic.yml
index eca8521a310..c3650c42953 100644
--- a/.github/workflows/test-linux-quic.yml
+++ b/.github/workflows/test-linux-quic.yml
@@ -30,7 +30,7 @@ concurrency:
cancel-in-progress: true
env:
- PYTHON_VERSION: '3.14'
+ PYTHON_VERSION: '3.15'
FLAKY_TESTS: keep_retrying
CLANG_VERSION: '19'
CC: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} clang-19
diff --git a/.github/workflows/test-linux.yml b/.github/workflows/test-linux.yml
index 65aead07b92..8f02723bb64 100644
--- a/.github/workflows/test-linux.yml
+++ b/.github/workflows/test-linux.yml
@@ -39,7 +39,7 @@ concurrency:
cancel-in-progress: true
env:
- PYTHON_VERSION: '3.14'
+ PYTHON_VERSION: '3.15'
FLAKY_TESTS: keep_retrying
CLANG_VERSION: '19'
CC: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} clang-19
diff --git a/.github/workflows/test-macos.yml b/.github/workflows/test-macos.yml
index c5638281e5a..c64cb77241b 100644
--- a/.github/workflows/test-macos.yml
+++ b/.github/workflows/test-macos.yml
@@ -65,7 +65,7 @@ concurrency:
cancel-in-progress: true
env:
- PYTHON_VERSION: '3.14'
+ PYTHON_VERSION: '3.15'
XCODE_VERSION: '16.4'
FLAKY_TESTS: keep_retrying
RUSTC_VERSION: '1.88'
diff --git a/.github/workflows/tools.yml b/.github/workflows/tools.yml
index 8c396e7378f..013b445e2f3 100644
--- a/.github/workflows/tools.yml
+++ b/.github/workflows/tools.yml
@@ -47,7 +47,7 @@ on:
- zstd
env:
- PYTHON_VERSION: '3.14'
+ PYTHON_VERSION: '3.15'
permissions:
contents: read
diff --git a/android-configure b/android-configure
index b2628f95e8e..f583c247680 100755
--- a/android-configure
+++ b/android-configure
@@ -4,6 +4,7 @@
# Note that the mix of single and double quotes is intentional,
# as is the fact that the ] goes on a new line.
_=[ 'exec' '/bin/sh' '-c' '''
+command -v python3.15 >/dev/null && exec python3.15 "$0" "$@"
command -v python3.14 >/dev/null && exec python3.14 "$0" "$@"
command -v python3.13 >/dev/null && exec python3.13 "$0" "$@"
command -v python3.12 >/dev/null && exec python3.12 "$0" "$@"
@@ -22,7 +23,14 @@ except ImportError:
from distutils.spawn import find_executable as which
print('Node.js android configure: Found Python {}.{}.{}...'.format(*sys.version_info))
-acceptable_pythons = ((3, 14), (3, 13), (3, 12), (3, 11), (3, 10))
+acceptable_pythons = (
+ (3, 15),
+ (3, 14),
+ (3, 13),
+ (3, 12),
+ (3, 11),
+ (3, 10),
+)
if sys.version_info[:2] in acceptable_pythons:
import android_configure
else:
diff --git a/configure b/configure
index f39c2d55e83..b38d9453afe 100755
--- a/configure
+++ b/configure
@@ -4,6 +4,7 @@
# Note that the mix of single and double quotes is intentional,
# as is the fact that the ] goes on a new line.
_=[ 'exec' '/bin/sh' '-c' '''
+command -v python3.15 >/dev/null && exec python3.15 "$0" "$@"
command -v python3.14 >/dev/null && exec python3.14 "$0" "$@"
command -v python3.13 >/dev/null && exec python3.13 "$0" "$@"
command -v python3.12 >/dev/null && exec python3.12 "$0" "$@"
@@ -22,7 +23,14 @@ except ImportError:
from distutils.spawn import find_executable as which
print('Node.js configure: Found Python {}.{}.{}...'.format(*sys.version_info))
-acceptable_pythons = ((3, 14), (3, 13), (3, 12), (3, 11), (3, 10))
+acceptable_pythons = (
+ (3, 15),
+ (3, 14),
+ (3, 13),
+ (3, 12),
+ (3, 11),
+ (3, 10),
+)
if sys.version_info[:2] in acceptable_pythons:
import configure
else: