From 23df0598262893b9bf2422266e6e90a20d9b920f Mon Sep 17 00:00:00 2001 From: Ludovic Henry Date: Mon, 7 Sep 2026 01:13:46 +0200 Subject: [PATCH] persistent: add build-persistent.yml for riscv64 wheels MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mirrors the existing zope-hookable/zope-interface ports: checks out the zopefoundation/persistent repo and builds via cibuildwheel against the manylinux_riscv64 image. cffi and zope.interface (both build- and run-time dependencies of the compiled extensions) have no riscv64 wheel on public PyPI, so PIP_EXTRA_INDEX_URL points at our own registry for both phases. Tests run upstream's own zope.testrunner suite twice (compiled and PURE_PYTHON), excluding test_docs, whose doctest walks up from the installed module to find docs/api/*.rst — files the wheel does not ship. --- .github/workflows/build-persistent.yml | 91 ++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 .github/workflows/build-persistent.yml diff --git a/.github/workflows/build-persistent.yml b/.github/workflows/build-persistent.yml new file mode 100644 index 000000000..8d11d56a2 --- /dev/null +++ b/.github/workflows/build-persistent.yml @@ -0,0 +1,91 @@ +# SPDX-FileCopyrightText: 2026 The RISE Project +# SPDX-License-Identifier: MIT +--- +# This workflow is based on: https://github.com/zopefoundation/persistent/blob/6.8/.github/workflows/tests.yml +name: Build persistent wheels (riscv64) + +on: + workflow_dispatch: + inputs: + version: + description: 'persistent version to build (git tag, e.g. 6.8)' + required: true + default: '6.8' + pull_request: + paths: + - '.github/workflows/build-persistent.yml' + +concurrency: + group: ${{ github.workflow }}-${{ inputs.version || '6.8' }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +permissions: + contents: read # to fetch code (actions/checkout) + +env: + PERSISTENT_VERSION: ${{ inputs.version || '6.8' }} + MANYLINUX_RISCV64_IMAGE: quay.io/pypa/manylinux_2_39_riscv64 + +jobs: + setup: + uses: $/.github/workflows/_setup.yml + + build_wheels: + needs: [setup] + name: Build persistent ${{ inputs.version || '6.8' }} ${{ matrix.python }}-manylinux_riscv64 + runs-on: ubuntu-24.04-riscv + timeout-minutes: 60 + strategy: + fail-fast: false + matrix: + python: + - "cp312" + - "cp313" + - "cp314" + - "cp314t" + + steps: + - name: Checkout persistent ${{ env.PERSISTENT_VERSION }} + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + repository: zopefoundation/persistent + ref: ${{ env.PERSISTENT_VERSION }} + persist-credentials: false + + - name: Build wheels + uses: pypa/cibuildwheel@1828c10ab37f080699c7b81cea34097c684a7074 # v4.2.0 + with: + output-dir: wheelhouse/ + only: ${{ matrix.python }}-manylinux_riscv64 + env: + CIBW_MANYLINUX_RISCV64_IMAGE: ${{ env.MANYLINUX_RISCV64_IMAGE }} + # cffi and zope.interface, needed to build and to import the extension, + # have no riscv64 wheel on public PyPI. + CIBW_ENVIRONMENT: PIP_EXTRA_INDEX_URL=https://pypi.riseproject.dev/simple/ + CIBW_TEST_EXTRAS: test + CIBW_TEST_ENVIRONMENT: ZOPE_INTERFACE_STRICT_IRO=1 + # Upstream's two test steps (with and without the C extensions). + # setup.py swallows extension build failures (optional_build_ext), so + # PURE_PYTHON=0 — which makes the C import mandatory at runtime — is + # what proves the wheel is not pure Python. test_docs walks up from + # the installed (not checked-out) module to find docs/api/*.rst, + # which the wheel doesn't ship, so it is excluded. + CIBW_TEST_COMMAND: >- + PURE_PYTHON=0 python -m zope.testrunner --test-path={package}/src -m '!test_docs' && + PURE_PYTHON=1 python -m zope.testrunner --test-path={package}/src -m '!test_docs' + + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: persistent-${{ env.PERSISTENT_VERSION }}-${{ matrix.python }}-manylinux_riscv64 + path: wheelhouse/*.whl + if-no-files-found: error + + publish: + name: Publish persistent ${{ inputs.version || '6.8' }} + needs: [setup, build_wheels] + permissions: + contents: write + pull-requests: write + uses: $/.github/workflows/_publish-wheel.yml + with: + artifact-pattern: persistent-${{ inputs.version || '6.8' }}-*-manylinux_riscv64