ci: open the nightly PRs as the riseproject-dev github app #20
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 | |
| --- | |
| # Based on the `build_wheels` job of | |
| # https://github.com/silx-kit/hdf5plugin/blob/7.0.0/.github/workflows/release.yml | |
| name: Build hdf5plugin wheels (riscv64) | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: 'Version glob to (re)build; empty builds every version of docs/packages/hdf5plugin.yaml not released yet' | |
| required: false | |
| default: '' | |
| pull_request: | |
| branches: [main] | |
| paths: | |
| - '.github/workflows/build-hdf5plugin.yml' | |
| - 'docs/packages/hdf5plugin.yaml' | |
| - 'patches/hdf5plugin/**' | |
| push: | |
| branches: [main] | |
| paths: | |
| - '.github/workflows/build-hdf5plugin.yml' | |
| - 'docs/packages/hdf5plugin.yaml' | |
| - 'patches/hdf5plugin/**' | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
| cancel-in-progress: true | |
| permissions: | |
| contents: read # to fetch code (actions/checkout) | |
| env: | |
| MANYLINUX_RISCV64_IMAGE: quay.io/pypa/manylinux_2_39_riscv64 | |
| jobs: | |
| setup: | |
| uses: $/.github/workflows/_setup.yml | |
| with: | |
| package: hdf5plugin | |
| version: ${{ inputs.version }} | |
| build_wheels: | |
| needs: [setup] | |
| if: needs.setup.outputs.versions != '[]' | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| version: ${{ fromJSON(needs.setup.outputs.versions) }} | |
| name: Build hdf5plugin ${{ matrix.version }} py3-none-manylinux_riscv64 | |
| runs-on: ubuntu-24.04-riscv | |
| timeout-minutes: 90 | |
| env: | |
| HDF5PLUGIN_VERSION: ${{ matrix.version }} | |
| steps: | |
| # lib/bitshuffle/zstd and two lib/snappy/third_party/ paths are gitlinks with | |
| # no corresponding .gitmodules entry upstream, which makes actions/checkout's | |
| # own persist-credentials cleanup (`git submodule foreach`) fail with "No url | |
| # found for submodule path"; plain git sidesteps that internal routine. | |
| - name: Checkout hdf5plugin v${{ env.HDF5PLUGIN_VERSION }} | |
| run: | | |
| set -euo pipefail | |
| shopt -s dotglob | |
| rm -rf ./* | |
| git init -q . | |
| git remote add origin https://github.com/silx-kit/hdf5plugin | |
| git fetch -q --depth=1 origin "v${{ env.HDF5PLUGIN_VERSION }}" | |
| git checkout -q FETCH_HEAD | |
| - name: Checkout python-wheels | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| path: python-wheels | |
| persist-credentials: false | |
| - name: Patch hdf5plugin source | |
| run: git apply python-wheels/patches/hdf5plugin/${{ env.HDF5PLUGIN_VERSION }}/*.patch | |
| - uses: pypa/cibuildwheel@1828c10ab37f080699c7b81cea34097c684a7074 # v4.2.0 | |
| with: | |
| output-dir: wheelhouse/ | |
| # setup.py's BDistWheel.get_tag() forces py3-none, so one build serves every interpreter. | |
| only: cp312-manylinux_riscv64 | |
| env: | |
| CIBW_MANYLINUX_RISCV64_IMAGE: ${{ env.MANYLINUX_RISCV64_IMAGE }} | |
| # Mirrors release.yml's non-x86 matrix entries (with_sse2: false): a portable | |
| # build with no host-native SIMD/OpenMP baked in. HDF5PLUGIN_BMI2 is left at | |
| # its default (True on Linux) -- zstd's BMI2 asm self-gates on __x86_64__, a | |
| # no-op here, same as upstream leaves it for ppc64le/aarch64. | |
| CIBW_ENVIRONMENT: >- | |
| PIP_EXTRA_INDEX_URL=https://pypi.riseproject.dev/simple/ | |
| PIP_ONLY_BINARY=numpy,h5py,blosc2 | |
| HDF5PLUGIN_OPENMP=False | |
| HDF5PLUGIN_NATIVE=False | |
| HDF5PLUGIN_SSE2=False | |
| HDF5PLUGIN_SSSE3=False | |
| HDF5PLUGIN_AVX2=False | |
| HDF5PLUGIN_AVX512=False | |
| HDF5PLUGIN_CPP11=True | |
| HDF5PLUGIN_CPP14=True | |
| HDF5PLUGIN_CPP20=True | |
| CIBW_BEFORE_TEST: pip install packaging h5py blosc2 --only-binary ":all:" | |
| CIBW_TEST_COMMAND: python {project}/test/test.py | |
| - name: Check wheel contents | |
| run: | | |
| python3 - wheelhouse/*.whl <<'EOF' | |
| import sys, zipfile | |
| names = zipfile.ZipFile(sys.argv[1]).namelist() | |
| plugins = {n.rsplit("/", 1)[1] for n in names | |
| if n.startswith("hdf5plugin/plugins/") and n.endswith(".so")} | |
| assert plugins == { | |
| "libh5blosc.so", | |
| "libh5blosc2.so", | |
| "libh5bshuf.so", | |
| "libh5bzip2.so", | |
| "libh5fcidecomp.so", | |
| "libh5lz4.so", | |
| "libh5sperr.so", | |
| "libh5sz.so", | |
| "libh5sz3.so", | |
| "libh5zfp.so", | |
| "libh5zstd.so", | |
| }, plugins | |
| licences = {n.split(".dist-info/licenses/", 1)[1] for n in names | |
| if ".dist-info/licenses/" in n and not n.endswith("/")} | |
| assert len(licences) == 35, licences | |
| EOF | |
| - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: hdf5plugin-${{ env.HDF5PLUGIN_VERSION }}-py3-none-manylinux_riscv64 | |
| path: wheelhouse/*.whl | |
| if-no-files-found: error | |
| publish: | |
| name: Publish hdf5plugin ${{ 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: hdf5plugin-${{ matrix.version }}-*-manylinux_riscv64 |