docs: Update projects #39
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 mirrors the CMake flags VTK's own wheel CI passes in | |
| # https://gitlab.kitware.com/vtk/vtk/-/blob/v9.7.0/.gitlab/ci/configure_wheel.cmake | |
| # and the build recipe in .gitlab/os-linux.yml's .cmake_build_wheel_linux / | |
| # .cmake_test_wheel_linux job templates (CMake + setup.py bdist_wheel, not | |
| # cibuildwheel or scikit-build). | |
| name: Build vtk wheels (riscv64) | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: 'Version glob to (re)build; empty builds every version of docs/packages/vtk.yaml not released yet' | |
| required: false | |
| default: '' | |
| pull_request: | |
| branches: [main] | |
| paths: | |
| - '.github/workflows/build-vtk.yml' | |
| - 'docs/packages/vtk.yaml' | |
| push: | |
| branches: [main] | |
| paths: | |
| - '.github/workflows/build-vtk.yml' | |
| - 'docs/packages/vtk.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: vtk | |
| version: ${{ inputs.version }} | |
| build_wheels: | |
| needs: [setup] | |
| if: needs.setup.outputs.versions != '[]' | |
| name: Build vtk ${{ matrix.version }} ${{ matrix.python }}-manylinux_riscv64 | |
| runs-on: ubuntu-24.04-riscv | |
| timeout-minutes: 2880 # 48h: these runners have 4 cores, and a prior attempt was only | |
| # ~42% through the ninja build (5095/12192 steps) after 7.5h - | |
| # not hung, just a very large tree at this core count (same | |
| # reasoning as build-nodejs-wheel-binaries.yml's 48h). | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| version: ${{ fromJSON(needs.setup.outputs.versions) }} | |
| # VTK is not abi3 (VTK_WRAP_PYTHON links directly against Python.h): upstream | |
| # publishes one wheel per interpreter, rebuilding the whole tree each time. | |
| python: ["cp312", "cp313", "cp314", "cp314t"] | |
| env: | |
| VTK_VERSION: ${{ matrix.version }} | |
| steps: | |
| - name: Checkout VTK v${{ env.VTK_VERSION }} | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| repository: Kitware/VTK | |
| ref: v${{ env.VTK_VERSION }} | |
| submodules: false | |
| persist-credentials: false | |
| # Same OOM guard build-deltalake.yml/build-polars-runtime.yml need on these | |
| # 4-core runners for other comparably large builds. | |
| - name: Set swap space | |
| uses: pierotofy/set-swap-space@fc79b3f67fa8a838184ce84a674ca12238d2c761 # master | |
| with: | |
| swap-size-gb: 10 | |
| - name: Write container script | |
| run: | | |
| mkdir -p build | |
| cat > riscv64-build-and-test.sh <<'EOF' | |
| #!/bin/bash | |
| set -e -x | |
| case "${PYTHON_TAG}" in | |
| *t) python_dir="/opt/python/${PYTHON_TAG%t}-${PYTHON_TAG}/bin" ;; | |
| *) python_dir="/opt/python/${PYTHON_TAG}-${PYTHON_TAG}/bin" ;; | |
| esac | |
| python_exe="${python_dir}/python" | |
| case "$1" in | |
| build) | |
| dnf install -y --setopt=install_weak_deps=False ninja-build libX11-devel libXcursor-devel | |
| # Mirrors .gitlab/ci/configure_wheel.cmake's own -D flags directly rather than | |
| # including its configure_common.cmake tail: that file is upstream's *stock CI* | |
| # config (VTK_BUILD_TESTING, VTK_LINKER_FATAL_WARNINGS ON, ...) meant to catch | |
| # regressions on platforms Kitware already supports, not something that should | |
| # decide whether a first-ever riscv64 build succeeds. VTK_BUILD_ALL_MODULES=ON | |
| # is kept: it's what makes the built tree match the real, full "vtk" wheel. | |
| cmake_args=( | |
| -DCMAKE_BUILD_TYPE=Release | |
| -DCMAKE_INSTALL_PREFIX=/build/install | |
| -DCMAKE_SKIP_INSTALL_ALL_DEPENDENCY=ON | |
| -DVTK_BUILD_ALL_MODULES=ON | |
| -DVTK_BUILD_TESTING=OFF | |
| -DVTK_BUILD_EXAMPLES=OFF | |
| -DVTK_WHEEL_BUILD=ON | |
| -DVTK_INSTALL_SDK=ON | |
| -DVTK_ENABLE_REMOTE_MODULES=OFF | |
| -DVTK_DEBUG_LEAKS=OFF | |
| -DVTK_BUILD_PYI_FILES=ON | |
| -DVTK_USE_PCH=OFF | |
| -DVTK_GROUP_ENABLE_Qt=NO | |
| -DVTK_MODULE_ENABLE_VTK_CommonArchive=NO | |
| -DVTK_MODULE_ENABLE_VTK_DomainsMicroscopy=NO | |
| -DVTK_MODULE_ENABLE_VTK_FiltersONNX=NO | |
| -DVTK_MODULE_ENABLE_VTK_FiltersOpenTURNS=NO | |
| -DVTK_MODULE_ENABLE_VTK_FiltersReebGraph=NO | |
| -DVTK_MODULE_ENABLE_VTK_IOADIOS2=NO | |
| -DVTK_MODULE_ENABLE_VTK_IOAlembic=NO | |
| -DVTK_MODULE_ENABLE_VTK_IOFFMPEG=NO | |
| -DVTK_MODULE_ENABLE_VTK_IOGDAL=NO | |
| -DVTK_MODULE_ENABLE_VTK_IOLAS=NO | |
| -DVTK_MODULE_ENABLE_VTK_IOMySQL=NO | |
| -DVTK_MODULE_ENABLE_VTK_IONanoVDB=NO | |
| -DVTK_MODULE_ENABLE_VTK_IOODBC=NO | |
| -DVTK_MODULE_ENABLE_VTK_IOOpenVDB=NO | |
| -DVTK_MODULE_ENABLE_VTK_IOPDAL=NO | |
| -DVTK_MODULE_ENABLE_VTK_IOPostgreSQL=NO | |
| -DVTK_MODULE_ENABLE_VTK_InfovisBoost=NO | |
| -DVTK_MODULE_ENABLE_VTK_InfovisBoostGraphAlgorithms=NO | |
| -DVTK_MODULE_ENABLE_VTK_RenderingFreeTypeFontConfig=NO | |
| -DVTK_MODULE_ENABLE_VTK_RenderingOpenVR=NO | |
| -DVTK_MODULE_ENABLE_VTK_RenderingOpenXR=NO | |
| -DVTK_MODULE_ENABLE_VTK_RenderingZSpace=NO | |
| # configure_options.cmake (pulled in by the configure_common.cmake tail we | |
| # skip) resolves both of these to NO unless CMAKE_CONFIGURATION contains | |
| # "ospray"/"helide" - true for upstream's real wheel jobs too, but ENABLE | |
| # defaults to YES under VTK_BUILD_ALL_MODULES and hard-fails configure | |
| # when the external anari/ospray package isn't found. | |
| -DVTK_MODULE_ENABLE_VTK_RenderingAnari=NO | |
| -DVTK_MODULE_ENABLE_VTK_RenderingRayTracing=NO | |
| -DVTK_MODULE_ENABLE_VTK_conduit=NO | |
| -DVTK_MODULE_ENABLE_VTK_fides=NO | |
| -DVTK_MODULE_ENABLE_VTK_xdmf3=NO | |
| -DVTK_MODULE_ENABLE_VTK_IOOCCT=NO | |
| -DVTK_MODULE_ENABLE_VTK_IOIFC=NO | |
| -DVTK_MODULE_ENABLE_VTK_IOUSD=NO | |
| -DVTK_ENABLE_CATALYST=OFF | |
| # riscv64 has no SIMD kernel in vendored libjpeg-turbo (ThirdParty/jpeg); | |
| # upstream's default ON hard-fails configure when SIMD compilation | |
| # isn't available for CMAKE_SYSTEM_PROCESSOR. | |
| -DVTK_JPEG_ENABLE_SIMD=OFF | |
| -DPython3_EXECUTABLE="${python_exe}" | |
| -DPython3_FIND_STRATEGY=LOCATION | |
| # CMake/vtkWheelPreparation.cmake defaults this to "dev0" and only | |
| # skips it when $CI_COMMIT_TAG is set - upstream's own GitLab CI | |
| # sets that for tag-triggered pipelines, but we build on GitHub | |
| # Actions from the exact v9.7.0 tag with a clean tree, so without | |
| # this override every wheel gets versioned 9.7.0.dev0 instead. | |
| -DVTK_VERSION_SUFFIX= | |
| ) | |
| case "${PYTHON_TAG}" in | |
| *t) cmake_args+=(-DVTK_MODULE_ENABLE_VTK_IONetCDF=NO) ;; | |
| esac | |
| cmake -S /vtk -B /build -GNinja "${cmake_args[@]}" | |
| # Mirrors ctest_build.cmake: a plain build (default target "all") first, | |
| # then install as its own build invocation - ninja's install edge here | |
| # doesn't transitively pull in every module's compile edge (e.g. | |
| # libvtkWrappingTools.so) when targeted directly. | |
| cmake --build /build --parallel "$(nproc)" | |
| cmake --build /build --target install --parallel "$(nproc)" | |
| cd /build | |
| "${python_exe}" -m pip install -U setuptools wheel | |
| "${python_exe}" setup.py bdist_wheel | |
| auditwheel show dist/*.whl | |
| auditwheel repair -w /build/wheelhouse dist/*.whl | |
| ;; | |
| test) | |
| "${python_exe}" -m venv /tmp/venv | |
| . /tmp/venv/bin/activate | |
| pip install -U pip | |
| pip install /build/wheelhouse/*.whl | |
| python -c "import vtk" | |
| python -m vtkmodules.generate_pyi --test -p vtkmodules | |
| ;; | |
| *) | |
| echo "usage: $0 <build|test>" >&2 | |
| exit 1 | |
| ;; | |
| esac | |
| EOF | |
| - name: Build wheel | |
| run: | | |
| podman run -t \ | |
| --log-driver=none \ | |
| --network=host \ | |
| -v "${PWD}":/vtk \ | |
| -v "${PWD}/build":/build \ | |
| --workdir /vtk \ | |
| -e PYTHON_TAG="${{ matrix.python }}" \ | |
| --pull=newer \ | |
| "${MANYLINUX_RISCV64_IMAGE}" \ | |
| bash /vtk/riscv64-build-and-test.sh build | |
| - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: vtk-${{ env.VTK_VERSION }}-${{ matrix.python }}-manylinux_riscv64 | |
| path: build/wheelhouse/*.whl | |
| if-no-files-found: error | |
| - name: Test wheel | |
| run: | | |
| podman run -t \ | |
| --log-driver=none \ | |
| --network=host \ | |
| -v "${PWD}":/vtk \ | |
| -v "${PWD}/build":/build \ | |
| --workdir /vtk \ | |
| -e PYTHON_TAG="${{ matrix.python }}" \ | |
| -e PIP_EXTRA_INDEX_URL=https://pypi.riseproject.dev/simple/ \ | |
| "${MANYLINUX_RISCV64_IMAGE}" \ | |
| bash /vtk/riscv64-build-and-test.sh test | |
| publish: | |
| name: Publish vtk ${{ 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 | |
| with: | |
| artifact-pattern: vtk-${{ matrix.version }}-*-manylinux_riscv64 |