diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 0bd8ef3e..c58fb4e2 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -126,6 +126,11 @@ jobs: # explicitly here. os: - ubuntu-latest + # Overhead of building ARM wheels on Intel Linux nodes is + # unreasonably high (20s build time per wheel vs 3m); + # it's better to just spin another runner up to build them + # natively + - ubuntu-24.04-arm - macOS-latest - windows-latest # Since the oldest Python available on windows-11-arm on GitHub @@ -142,6 +147,8 @@ jobs: - name: Enable MSVC 64bit uses: ilammy/msvc-dev-cmd@v1 if: ${{ startsWith(matrix.os, 'windows-') }} && ${{ contains(matrix.cibw_skip, '*-win32') }} + # Note: Since we're building Linux wheels on their native + # architectures, we don't need QEMU - name: Set up QEMU uses: docker/setup-qemu-action@v3.0.0 if: runner.os == 'Linux' && matrix.arch != 'auto' @@ -155,10 +162,10 @@ jobs: env: CIBW_SKIP: ${{ matrix.cibw_skip }} # We're building on Windows-x64, so ARM64 wheels can't be tested - # locally by `cibuildwheel` (don't worry, we're testing them - # later though in `test_binpy_wheels`) + # locally by `cibuildwheel` + # (don't worry, we're testing them later though in + # `test_binpy_wheels`) CIBW_TEST_SKIP: '*-win_arm64' - CIBW_ARCHS_LINUX: ${{ matrix.arch }} CIBW_ENVIRONMENT: PYTHONUTF8=1 PYTHONUTF8: '1' # `msvc-dev-cmd` sets this envvar, which interferes with @@ -228,6 +235,10 @@ jobs: install-extras: tests-strict,runtime-strict os: ubuntu-latest arch: auto + - python-version: '3.8' + install-extras: tests-strict,runtime-strict + os: ubuntu-24.04-arm + arch: auto - python-version: '3.8' install-extras: tests-strict,runtime-strict os: macOS-latest @@ -241,6 +252,10 @@ jobs: install-extras: tests-strict,runtime-strict,optional-strict os: ubuntu-latest arch: auto + - python-version: '3.13' + install-extras: tests-strict,runtime-strict,optional-strict + os: ubuntu-24.04-arm + arch: auto - python-version: '3.13' install-extras: tests-strict,runtime-strict,optional-strict os: macOS-latest @@ -253,6 +268,14 @@ jobs: install-extras: tests-strict,runtime-strict,optional-strict os: windows-11-arm arch: auto + - python-version: '3.13' + install-extras: tests + os: ubuntu-latest + arch: auto + - python-version: '3.13' + install-extras: tests + os: ubuntu-24.04-arm + arch: auto - python-version: '3.13' install-extras: tests os: macOS-latest @@ -289,10 +312,38 @@ jobs: install-extras: tests,optional os: ubuntu-latest arch: auto - - python-version: 3.14.0-rc.1 + - python-version: '3.14' install-extras: tests,optional os: ubuntu-latest arch: auto + - python-version: '3.8' + install-extras: tests,optional + os: ubuntu-24.04-arm + arch: auto + - python-version: '3.9' + install-extras: tests,optional + os: ubuntu-24.04-arm + arch: auto + - python-version: '3.10' + install-extras: tests,optional + os: ubuntu-24.04-arm + arch: auto + - python-version: '3.11' + install-extras: tests,optional + os: ubuntu-24.04-arm + arch: auto + - python-version: '3.12' + install-extras: tests,optional + os: ubuntu-24.04-arm + arch: auto + - python-version: '3.13' + install-extras: tests,optional + os: ubuntu-24.04-arm + arch: auto + - python-version: '3.14' + install-extras: tests,optional + os: ubuntu-24.04-arm + arch: auto - python-version: '3.8' install-extras: tests,optional os: macOS-latest @@ -317,7 +368,7 @@ jobs: install-extras: tests,optional os: macOS-latest arch: auto - - python-version: 3.14.0-rc.1 + - python-version: '3.14' install-extras: tests,optional os: macOS-latest arch: auto @@ -345,7 +396,7 @@ jobs: install-extras: tests,optional os: windows-latest arch: auto - - python-version: 3.14.0-rc.1 + - python-version: '3.14' install-extras: tests,optional os: windows-latest arch: auto @@ -364,7 +415,7 @@ jobs: install-extras: tests,optional os: windows-11-arm arch: auto - - python-version: 3.14.0-rc.1 + - python-version: '3.14' install-extras: tests,optional os: windows-11-arm arch: auto @@ -378,6 +429,8 @@ jobs: # # assumes `arch=x64`, so we have to manually set it here... with: arch: ${{ contains(matrix.os, 'arm') && 'arm64' || 'x64' }} + # Note: Since we're testing Linux wheels on their native + # architectures, we don't need QEMU - name: Set up QEMU uses: docker/setup-qemu-action@v3.0.0 if: runner.os == 'Linux' && matrix.arch != 'auto' diff --git a/CHANGELOG.rst b/CHANGELOG.rst index f8be9b28..5d68c069 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -11,6 +11,7 @@ Changes * FIX: mitigate speed regressions introduced in 5.0.0 #376 * FIX: Use import system to locate module file run by ``kernprof -m`` #389 * FIX: Fixed build on Windows-ARM64 and now building wheels therefor in CI #391 +* FIX: Restored building and testing of Linux-ARM64 wheels #402 5.0.0 ~~~~~ diff --git a/pyproject.toml b/pyproject.toml index 52511799..fa7c45f7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,13 +31,23 @@ omit =[ [tool.cibuildwheel] build = "cp38-* cp39-* cp310-* cp311-* cp312-* cp313-* cp314-*" -skip = ["*-win32", "cp313-musllinux_i686"] +skip = [ + # XXX: since `tests.yml` already defines `matrix.cibw_skip` for + # `build_binpy_wheels`, can we deduplicate and just use that? + # Or do we need these when building wheels for release, which may + # run on separate pipelines? + '*-win32', + 'cp313-musllinux_i686', +] build-frontend = "build" build-verbosity = 1 test-command = "python {project}/run_tests.py" test-extras = ["tests-strict", "runtime-strict"] # https://cibuildwheel.readthedocs.io/en/stable/options/#archs +[tool.cibuildwheel.linux] +# We'll build X86 and ARM wheels natively on separate runners +archs = ['auto'] [tool.cibuildwheel.macos] archs = ["x86_64", "universal2", "arm64"] [tool.cibuildwheel.windows]