Build mmcif wheels (riscv64) #3
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 upstream's own cibuildwheel config: | |
| # https://github.com/rcsb/py-mmcif/blob/5e030c223d93e0311a9133672d1c35992b271281/pyproject.toml | |
| name: Build mmcif wheels (riscv64) | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: 'mmcif version to build (e.g. 1.1.1)' | |
| required: true | |
| default: '1.1.1' | |
| pull_request: | |
| paths: | |
| - '.github/workflows/build-mmcif.yml' | |
| - 'patches/mmcif/**' | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ inputs.version || '1.1.1' }}-${{ github.head_ref || github.run_id }} | |
| cancel-in-progress: true | |
| permissions: | |
| contents: read # to fetch code (actions/checkout) | |
| env: | |
| # `inputs.version` is empty on pull_request events; default to 1.1.1 there. | |
| MMCIF_VERSION: ${{ inputs.version || '1.1.1' }} | |
| # Upstream cuts PyPI releases without pushing a git tag; this is the merge | |
| # commit whose tree is byte-identical to the 1.1.1 sdist (mmcif/__init__.py's | |
| # __version__ matches, 18 minutes before the sdist upload). Update alongside | |
| # MMCIF_VERSION. | |
| MMCIF_REF: 5e030c223d93e0311a9133672d1c35992b271281 | |
| MANYLINUX_RISCV64_IMAGE: quay.io/pypa/manylinux_2_39_riscv64 | |
| jobs: | |
| setup: | |
| uses: $/.github/workflows/_setup.yml | |
| build_wheels: | |
| needs: [setup] | |
| name: Build mmcif ${{ inputs.version || '1.1.1' }} ${{ 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 py-mmcif ${{ env.MMCIF_VERSION }} | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| repository: rcsb/py-mmcif | |
| ref: ${{ env.MMCIF_REF }} | |
| # The C++ core (parser, tables, regex) and pybind11 are git submodules; | |
| # the released sdist bundles them (README's own clone instructions use | |
| # --recurse-submodules). | |
| submodules: recursive | |
| persist-credentials: false | |
| - name: Checkout python-wheels | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| path: python-wheels | |
| persist-credentials: false | |
| - name: Patch mmcif source | |
| run: git apply python-wheels/patches/mmcif/${{ env.MMCIF_VERSION }}/*.patch | |
| - name: Build and test wheel | |
| 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 }} | |
| - name: Check the extension made it into the wheel | |
| run: | | |
| python3 - wheelhouse/*.whl <<'EOF' | |
| import sys, zipfile | |
| for whl in sys.argv[1:]: | |
| names = zipfile.ZipFile(whl).namelist() | |
| assert any(n.startswith("mmcif/core/mmciflib") and n.endswith(".so") for n in names), names | |
| assert any(n.endswith(".dist-info/licenses/LICENSE") for n in names), names | |
| print(whl, "ok") | |
| EOF | |
| - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: mmcif-${{ env.MMCIF_VERSION }}-${{ matrix.python }}-manylinux_riscv64 | |
| path: wheelhouse/*.whl | |
| if-no-files-found: error | |
| publish: | |
| name: Publish mmcif ${{ inputs.version || '1.1.1' }} | |
| needs: [setup, build_wheels] | |
| permissions: | |
| contents: write | |
| pull-requests: write | |
| uses: $/.github/workflows/_publish-wheel.yml | |
| with: | |
| artifact-pattern: mmcif-${{ inputs.version || '1.1.1' }}-*-manylinux_riscv64 |