diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 08cf2781..8eb33066 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -22,35 +22,41 @@ jobs: platform: - runner: ubuntu-latest target: x86_64 + interpreters: &full-interpreters '["3.10", "3.11", "3.12", "3.13", "3.14", "3.14t", "3.15", "3.15t"]' - runner: ubuntu-latest target: x86 - - runner: ubuntu-latest + interpreters: *full-interpreters + # A native arm64 runner, so maturin-action uses the official + # quay.io/pypa/manylinux2014_aarch64 image (same as x86_64/x86 above), rather than + # the ghcr.io/rust-cross/manylinux2014-cross cross-compilation image used for the + # remaining targets below, which doesn't yet bundle Python 3.15/3.15t. + - runner: ubuntu-24.04-arm target: aarch64 + interpreters: *full-interpreters + # ghcr.io/rust-cross/manylinux2014-cross (used for these targets, since there's no + # official manylinux2014 image for them, and no native GitHub-hosted runner for + # their architectures) doesn't yet bundle Python 3.15/3.15t - it only goes up to + # 3.14/3.14t. - runner: ubuntu-latest target: armv7 + interpreters: &cross-interpreters '["3.10", "3.11", "3.12", "3.13", "3.14", "3.14t"]' - runner: ubuntu-latest target: s390x + interpreters: *cross-interpreters - runner: ubuntu-latest target: ppc64le + interpreters: *cross-interpreters steps: - uses: actions/checkout@v5 - uses: actions/setup-python@v6 with: - python-version: | - 3.10 - 3.11 - 3.12 - 3.13 - 3.14 - 3.14t - 3.15 - 3.15t + python-version: ${{ join(fromJSON(matrix.platform.interpreters), fromJSON('"\n"')) }} allow-prereleases: true - name: Build wheels uses: PyO3/maturin-action@v1 with: target: ${{ matrix.platform.target }} - args: --release --out dist --find-interpreter + args: --release --out dist --interpreter ${{ join(fromJSON(matrix.platform.interpreters), ' ') }} sccache: 'true' manylinux: auto - name: Upload wheels @@ -64,33 +70,33 @@ jobs: strategy: matrix: platform: + # Unlike the `linux` job, all musllinux targets - including aarch64, even on a + # native arm64 runner - build inside ghcr.io/rust-cross/rust-musl-cross images + # (there's no official musllinux image for maturin-action to use natively), which + # don't yet bundle Python 3.15/3.15t - they only go up to 3.14/3.14t. - runner: ubuntu-latest target: x86_64 + interpreters: *cross-interpreters - runner: ubuntu-latest target: x86 + interpreters: *cross-interpreters - runner: ubuntu-latest target: aarch64 + interpreters: *cross-interpreters - runner: ubuntu-latest target: armv7 + interpreters: *cross-interpreters steps: - uses: actions/checkout@v5 - uses: actions/setup-python@v6 with: - python-version: | - 3.10 - 3.11 - 3.12 - 3.13 - 3.14 - 3.14t - 3.15 - 3.15t + python-version: ${{ join(fromJSON(matrix.platform.interpreters), fromJSON('"\n"')) }} allow-prereleases: true - name: Build wheels uses: PyO3/maturin-action@v1 with: target: ${{ matrix.platform.target }} - args: --release --out dist --find-interpreter + args: --release --out dist --interpreter ${{ join(fromJSON(matrix.platform.interpreters), ' ') }} sccache: 'true' manylinux: musllinux_1_2 - name: Upload wheels diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 64c244bc..9b34bf94 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -7,6 +7,10 @@ latest * Fix missing macOS wheels for regular (non-freethreaded) Python 3.14+ (https://github.com/python-grimp/grimp/issues/317). +* Fix missing Linux aarch64 wheels for Python 3.15 by building on a native arm64 runner. +* No Python 3.15 wheels are published for Linux armv7, s390x or ppc64le, or for any musllinux + target, since the Docker images used to build those don't yet support Python 3.15. Previously + the release workflow silently skipped these wheels; now it does so explicitly. * Fix imports in the ``else`` (or non-type checking ``elif``) branch of an ``if TYPE_CHECKING:`` statement being excluded by ``exclude_type_checking_imports``, even though they run at runtime. * Fix panic when a module declares its encoding using a name that Python accepts but that isn't a