docs: Update projects #17
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 the `build_wheels` job of | |
| # https://github.com/seung-lab/DracoPy/blob/2.0.0/.github/workflows/build_aarch64.yml | |
| name: Build dracopy wheels (riscv64) | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: 'Version glob to (re)build; empty builds every version of docs/packages/dracopy.yaml not released yet' | |
| required: false | |
| default: '' | |
| pull_request: | |
| branches: [main] | |
| paths: | |
| - '.github/workflows/build-dracopy.yml' | |
| - 'docs/packages/dracopy.yaml' | |
| push: | |
| branches: [main] | |
| paths: | |
| - '.github/workflows/build-dracopy.yml' | |
| - 'docs/packages/dracopy.yaml' | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
| cancel-in-progress: true | |
| permissions: | |
| contents: read # to fetch code (actions/checkout) | |
| env: | |
| # Upstream never tagged the 2.1.0 release; e6b3449 is master's tip, proven | |
| # byte-identical to the PyPI 2.1.0 sdist. Move together. | |
| DRACOPY_REF: e6b344903e58cc0f080675c652b6ea9bd2d72462 | |
| MANYLINUX_RISCV64_IMAGE: quay.io/pypa/manylinux_2_39_riscv64 | |
| jobs: | |
| setup: | |
| uses: $/.github/workflows/_setup.yml | |
| with: | |
| package: dracopy | |
| version: ${{ inputs.version }} | |
| build_wheels: | |
| needs: [setup] | |
| if: needs.setup.outputs.versions != '[]' | |
| name: Build dracopy ${{ matrix.version }} ${{ matrix.python }}-manylinux_riscv64 | |
| runs-on: ubuntu-24.04-riscv | |
| timeout-minutes: 90 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| version: ${{ fromJSON(needs.setup.outputs.versions) }} | |
| python: | |
| - "cp312" | |
| - "cp313" | |
| - "cp314" | |
| - "cp314t" | |
| env: | |
| DRACOPY_VERSION: ${{ matrix.version }} | |
| steps: | |
| - name: Checkout DracoPy ${{ env.DRACOPY_VERSION }} | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| repository: seung-lab/DracoPy | |
| ref: ${{ env.DRACOPY_REF }} | |
| # Google's Draco mesh compression library is a submodule and is | |
| # statically linked (libdraco.a) into the DracoPy extension. | |
| submodules: recursive | |
| 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 }} | |
| # Mirrors upstream's own CIBW_BEFORE_BUILD (build_aarch64.yml); the | |
| # submodule is already present via `submodules: recursive` above, so | |
| # the `git submodule` calls upstream runs here are dropped. cmake and | |
| # cython are setup.py setup_requires, not pyproject.toml build-system | |
| # requires, so they need to already be importable/on PATH before | |
| # setup.py runs, isolated build or not. | |
| CIBW_BEFORE_BUILD: pip install "cmake>=3.30.2" cython numpy scikit-build setuptools wheel | |
| # numpy and cmake have riscv64 wheels only on our registry. | |
| CIBW_ENVIRONMENT: PIP_EXTRA_INDEX_URL=https://pypi.riseproject.dev/simple/ | |
| CIBW_TEST_REQUIRES: pytest numpy | |
| CIBW_TEST_SOURCES: tests.py pytest.ini testdata_files | |
| CIBW_TEST_COMMAND: cd {project} && python -m pytest -v tests.py | |
| # numpy has no riscv64 wheel on public PyPI; keep pip on our registry's copy. | |
| CIBW_TEST_ENVIRONMENT: PIP_ONLY_BINARY=numpy | |
| - name: Check wheel contents | |
| run: | | |
| python3 - wheelhouse/*.whl <<'EOF' | |
| import sys, zipfile | |
| path = sys.argv[1] | |
| names = zipfile.ZipFile(path).namelist() | |
| exts = [n for n in names if n.endswith(".so")] | |
| assert exts and all("DracoPy" in n for n in exts), exts | |
| licences = {n.split(".dist-info/licenses/", 1)[1] for n in names | |
| if ".dist-info/licenses/" in n and not n.endswith("/")} | |
| assert licences == {"LICENSE"}, licences | |
| EOF | |
| - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: dracopy-${{ env.DRACOPY_VERSION }}-${{ matrix.python }}-manylinux_riscv64 | |
| path: wheelhouse/*.whl | |
| if-no-files-found: error | |
| publish: | |
| name: Publish dracopy ${{ matrix.version }} | |
| needs: [setup, build_wheels] | |
| if: needs.setup.outputs.versions != '[]' | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| version: ${{ fromJSON(needs.setup.outputs.versions) }} | |
| permissions: | |
| contents: write | |
| pull-requests: write | |
| uses: $/.github/workflows/_publish-wheel.yml | |
| secrets: | |
| app-private-key: ${{ secrets.RISEPROJECT_APP_PRIVATE_KEY }} | |
| with: | |
| artifact-pattern: dracopy-${{ matrix.version }}-*-manylinux_riscv64 |