From f57fe52d8bf3c81049c3a96341ac3e96e27bff8d Mon Sep 17 00:00:00 2001 From: Bruno Verachten Date: Thu, 12 Mar 2026 10:00:21 +0100 Subject: [PATCH 1/4] feat: add riscv64 to Linux wheel build matrix Add manylinux_2_28_riscv64 wheel builds via QEMU emulation. Uses include entries since riscv64 only has manylinux_2_28 (no manylinux2014, no musllinux). --- .github/workflows/wheel.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/wheel.yml b/.github/workflows/wheel.yml index 5d9d5d06..7f170098 100644 --- a/.github/workflows/wheel.yml +++ b/.github/workflows/wheel.yml @@ -81,6 +81,7 @@ jobs: CIBW_MANYLINUX_I686_IMAGE: quay.io/pypa/${{ matrix.image }}_i686:latest CIBW_MANYLINUX_PPC64LE_IMAGE: quay.io/pypa/${{ matrix.image }}_ppc64le:latest CIBW_MANYLINUX_S390X_IMAGE: quay.io/pypa/${{ matrix.image }}_s390x:latest + CIBW_MANYLINUX_RISCV64_IMAGE: quay.io/pypa/${{ matrix.image }}_riscv64:latest CIBW_MANYLINUX_X86_64_IMAGE: quay.io/pypa/${{ matrix.image }}_x86_64:latest CIBW_MUSLLINUX_AARCH64_IMAGE: quay.io/pypa/${{ matrix.image }}_aarch64:latest CIBW_MUSLLINUX_I686_IMAGE: quay.io/pypa/${{ matrix.image }}_i686:latest @@ -98,7 +99,7 @@ jobs: version: "0.8.11" - name: Set up QEMU - if: ${{ matrix.arch == 'ppc64le' || matrix.arch == 's390x' }} + if: ${{ matrix.arch == 'ppc64le' || matrix.arch == 's390x' || matrix.arch == 'riscv64' }} uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0 - name: Build wheels From 169e6fbb21a5c1c0aec99a238fd60554c7e5bbc2 Mon Sep 17 00:00:00 2001 From: Bruno Verachten Date: Thu, 12 Mar 2026 10:02:12 +0100 Subject: [PATCH 2/4] feat: add riscv64 include entries to wheel matrix Add manylinux_2_28_riscv64 builds for cp310-cp314t via include entries. Include entries bypass the existing manylinux_2_28 excludes that would otherwise block riscv64 combinations. --- .github/workflows/wheel.yml | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/.github/workflows/wheel.yml b/.github/workflows/wheel.yml index 7f170098..99bdcb47 100644 --- a/.github/workflows/wheel.yml +++ b/.github/workflows/wheel.yml @@ -70,6 +70,33 @@ jobs: image: 'musllinux_1_1' - py: 'cp314t' image: 'musllinux_1_1' + include: + # riscv64 only has manylinux_2_28 (no manylinux2014, no musllinux). + # Using include entries to bypass the manylinux_2_28 excludes above. + - py: 'cp310' + arch: 'riscv64' + abi: 'manylinux' + image: 'manylinux_2_28' + - py: 'cp311' + arch: 'riscv64' + abi: 'manylinux' + image: 'manylinux_2_28' + - py: 'cp312' + arch: 'riscv64' + abi: 'manylinux' + image: 'manylinux_2_28' + - py: 'cp313' + arch: 'riscv64' + abi: 'manylinux' + image: 'manylinux_2_28' + - py: 'cp314' + arch: 'riscv64' + abi: 'manylinux' + image: 'manylinux_2_28' + - py: 'cp314t' + arch: 'riscv64' + abi: 'manylinux' + image: 'manylinux_2_28' runs-on: ${{ matrix.arch == 'aarch64' && 'ubuntu-22.04-arm' || 'ubuntu-22.04' }} env: CIBW_ARCHS: ${{ matrix.arch }} From cbc4a208af36204c05249793b3079f8efe3f0858 Mon Sep 17 00:00:00 2001 From: Bruno Verachten Date: Sun, 5 Apr 2026 12:22:42 +0200 Subject: [PATCH 3/4] ci: upgrade setup-qemu-action v3 to v4 Signed-off-by: Bruno Verachten --- .github/workflows/wheel.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/wheel.yml b/.github/workflows/wheel.yml index 99bdcb47..5578c95c 100644 --- a/.github/workflows/wheel.yml +++ b/.github/workflows/wheel.yml @@ -127,7 +127,7 @@ jobs: - name: Set up QEMU if: ${{ matrix.arch == 'ppc64le' || matrix.arch == 's390x' || matrix.arch == 'riscv64' }} - uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0 + uses: docker/setup-qemu-action@ce360397dd3f832beb865e1373c09c0e9f86d70a # v4.0.0 - name: Build wheels run: | From a568c121667b428802a00b04ce6f7558e9e14835 Mon Sep 17 00:00:00 2001 From: Bruno Verachten Date: Sun, 3 May 2026 21:46:42 +0200 Subject: [PATCH 4/4] fix: use manylinux_2_39 image for riscv64 wheels manylinux_2_28_riscv64 does not exist in quay.io/pypa; the correct image is manylinux_2_39_riscv64. Signed-off-by: Bruno Verachten --- .github/workflows/wheel.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/wheel.yml b/.github/workflows/wheel.yml index 5578c95c..3effe404 100644 --- a/.github/workflows/wheel.yml +++ b/.github/workflows/wheel.yml @@ -71,32 +71,32 @@ jobs: - py: 'cp314t' image: 'musllinux_1_1' include: - # riscv64 only has manylinux_2_28 (no manylinux2014, no musllinux). + # riscv64 only has manylinux_2_39 (no manylinux2014, no musllinux). # Using include entries to bypass the manylinux_2_28 excludes above. - py: 'cp310' arch: 'riscv64' abi: 'manylinux' - image: 'manylinux_2_28' + image: 'manylinux_2_39' - py: 'cp311' arch: 'riscv64' abi: 'manylinux' - image: 'manylinux_2_28' + image: 'manylinux_2_39' - py: 'cp312' arch: 'riscv64' abi: 'manylinux' - image: 'manylinux_2_28' + image: 'manylinux_2_39' - py: 'cp313' arch: 'riscv64' abi: 'manylinux' - image: 'manylinux_2_28' + image: 'manylinux_2_39' - py: 'cp314' arch: 'riscv64' abi: 'manylinux' - image: 'manylinux_2_28' + image: 'manylinux_2_39' - py: 'cp314t' arch: 'riscv64' abi: 'manylinux' - image: 'manylinux_2_28' + image: 'manylinux_2_39' runs-on: ${{ matrix.arch == 'aarch64' && 'ubuntu-22.04-arm' || 'ubuntu-22.04' }} env: CIBW_ARCHS: ${{ matrix.arch }}