Repository navigation
docs: Update projects #9
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/benfred/implicit/blob/0.7.3/.github/workflows/build.yml | |
| name: Build implicit wheels (riscv64) | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: 'Version glob to (re)build; empty builds every version of docs/packages/implicit.yaml not released yet' | |
| required: false | |
| default: '' | |
| pull_request: | |
| branches: [main] | |
| paths: | |
| - '.github/workflows/build-implicit.yml' | |
| - 'docs/packages/implicit.yaml' | |
| push: | |
| branches: [main] | |
| paths: | |
| - '.github/workflows/build-implicit.yml' | |
| - 'docs/packages/implicit.yaml' | |
| 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: implicit | |
| version: ${{ inputs.version }} | |
| build_wheels: | |
| needs: [setup] | |
| if: needs.setup.outputs.versions != '[]' | |
| name: Build implicit ${{ 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) }} | |
| # Matches upstream's own cp39-cp314 matrix, floored to our cp312. cp314t | |
| # is skipped here too: upstream's own pyproject.toml cibuildwheel `skip` | |
| # list excludes it ("*t-*") and its build.yml matrix never builds it. | |
| python: ["cp312", "cp313", "cp314"] | |
| env: | |
| IMPLICIT_VERSION: ${{ matrix.version }} | |
| steps: | |
| - name: Checkout implicit v${{ env.IMPLICIT_VERSION }} | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| repository: benfred/implicit | |
| ref: v${{ env.IMPLICIT_VERSION }} | |
| persist-credentials: false | |
| - name: Checkout python-wheels | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| path: python-wheels | |
| persist-credentials: false | |
| # libgomp's dynamic and guided schedules segfault on the riscv64 runners | |
| # (riseproject-dev/python-wheels#617, same defect as patches/lightgbm/4.7.0/0002-*); | |
| # static is unaffected. | |
| - name: Patch implicit source | |
| run: git apply python-wheels/patches/implicit/${{ env.IMPLICIT_VERSION }}/00*.patch | |
| - 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 }} | |
| CIBW_ENVIRONMENT: >- | |
| PIP_EXTRA_INDEX_URL=https://pypi.riseproject.dev/simple/ | |
| PIP_ONLY_BINARY=numpy,scipy,cython | |
| # Upstream's pyproject.toml sets repair-wheel-command="" globally, only | |
| # to avoid auditwheel vendoring CUDA libraries on manylinux_x86_64 (see | |
| # ci/install_cuda_13.sh, gated to that arch alone). No CUDA toolkit is | |
| # present on riscv64 - CMakeLists.txt's find_package(CUDAToolkit) simply | |
| # skips the GPU extension - so run the normal auditwheel repair here to | |
| # properly vendor libgomp (CMake links OpenMP automatically when found). | |
| CIBW_REPAIR_WHEEL_COMMAND: auditwheel repair -w {dest_dir} {wheel} | |
| CIBW_TEST_REQUIRES: pytest | |
| CIBW_TEST_ENVIRONMENT: >- | |
| PIP_EXTRA_INDEX_URL=https://pypi.riseproject.dev/simple/ | |
| PIP_ONLY_BINARY=numpy,scipy | |
| CIBW_TEST_COMMAND: >- | |
| python -c "import implicit.gpu; assert not implicit.gpu.HAS_CUDA" && | |
| python -m pytest {project}/tests | |
| - name: Check wheel contents | |
| run: | | |
| python3 - wheelhouse/*.whl <<'EOF' | |
| import sys, zipfile | |
| for path in sys.argv[1:]: | |
| names = zipfile.ZipFile(path).namelist() | |
| assert any(n.endswith(".so") for n in names), (path, names) | |
| licences = {n.rsplit("/", 1)[-1] for n in names | |
| if ".dist-info/licenses/" in n} - {""} | |
| assert licences == {"LICENSE"}, (path, licences) | |
| print(path, "ok") | |
| EOF | |
| - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: implicit-${{ env.IMPLICIT_VERSION }}-${{ matrix.python }}-manylinux_riscv64 | |
| path: wheelhouse/*.whl | |
| if-no-files-found: error | |
| gpl_sources: | |
| needs: [setup] | |
| if: needs.setup.outputs.versions != '[]' | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| version: ${{ fromJSON(needs.setup.outputs.versions) }} | |
| name: Collect GPL sources | |
| runs-on: ubuntu-24.04-riscv | |
| env: | |
| IMPLICIT_VERSION: ${{ matrix.version }} | |
| steps: | |
| - name: Checkout python-wheels | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| # CMake links OpenMP whenever find_package(OpenMP) succeeds (implicit's own | |
| # CMakeLists.txt has no way to disable it), so auditwheel repair above | |
| # vendors the image's libgomp into implicit.libs/. | |
| - uses: ./actions/collect-gpl-sources | |
| with: | |
| image: ${{ env.MANYLINUX_RISCV64_IMAGE }} | |
| packages: gcc | |
| output: gpl-sources.tar | |
| - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: implicit-${{ env.IMPLICIT_VERSION }}-gpl-sources | |
| path: gpl-sources.tar | |
| if-no-files-found: error | |
| publish: | |
| name: Publish implicit ${{ matrix.version }} | |
| needs: [setup, build_wheels, gpl_sources] | |
| 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: implicit-${{ matrix.version }}-*-manylinux_riscv64 | |
| gpl-sources-artifact: implicit-${{ matrix.version }}-gpl-sources | |
| gpl-sources-description: gcc |