make the existing test workflow reusable to set the stage #82
Workflow file for this run
This file contains 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
# Note: This name is referred to in the test job, so make sure any changes are sync'd up! | |
name: "CI: Build and test" | |
concurrency: | |
group: ${{ github.workflow }}-${{ | |
github.ref_name == 'main' && format('ci-main-build-test-{0}', github.run_id) || | |
format('ci-pr-build-test-on-{0}-against-branch-{1}', github.event_name, github.ref_name) | |
}} | |
cancel-in-progress: true | |
on: | |
push: | |
branches: | |
- "pull-request/[0-9]+" | |
- "main" | |
jobs: | |
build: | |
strategy: | |
fail-fast: false | |
matrix: | |
host-platform: | |
- linux-64 | |
- linux-aarch64 | |
- win-64 | |
python-version: | |
- "3.13" | |
- "3.12" | |
- "3.11" | |
- "3.10" | |
- "3.9" | |
cuda-version: | |
# Note: this is for build-time only. | |
- "12.6.2" | |
name: Build (${{ matrix.host-platform }}, Python ${{ matrix.python-version }}, CUDA ${{ matrix.cuda-version }}) | |
if: ${{ github.repository_owner == 'nvidia' }} | |
permissions: | |
id-token: write # This is required for configure-aws-credentials | |
contents: read # This is required for actions/checkout | |
runs-on: ${{ (matrix.host-platform == 'linux-64' && 'linux-amd64-cpu8') || | |
(matrix.host-platform == 'linux-aarch64' && 'linux-arm64-cpu8') || | |
(matrix.host-platform == 'win-64' && 'windows-2019') }} | |
# (matrix.host-platform == 'win-64' && 'windows-amd64-cpu8') }} | |
outputs: | |
BUILD_CTK_VER: ${{ steps.pass_env.outputs.CUDA_VERSION }} | |
defaults: | |
run: | |
shell: bash --noprofile --norc -xeuo pipefail {0} | |
steps: | |
- name: Checkout ${{ github.event.repository.name }} | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
# WAR: setup-python is not relocatable... | |
# see https://github.com/actions/setup-python/issues/871 | |
- name: Set up Python ${{ matrix.python-version }} | |
if: ${{ startsWith(matrix.host-platform, 'linux') }} | |
id: setup-python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.12" | |
- name: Set up MSVC | |
if: ${{ startsWith(matrix.host-platform, 'win') }} | |
uses: ilammy/msvc-dev-cmd@v1 | |
- name: Set environment variables | |
run: | | |
PYTHON_VERSION_FORMATTED=$(echo '${{ matrix.python-version }}' | tr -d '.') | |
if [[ "${{ matrix.host-platform }}" == linux* ]]; then | |
CIBW_BUILD="cp${PYTHON_VERSION_FORMATTED}-manylinux*" | |
REPO_DIR=$(pwd) | |
elif [[ "${{ matrix.host-platform }}" == win* ]]; then | |
CIBW_BUILD="cp${PYTHON_VERSION_FORMATTED}-win_amd64" | |
PWD=$(pwd) | |
REPO_DIR=$(cygpath -w $PWD) | |
fi | |
echo "PARALLEL_LEVEL=$(nproc)" >> $GITHUB_ENV | |
CUDA_CORE_ARTIFACT_BASENAME="cuda-core-python${PYTHON_VERSION_FORMATTED}-${{ matrix.host-platform }}" | |
echo "CUDA_CORE_ARTIFACT_BASENAME=${CUDA_CORE_ARTIFACT_BASENAME}" >> $GITHUB_ENV | |
echo "CUDA_CORE_ARTIFACT_NAME=${CUDA_CORE_ARTIFACT_BASENAME}-${{ github.sha }}" >> $GITHUB_ENV | |
echo "CUDA_CORE_ARTIFACTS_DIR=$(realpath "$REPO_DIR/cuda_core/dist")" >> $GITHUB_ENV | |
CUDA_BINDINGS_ARTIFACT_BASENAME="cuda-bindings-python${PYTHON_VERSION_FORMATTED}-cuda${{ matrix.cuda-version }}-${{ matrix.host-platform }}" | |
echo "CUDA_BINDINGS_ARTIFACT_BASENAME=${CUDA_BINDINGS_ARTIFACT_BASENAME}" >> $GITHUB_ENV | |
echo "CUDA_BINDINGS_ARTIFACT_NAME=${CUDA_BINDINGS_ARTIFACT_BASENAME}-${{ github.sha }}" >> $GITHUB_ENV | |
echo "CUDA_BINDINGS_ARTIFACTS_DIR=$(realpath "$REPO_DIR/cuda_bindings/dist")" >> $GITHUB_ENV | |
echo "CIBW_BUILD=${CIBW_BUILD}" >> $GITHUB_ENV | |
- name: Dump environment | |
run: | | |
env | |
- name: Build cuda.core wheel | |
uses: pypa/[email protected] | |
env: | |
CIBW_BUILD: ${{ env.CIBW_BUILD }} | |
CIBW_ARCHS_LINUX: "native" | |
CIBW_BUILD_VERBOSITY: 1 | |
with: | |
package-dir: ./cuda_core/ | |
output-dir: ${{ env.CUDA_CORE_ARTIFACTS_DIR }} | |
- name: List the cuda.core artifacts directory | |
run: | | |
if [[ "${{ matrix.host-platform }}" == win* ]]; then | |
export CHOWN=chown | |
else | |
export CHOWN="sudo chown" | |
fi | |
$CHOWN -R $(whoami) ${{ env.CUDA_CORE_ARTIFACTS_DIR }} | |
ls -lahR ${{ env.CUDA_CORE_ARTIFACTS_DIR }} | |
- name: Check cuda.core wheel | |
run: | | |
pip install twine | |
twine check ${{ env.CUDA_CORE_ARTIFACTS_DIR }}/*.whl | |
- name: Upload cuda.core build artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.CUDA_CORE_ARTIFACT_NAME }} | |
path: ${{ env.CUDA_CORE_ARTIFACTS_DIR }}/*.whl | |
if-no-files-found: error | |
overwrite: 'true' | |
- name: Set up mini CTK | |
uses: ./.github/actions/fetch_ctk | |
continue-on-error: false | |
with: | |
host-platform: ${{ matrix.host-platform }} | |
cuda-version: ${{ matrix.cuda-version }} | |
- name: Build cuda.bindings wheel | |
uses: pypa/[email protected] | |
env: | |
CIBW_BUILD: ${{ env.CIBW_BUILD }} | |
CIBW_ARCHS_LINUX: "native" | |
CIBW_BUILD_VERBOSITY: 1 | |
# CIBW mounts the host filesystem under /host | |
CIBW_ENVIRONMENT_LINUX: > | |
CUDA_PATH=/host/${{ env.CUDA_PATH }} | |
PARALLEL_LEVEL=${{ env.PARALLEL_LEVEL }} | |
CIBW_ENVIRONMENT_WINDOWS: > | |
CUDA_HOME="$(cygpath -w ${{ env.CUDA_PATH }})" | |
# PARALLEL_LEVEL=${{ env.PARALLEL_LEVEL }} | |
with: | |
package-dir: ./cuda_bindings/ | |
output-dir: ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }} | |
- name: List the cuda.bindings artifacts directory | |
run: | | |
if [[ "${{ matrix.host-platform }}" == win* ]]; then | |
export CHOWN=chown | |
else | |
export CHOWN="sudo chown" | |
fi | |
$CHOWN -R $(whoami) ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }} | |
ls -lahR ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }} | |
# TODO: enable this after NVIDIA/cuda-python#297 is resolved | |
# - name: Check cuda.bindings wheel | |
# run: | | |
# twine check ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }}/*.whl | |
- name: Upload cuda.bindings build artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.CUDA_BINDINGS_ARTIFACT_NAME }} | |
path: ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }}/*.whl | |
if-no-files-found: error | |
overwrite: 'true' | |
- name: Pass environment variables to the next runner | |
id: pass_env | |
run: | | |
echo "CUDA_VERSION=${{ matrix.cuda-version }}" >> $GITHUB_OUTPUT | |
test: | |
strategy: | |
fail-fast: false | |
# TODO: add driver version here | |
matrix: | |
host-platform: | |
- linux-64 | |
- linux-aarch64 | |
# TODO: enable testing once win-64 GPU runners are up | |
# - win-64 | |
python-version: | |
- "3.13" | |
- "3.12" | |
- "3.11" | |
- "3.10" | |
- "3.9" | |
cuda-version: | |
# Note: this is for test-time only. | |
- "12.6.2" | |
- "12.0.1" | |
- "11.8.0" | |
runner: | |
- default | |
include: | |
- host-platform: linux-64 | |
python-version: "3.12" | |
cuda-version: "12.6.2" | |
runner: H100 | |
name: Test (${{ matrix.host-platform }}, Python ${{ matrix.python-version }}, CUDA ${{ matrix.cuda-version }}, Runner ${{ matrix.runner }}) | |
# The build stage could fail but we want the CI to keep moving. | |
if: ${{ github.repository_owner == 'nvidia' && !cancelled() }} | |
permissions: | |
contents: read # This is required for actions/checkout | |
needs: | |
- build | |
secrets: inherit | |
uses: | |
./.github/workflows/test_local_ctk.yml | |
with: | |
host-platform: ${{ matrix.host-platform }} | |
python-version: ${{ matrix.python-version }} | |
build_ctk_ver: ${{ needs.build.outputs.BUILD_CTK_VER }} | |
cuda-version: ${{ matrix.cuda-version }} | |
runner: ${{ matrix.runner }} | |
doc: | |
name: Docs | |
# The build stage could fail but we want the CI to keep moving. | |
if: ${{ github.repository_owner == 'nvidia' && !cancelled() }} | |
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages | |
permissions: | |
id-token: write | |
contents: write | |
needs: | |
- build | |
secrets: inherit | |
uses: | |
./.github/workflows/build-docs.yml | |
with: | |
build_ctk_ver: ${{ needs.build.outputs.BUILD_CTK_VER }} |