Build and Test Python Wheels #2
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
| name: Build and Test Python Wheels | |
| on: | |
| workflow_call: | |
| workflow_dispatch: | |
| defaults: | |
| run: | |
| shell: bash --noprofile --norc -euo pipefail {0} | |
| jobs: | |
| build-wheels: | |
| name: Build wheel (Python ${{ matrix.python }}) | |
| runs-on: ubuntu-latest | |
| permissions: | |
| id-token: write | |
| contents: read | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python: ['3.10', '3.11', '3.12', '3.13'] | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| persist-credentials: false | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Build multi-CUDA wheel | |
| run: | | |
| bash ci/build_multi_cuda_wheel.sh -py-version ${{ matrix.python }} | |
| - name: Upload wheel artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: wheel-cuda_bench-py${{ matrix.python }} | |
| path: wheelhouse/*.whl | |
| retention-days: 7 | |
| if-no-files-found: error | |
| # Test wheels on all CUDA/Python combinations | |
| # Each wheel contains extensions for both CUDA 12 & 13, runtime detection picks the right one | |
| test-wheels: | |
| name: Test wheel (CUDA ${{ matrix.cuda }}, Python ${{ matrix.python }}) | |
| needs: build-wheels | |
| runs-on: linux-amd64-gpu-l4-latest-1 | |
| permissions: | |
| id-token: write | |
| contents: read | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| cuda: ['12', '13'] | |
| python: ['3.10', '3.11', '3.12', '3.13'] | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| persist-credentials: false | |
| - name: Download wheel artifact | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: wheel-cuda_bench-py${{ matrix.python }} | |
| path: wheelhouse | |
| - name: Test wheel | |
| run: | | |
| # Use the same rapidsai/ci-wheel Docker image as build | |
| if [[ "${{ matrix.cuda }}" == "12" ]]; then | |
| cuda_full_version="12.9.1" | |
| cuda_extra="cu12" | |
| else | |
| cuda_full_version="13.0.1" | |
| cuda_extra="cu13" | |
| fi | |
| docker run --rm \ | |
| --workdir /workspace \ | |
| --gpus all \ | |
| --mount type=bind,source=$(pwd),target=/workspace/ \ | |
| --env py_version=${{ matrix.python }} \ | |
| --env cuda_version=${{ matrix.cuda }} \ | |
| --env cuda_extra="${cuda_extra}" \ | |
| rapidsai/ci-wheel:25.12-cuda${cuda_full_version}-rockylinux8-py${{ matrix.python }} \ | |
| /workspace/ci/test_cuda_bench_inner.sh | |
| verify-workflow: | |
| name: Verify all builds and tests succeeded | |
| if: ${{ always() }} | |
| needs: | |
| - build-wheels | |
| - test-wheels | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Check build results | |
| run: | | |
| if [[ "${{ needs.build-wheels.result }}" != "success" ]]; then | |
| echo "Wheel builds failed!" | |
| exit 1 | |
| fi | |
| if [[ "${{ needs.test-wheels.result }}" != "success" ]]; then | |
| echo "Wheel tests failed!" | |
| exit 1 | |
| fi | |
| echo "All wheels built and tested successfully!" |