name: Build and Test Python Wheels on: workflow_call: workflow_dispatch: defaults: run: shell: bash --noprofile --norc -euo pipefail {0} jobs: # Build wheels for all CUDA/Python combinations build-wheels: name: Build wheel (CUDA ${{ matrix.cuda }}, Python ${{ matrix.python }}) runs-on: ubuntu-latest 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: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build wheel run: | bash ci/build_pynvbench_wheel.sh -py-version ${{ matrix.python }} -cuda-version ${{ matrix.cuda }} - name: Upload wheel artifact uses: actions/upload-artifact@v4 with: name: wheel-pynvbench-cu${{ matrix.cuda }}-py${{ matrix.python }} path: wheelhouse/*.whl retention-days: 7 if-no-files-found: error # Test wheels for all CUDA/Python combinations 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-pynvbench-cu${{ matrix.cuda }}-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" else cuda_full_version="13.0.1" 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 }} \ rapidsai/ci-wheel:25.12-cuda${cuda_full_version}-rockylinux8-py${{ matrix.python }} \ /workspace/ci/test_pynvbench_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!"