aioquic: add build-aioquic.yml for riscv64 wheels #2
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # SPDX-FileCopyrightText: 2026 The RISE Project | |
| # SPDX-License-Identifier: MIT | |
| --- | |
| # This workflow is based on: https://github.com/aiortc/aioquic/blob/1.3.0/.github/workflows/tests.yml | |
| name: Build aioquic wheels (riscv64) | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: 'aioquic version to build (git tag, e.g. 1.3.0)' | |
| required: true | |
| default: '1.3.0' | |
| pull_request: | |
| paths: | |
| - '.github/workflows/build-aioquic.yml' | |
| - 'patches/aioquic/**' | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ inputs.version || '1.3.0' }}-${{ github.head_ref || github.run_id }} | |
| cancel-in-progress: true | |
| permissions: | |
| contents: read # to fetch code (actions/checkout) | |
| env: | |
| AIOQUIC_VERSION: ${{ inputs.version || '1.3.0' }} | |
| MANYLINUX_RISCV64_IMAGE: quay.io/pypa/manylinux_2_39_riscv64 | |
| jobs: | |
| setup: | |
| uses: $/.github/workflows/_setup.yml | |
| build_wheels: | |
| needs: [setup] | |
| name: Build aioquic ${{ inputs.version || '1.3.0' }} cp310-abi3-manylinux_riscv64 | |
| runs-on: ubuntu-24.04-riscv | |
| timeout-minutes: 90 | |
| steps: | |
| - name: Checkout aioquic ${{ env.AIOQUIC_VERSION }} | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| repository: aiortc/aioquic | |
| ref: ${{ env.AIOQUIC_VERSION }} | |
| persist-credentials: false | |
| - name: Build wheels | |
| uses: pypa/cibuildwheel@1828c10ab37f080699c7b81cea34097c684a7074 # v4.2.0 | |
| with: | |
| output-dir: wheelhouse/ | |
| env: | |
| CIBW_ARCHS: riscv64 | |
| # cp310 first: setup.py forces the cp310-abi3 tag regardless of the | |
| # build interpreter (gotcha 96); the later entries build nothing, | |
| # they only re-test the one wheel. | |
| CIBW_BUILD: >- | |
| cp310-manylinux_riscv64 cp311-manylinux_riscv64 cp312-manylinux_riscv64 | |
| cp313-manylinux_riscv64 cp314-manylinux_riscv64 | |
| CIBW_MANYLINUX_RISCV64_IMAGE: ${{ env.MANYLINUX_RISCV64_IMAGE }} | |
| # _crypto links libcrypto; the riscv64 image ships only the runtime | |
| # .so, not the headers. auditwheel then vendors libcrypto (Apache-2.0) | |
| # into the wheel without a licence, so stage one. | |
| CIBW_BEFORE_ALL_LINUX: >- | |
| dnf -y install openssl-devel && | |
| cp /usr/share/licenses/openssl-libs/LICENSE.txt {project}/LICENSE.openssl | |
| # cryptography has no riscv64 wheel on public PyPI; PIP_ONLY_BINARY | |
| # stops pip from picking a newer PyPI-only sdist release (which | |
| # fails: its Rust backend has no riscv64 rustup target) over the | |
| # older riscv64 wheel our registry carries. pylsqpack (also no | |
| # public riscv64 wheel) builds from sdist in seconds either way. | |
| CIBW_TEST_ENVIRONMENT: >- | |
| AIOQUIC_SKIP_TESTS=ipv6,loss | |
| PIP_EXTRA_INDEX_URL=https://pypi.riseproject.dev/simple/ | |
| PIP_ONLY_BINARY=cryptography | |
| # cryptography 50.0.0 dropped SHA1-for-RSA-signing support, which | |
| # breaks test_tls.py's legacy-algorithm test regardless of arch; | |
| # cap it at the last release the suite was written against | |
| # (gotcha 97's shape). | |
| CIBW_TEST_REQUIRES: cryptography<50 | |
| CIBW_TEST_COMMAND: python -m unittest discover -t {project} -s {project}/tests | |
| - name: Check the wheel ships both extensions and both licences | |
| run: | | |
| python3 - wheelhouse/*.whl <<'EOF' | |
| import sys, zipfile | |
| for whl in sys.argv[1:]: | |
| names = zipfile.ZipFile(whl).namelist() | |
| for mod in ("_buffer", "_crypto"): | |
| assert any(n.startswith(f"aioquic/{mod}.") and n.endswith(".so") | |
| for n in names), (whl, mod) | |
| licences = {n.rsplit("/", 1)[1] | |
| for n in names if ".dist-info/licenses/" in n} - {""} | |
| assert licences == {"LICENSE", "LICENSE.openssl"}, (whl, licences) | |
| print(whl, "ok") | |
| EOF | |
| - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: aioquic-${{ env.AIOQUIC_VERSION }}-cp310-abi3-manylinux_riscv64 | |
| path: wheelhouse/*.whl | |
| if-no-files-found: error | |
| publish: | |
| name: Publish aioquic ${{ inputs.version || '1.3.0' }} | |
| needs: [setup, build_wheels] | |
| permissions: | |
| contents: write | |
| pull-requests: write | |
| uses: $/.github/workflows/_publish-wheel.yml | |
| with: | |
| artifact-pattern: aioquic-${{ inputs.version || '1.3.0' }}-*-manylinux_riscv64 |