Build spidev wheels (riscv64) #2
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 | |
| --- | |
| name: Build spidev wheels (riscv64) | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: 'spidev version/tag to build (git tag without leading v, e.g. 3.8)' | |
| required: true | |
| default: '3.8' | |
| pull_request: | |
| paths: | |
| - '.github/workflows/build-spidev.yml' | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ inputs.version || '3.8' }}-${{ github.head_ref || github.run_id }} | |
| cancel-in-progress: true | |
| permissions: | |
| contents: read # to fetch code (actions/checkout) | |
| env: | |
| SPIDEV_VERSION: ${{ inputs.version || '3.8' }} | |
| MANYLINUX_RISCV64_IMAGE: quay.io/pypa/manylinux_2_39_riscv64 | |
| MUSLLINUX_RISCV64_IMAGE: quay.io/pypa/musllinux_1_2_riscv64 | |
| jobs: | |
| setup: | |
| uses: $/.github/workflows/_setup.yml | |
| build_wheels: | |
| needs: [setup] | |
| name: Build spidev ${{ inputs.version || '3.8' }} ${{ matrix.python }}-${{ matrix.libc }}_riscv64 | |
| runs-on: ubuntu-24.04-riscv | |
| timeout-minutes: 60 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python: ["cp312", "cp313", "cp314", "cp314t"] | |
| libc: [manylinux, musllinux] | |
| steps: | |
| - name: Checkout spidev v${{ env.SPIDEV_VERSION }} | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| repository: doceme/py-spidev | |
| ref: v${{ env.SPIDEV_VERSION }} | |
| persist-credentials: false | |
| - uses: pypa/cibuildwheel@1828c10ab37f080699c7b81cea34097c684a7074 # v4.2.0 | |
| env: | |
| CIBW_ARCHS: riscv64 | |
| CIBW_BUILD: ${{ matrix.python }}-${{ matrix.libc }}_riscv64 | |
| CIBW_MANYLINUX_RISCV64_IMAGE: ${{ env.MANYLINUX_RISCV64_IMAGE }} | |
| CIBW_MUSLLINUX_RISCV64_IMAGE: ${{ env.MUSLLINUX_RISCV64_IMAGE }} | |
| # spidev_module.c pulls in linux/spi/spidev.h; manylinux already has | |
| # it via glibc-devel, musllinux's Alpine base needs linux-headers. | |
| CIBW_BEFORE_ALL_LINUX: (command -v apk && apk add linux-headers) || true | |
| # Upstream ships no CI and no test suite at all (it's a thin ioctl | |
| # wrapper around /dev/spidev*, which no CI runner has) - exercise the | |
| # compiled extension and the real open()/ioctl error path instead. | |
| CIBW_TEST_COMMAND: | | |
| python3 - <<'PYEOF' | |
| import spidev | |
| assert spidev.__file__.endswith(".so"), spidev.__file__ | |
| assert spidev.__version__ == "${{ env.SPIDEV_VERSION }}", spidev.__version__ | |
| spi = spidev.SpiDev() | |
| try: | |
| spi.open_path("/dev/spidev-does-not-exist") | |
| except OSError: | |
| pass | |
| else: | |
| raise SystemExit("expected OSError for a non-existent spidev device") | |
| PYEOF | |
| - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: spidev-${{ env.SPIDEV_VERSION }}-${{ matrix.python }}-${{ matrix.libc }}_riscv64 | |
| path: ./wheelhouse/*.whl | |
| if-no-files-found: error | |
| publish: | |
| name: Publish spidev ${{ inputs.version || '3.8' }} | |
| needs: [setup, build_wheels] | |
| permissions: | |
| contents: write | |
| pull-requests: write | |
| uses: $/.github/workflows/_publish-wheel.yml | |
| with: | |
| artifact-pattern: spidev-${{ inputs.version || '3.8' }}-*riscv64 |