This is an automated email from the ASF dual-hosted git repository.

lidavidm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-adbc.git


The following commit(s) were added to refs/heads/main by this push:
     new fe88b72a9 build: distribute wheels for Python 3.15/3.15t (#4879)
fe88b72a9 is described below

commit fe88b72a9917763a1ff2eb694341b5b6da8aa6f4
Author: David Li <[email protected]>
AuthorDate: Tue Oct 13 21:24:29 2026 -0700

    build: distribute wheels for Python 3.15/3.15t (#4879)
    
    Assisted-by: GPT-6.1 Sol
---
 .github/workflows/native-unix.yml         |  2 +
 .github/workflows/native-windows.yml      |  1 +
 .github/workflows/nightly-verify.yml      |  2 +
 .github/workflows/packaging.yml           | 68 ++++++++++++++++++++++++++++++-
 .github/workflows/verify.yml              | 20 +++++++++
 ci/scripts/python_wheel_unix_relocate.sh  |  2 +-
 dev/release/verify-release-candidate.ps1  |  2 +-
 dev/release/verify-release-candidate.sh   |  8 ++--
 python/adbc_driver_manager/pyproject.toml |  2 +-
 9 files changed, 98 insertions(+), 9 deletions(-)

diff --git a/.github/workflows/native-unix.yml 
b/.github/workflows/native-unix.yml
index b20cfcfc2..f2289e497 100644
--- a/.github/workflows/native-unix.yml
+++ b/.github/workflows/native-unix.yml
@@ -535,6 +535,7 @@ jobs:
     strategy:
       matrix:
         os: ["macos-15-intel", "macos-latest", "ubuntu-latest"]
+        # TODO(lidavidm): 3.14 -> 3.15 once conda packages are available
         python: ["3.11", "3.14"]
     env:
       # Required for macOS
@@ -668,6 +669,7 @@ jobs:
     strategy:
       matrix:
         os: ["ubuntu-latest"]
+        # TODO(lidavidm): 3.14 -> 3.15 once conda packages are available
         python: ["3.14"]
     steps:
       - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # 
v7.0.1
diff --git a/.github/workflows/native-windows.yml 
b/.github/workflows/native-windows.yml
index ff844f70d..adcad8434 100644
--- a/.github/workflows/native-windows.yml
+++ b/.github/workflows/native-windows.yml
@@ -264,6 +264,7 @@ jobs:
     strategy:
       matrix:
         os: ["windows-latest"]
+        # TODO(lidavidm): 3.14 -> 3.15 once conda packages are available
         python: ["3.11", "3.14"]
     steps:
       - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # 
v7.0.1
diff --git a/.github/workflows/nightly-verify.yml 
b/.github/workflows/nightly-verify.yml
index 6a047792f..426e9c820 100644
--- a/.github/workflows/nightly-verify.yml
+++ b/.github/workflows/nightly-verify.yml
@@ -182,6 +182,8 @@ jobs:
         env:
           CI: "false"
           REPOSITORY: ${{ github.repository }}
+          # TODO(lidavidm): 3.14 -> 3.15 once conda packages are available
+          PYTHON_VERSION: "3.14"
           TEST_DEFAULT: "0"
           TEST_SOURCE: "1"
           USE_CONDA: "1"
diff --git a/.github/workflows/packaging.yml b/.github/workflows/packaging.yml
index 92be0caeb..cf2f20437 100644
--- a/.github/workflows/packaging.yml
+++ b/.github/workflows/packaging.yml
@@ -770,6 +770,22 @@ jobs:
           pushd adbc
           env PYTHON=3.14t docker compose run 
python-wheel-manylinux-freethreaded-test
 
+      - name: Test wheel 3.15
+        env:
+          ARCH: ${{ matrix.arch }}
+          PLATFORM: ${{ matrix.platform }}
+        run: |
+          pushd adbc
+          env PYTHON=3.15 docker compose run python-wheel-manylinux-test
+
+      - name: Test wheel 3.15t
+        env:
+          ARCH: ${{ matrix.arch }}
+          PLATFORM: ${{ matrix.platform }}
+        run: |
+          pushd adbc
+          env PYTHON=3.15t docker compose run 
python-wheel-manylinux-freethreaded-test
+
   python-macos:
     name: "Python ${{ matrix.arch }} macOS"
     runs-on: ${{ matrix.os }}
@@ -914,6 +930,27 @@ jobs:
           ./ci/scripts/python_wheel_unix_test.sh $(pwd)
           deactivate
 
+      - name: Test wheel 3.15
+        run: |
+          pushd adbc
+
+          /Library/Frameworks/Python.framework/Versions/3.15/bin/python3.15 -m 
venv test-env-315
+          source test-env-315/bin/activate
+          export PYTHON_VERSION=3.15
+          ./ci/scripts/python_wheel_unix_test.sh $(pwd)
+          deactivate
+
+      - name: Test wheel 3.15t
+        run: |
+          pushd adbc
+
+          /Library/Frameworks/PythonT.framework/Versions/3.15/bin/python3.15t 
-m venv test-env-315t
+          source test-env-315t/bin/activate
+          export PYTHON_GIL=0
+          export PYTHON_VERSION=3.15t
+          ./ci/scripts/python_wheel_unix_test.sh $(pwd)
+          deactivate
+
       - name: Assemble logs
         if: failure()
         run: |
@@ -1061,6 +1098,24 @@ jobs:
           python-version: "3.14t"
           update-environment: false
 
+      - name: Install Python 3.15
+        id: python315
+        uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # 
v7.0.0
+        with:
+          architecture: ${{ matrix.python_arch }}
+          check-latest: true
+          python-version: "3.15"
+          update-environment: false
+
+      - name: Install Python 3.15t
+        id: python315t
+        uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # 
v7.0.0
+        with:
+          architecture: ${{ matrix.python_arch }}
+          check-latest: true
+          python-version: "3.15t"
+          update-environment: false
+
       - name: Build driver wheels
         shell: pwsh
         env:
@@ -1084,6 +1139,8 @@ jobs:
           PYTHON_313: ${{ steps.python313.outputs.python-path }}
           PYTHON_314: ${{ steps.python314.outputs.python-path }}
           PYTHON_314T: ${{ steps.python314t.outputs.python-path }}
+          PYTHON_315: ${{ steps.python315.outputs.python-path }}
+          PYTHON_315T: ${{ steps.python315t.outputs.python-path }}
           SETUPTOOLS_SCM_PRETEND_VERSION: ${{ env.VERSION }}
         run: |
           $OriginalPath = $env:PATH
@@ -1092,7 +1149,9 @@ jobs:
             @{ Version = "3.12"; Path = $env:PYTHON_312 },
             @{ Version = "3.13"; Path = $env:PYTHON_313 },
             @{ Version = "3.14"; Path = $env:PYTHON_314 },
-            @{ Version = "3.14t"; Path = $env:PYTHON_314T }
+            @{ Version = "3.14t"; Path = $env:PYTHON_314T },
+            @{ Version = "3.15"; Path = $env:PYTHON_315 },
+            @{ Version = "3.15t"; Path = $env:PYTHON_315T }
           )
           Set-Location adbc
           foreach ($Python in $Pythons) {
@@ -1128,6 +1187,8 @@ jobs:
           PYTHON_313: ${{ steps.python313.outputs.python-path }}
           PYTHON_314: ${{ steps.python314.outputs.python-path }}
           PYTHON_314T: ${{ steps.python314t.outputs.python-path }}
+          PYTHON_315: ${{ steps.python315.outputs.python-path }}
+          PYTHON_315T: ${{ steps.python315t.outputs.python-path }}
         run: |
           $DriverDir = Join-Path $PWD "adbc/build/bin"
           $OriginalPath = "$DriverDir;$env:PATH"
@@ -1136,7 +1197,9 @@ jobs:
             @{ Version = "3.12"; Path = $env:PYTHON_312 },
             @{ Version = "3.13"; Path = $env:PYTHON_313 },
             @{ Version = "3.14"; Path = $env:PYTHON_314 },
-            @{ Version = "3.14t"; Path = $env:PYTHON_314T }
+            @{ Version = "3.14t"; Path = $env:PYTHON_314T },
+            @{ Version = "3.15"; Path = $env:PYTHON_315 },
+            @{ Version = "3.15t"; Path = $env:PYTHON_315T }
           )
           Set-Location adbc
           foreach ($Python in $Pythons) {
@@ -1144,6 +1207,7 @@ jobs:
               continue
             }
             Write-Host "::group::Testing wheels with Python $($Python.Version)"
+            Remove-Item -Path Env:PYTHON_GIL -ErrorAction SilentlyContinue
             $env:PYTHON_VERSION = $Python.Version
             $PythonDir = Split-Path $Python.Path
             $env:PATH = "$PythonDir;$OriginalPath"
diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml
index 863f39e97..cbd4ac714 100644
--- a/.github/workflows/verify.yml
+++ b/.github/workflows/verify.yml
@@ -107,6 +107,24 @@ jobs:
           check-latest: true
           python-version: "3.14t"
           update-environment: false
+      - name: Install Python 3.15
+        if: matrix.os == 'windows-11-arm'
+        id: python315
+        uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # 
v7.0.0
+        with:
+          architecture: arm64
+          check-latest: true
+          python-version: "3.15"
+          update-environment: false
+      - name: Install Python 3.15t
+        if: matrix.os == 'windows-11-arm'
+        id: python315t
+        uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # 
v7.0.0
+        with:
+          architecture: arm64
+          check-latest: true
+          python-version: "3.15t"
+          update-environment: false
       # No Docker on M1
       - name: Skip Binary Verifiction
         if: matrix.os == 'macos-latest'
@@ -139,6 +157,8 @@ jobs:
           PYTHON_313_PATH: ${{ steps.python313.outputs.python-path }}
           PYTHON_314_PATH: ${{ steps.python314.outputs.python-path }}
           PYTHON_314T_PATH: ${{ steps.python314t.outputs.python-path }}
+          PYTHON_315_PATH: ${{ steps.python315.outputs.python-path }}
+          PYTHON_315T_PATH: ${{ steps.python315t.outputs.python-path }}
           REPOSITORY: ${{ github.repository }}
           TEST_DEFAULT: "0"
           TEST_BINARIES: "1"
diff --git a/ci/scripts/python_wheel_unix_relocate.sh 
b/ci/scripts/python_wheel_unix_relocate.sh
index 539c49f2f..c83f94aea 100755
--- a/ci/scripts/python_wheel_unix_relocate.sh
+++ b/ci/scripts/python_wheel_unix_relocate.sh
@@ -56,7 +56,7 @@ fi
 echo "=== Relocating wheels ==="
 # https://github.com/pypa/pip/issues/7555
 # Get the latest pip so we have in-tree-build by default
-python -m pip install --upgrade pip auditwheel 'cibuildwheel>=4' delocate 
setuptools wheel
+python -m pip install --upgrade pip auditwheel 'cibuildwheel>=4.2' delocate 
setuptools wheel
 
 # Build with Cython debug info
 export ADBC_BUILD_TYPE="debug"
diff --git a/dev/release/verify-release-candidate.ps1 
b/dev/release/verify-release-candidate.ps1
index 70d9d5994..396cdcf7c 100755
--- a/dev/release/verify-release-candidate.ps1
+++ b/dev/release/verify-release-candidate.ps1
@@ -443,7 +443,7 @@ if ($TestBinaryArtifacts) {
         }
 
         if ($env:TEST_PYTHON_VERSIONS -eq $null) {
-            $PythonVersions = @("3.11", "3.12", "3.13", "3.14", "3.14t")
+            $PythonVersions = @("3.11", "3.12", "3.13", "3.14", "3.14t", 
"3.15", "3.15t")
         } else {
             $PythonVersions = @($env:TEST_PYTHON_VERSIONS.Split(" ", 
[System.StringSplitOptions]::RemoveEmptyEntries))
         }
diff --git a/dev/release/verify-release-candidate.sh 
b/dev/release/verify-release-candidate.sh
index 87a8cf92b..a5ff80770 100755
--- a/dev/release/verify-release-candidate.sh
+++ b/dev/release/verify-release-candidate.sh
@@ -415,14 +415,14 @@ maybe_setup_conda() {
       conda deactivate || :
     fi
     # Ensure that conda is installed
-    install_conda
+    install_conda || return 1
     # Create environment
     if ! conda env list | cut -d" " -f 1 | grep $env; then
-      mamba create -y -n $env python=${pyver} ${pymarker}
+      mamba create -y -n $env python=${pyver} ${pymarker} || return 1
     fi
     # Install dependencies
     if [ $# -gt 0 ]; then
-      mamba install -y -n $env $@
+      mamba install -y -n $env $@ || return 1
     fi
     # Activate the environment
     conda activate $env
@@ -821,7 +821,7 @@ test_unix_wheels() {
   local arch="${1}"
   local platform="${2}"
 
-  local python_versions="${TEST_PYTHON_VERSIONS:-3.11 3.12 3.13 3.14 3.14t}"
+  local python_versions="${TEST_PYTHON_VERSIONS:-3.11 3.12 3.13 3.14 3.14t 
3.15 3.15t}"
 
   for python in ${python_versions}; do
     local pyver=${python/t}
diff --git a/python/adbc_driver_manager/pyproject.toml 
b/python/adbc_driver_manager/pyproject.toml
index 3999f7aa8..59d509cfa 100644
--- a/python/adbc_driver_manager/pyproject.toml
+++ b/python/adbc_driver_manager/pyproject.toml
@@ -35,7 +35,7 @@ homepage = "https://arrow.apache.org/adbc/";
 repository = "https://github.com/apache/arrow-adbc";
 
 [build-system]
-requires = ["Cython >= 3.1.0", "setuptools >= 77.0.0"]
+requires = ["Cython >= 3.3.0", "setuptools >= 77.0.0"]
 build-backend = "setuptools.build_meta"
 
 [tool.pytest.ini_options]

Reply via email to