From e288ddd8e7b286a2da6ba4061f5c60edfea03698 Mon Sep 17 00:00:00 2001 From: Dmitry Prudnikov Date: Sun, 3 May 2026 09:33:56 +0300 Subject: [PATCH 1/2] fix(ci): use pypa manylinux_2_28_aarch64 image via QEMU for aarch64 build MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PYO3_CROSS_PYTHON_VERSION did not help because maturin discovers Python interpreters before PyO3 reads env vars. The rust-cross container has no Python at all, so interpreter discovery always fails. Fix: use quay.io/pypa/manylinux_2_28_aarch64 (official pypa image with Python 3.11–3.13) via QEMU emulation. Slower than cross-compilation but reliably produces correct wheels without manual interpreter wiring. --- .github/workflows/release.yml | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index efe4d10..51d6702 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -73,13 +73,12 @@ jobs: manylinux: manylinux_2_28 # Linux aarch64 — AWS Graviton, Raspberry Pi, etc. - # Cross-compiled on the x86_64 runner using rust-cross container. - # rust-cross/manylinux_2_28-cross has no Python, so PYO3_CROSS_PYTHON_VERSION - # tells PyO3 which version to target without needing a Python binary. + # Uses the official pypa manylinux_2_28 aarch64 image via QEMU emulation. + # The rust-cross container has no Python, so we use the pypa image which has + # Python 3.11–3.13 preinstalled. Slower than cross-compilation but correct. - os: ubuntu-latest target: aarch64 - manylinux: manylinux_2_28 - pyo3_cross_python_version: "3.11" + manylinux: quay.io/pypa/manylinux_2_28_aarch64 # macOS Apple Silicon (M1/M2/M3) # Pin to Python 3.13: macos-latest ships Python 3.14 which PyO3 0.23.x @@ -135,8 +134,6 @@ jobs: - name: Build wheels uses: PyO3/maturin-action@32307a466a178317e8c2ae343b38e73896a047be # v1.47.0 - env: - PYO3_CROSS_PYTHON_VERSION: ${{ matrix.pyo3_cross_python_version }} with: command: build args: >- From 5e6ff67d1b05b321a1815a6d891a8cff418fa979 Mon Sep 17 00:00:00 2001 From: Dmitry Prudnikov Date: Sun, 3 May 2026 09:47:01 +0300 Subject: [PATCH 2/2] fix(ci): use container input for pypa aarch64 image, keep manylinux as policy maturin-action uses manylinux as the platform policy tag (e.g. manylinux_2_28) and container as the Docker image override. Passing the full image URL in manylinux was incorrect and would not select the pypa image. --- .github/workflows/release.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 51d6702..a7a254c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -78,7 +78,8 @@ jobs: # Python 3.11–3.13 preinstalled. Slower than cross-compilation but correct. - os: ubuntu-latest target: aarch64 - manylinux: quay.io/pypa/manylinux_2_28_aarch64 + manylinux: manylinux_2_28 + container: quay.io/pypa/manylinux_2_28_aarch64 # macOS Apple Silicon (M1/M2/M3) # Pin to Python 3.13: macos-latest ships Python 3.14 which PyO3 0.23.x @@ -142,6 +143,7 @@ jobs: --manifest-path coordinode-embedded/Cargo.toml --out dist manylinux: ${{ matrix.manylinux || 'auto' }} + container: ${{ matrix.container || '' }} target: ${{ matrix.target }} before-script-linux: | if command -v dnf >/dev/null 2>&1; then