chore(examples): restructure CUDA examples and add a GEMM example #68
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
name: CI on Linux | |
on: | |
# Trigger builds on pull requests | |
pull_request: | |
paths-ignore: | |
- "**.md" | |
# Trigger builds AND tests on push to main | |
push: | |
branches: | |
- main | |
paths-ignore: | |
- "**.md" | |
# Add manual trigger via Actions UI for running BOTH build and test | |
workflow_dispatch: | |
env: | |
RUST_LOG: info | |
RUST_BACKTRACE: 1 | |
jobs: | |
build: | |
name: Build / ${{ matrix.variance.name }} | |
runs-on: ubuntu-latest | |
container: | |
image: ${{ matrix.variance.image }} | |
strategy: | |
fail-fast: false | |
matrix: | |
variance: | |
# - name: Ubuntu-22.04/CUDA-11.8.0 | |
# image: "ghcr.io/rust-gpu/rust-cuda-ubuntu22-cuda11:latest" | |
- name: Ubuntu-22.04 / CUDA-12.8.1 | |
image: "ghcr.io/rust-gpu/rust-cuda-ubuntu22-cuda12:latest" | |
- name: Ubuntu-24.04 / CUDA-12.8.1 | |
image: "ghcr.io/rust-gpu/rust-cuda-ubuntu24-cuda12:latest" | |
- name: RockyLinux-9 / CUDA-12.8.1 | |
image: "ghcr.io/rust-gpu/rust-cuda-rockylinux9-cuda12:latest" | |
outputs: | |
# Output the result of the permission check | |
actor_has_write_permission: ${{ steps.check_access.outputs.require-result }} | |
# Output the build artifact details so the test job can use them | |
artifact_name: ${{ steps.artifact_details.outputs.name }} | |
artifact_path: ${{ steps.artifact_details.outputs.path }} | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Check access permissions | |
id: check_access | |
uses: actions-cool/check-user-permission@v2 | |
with: | |
require: write | |
username: ${{ github.triggering_actor }} | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Verify CUDA, Rust installation | |
run: | | |
nvcc --version | |
rustup show | |
- name: Load Rust cache | |
uses: Swatinem/rust-cache@v2 | |
with: | |
key: ${{ matrix.variance.name }}-${{ github.sha }} | |
- name: Rustfmt | |
run: cargo fmt --all -- --check | |
- name: Clippy | |
env: | |
RUSTFLAGS: -Dwarnings | |
run: cargo clippy --workspace --exclude "optix*" --exclude "path-tracer" --exclude "denoiser" --exclude "ex*" --exclude "cudnn*" | |
- name: Build all bindings | |
run: cargo build --all-features -p cust_raw | |
- name: Build workspace | |
run: cargo build --workspace --exclude "optix*" --exclude "path-tracer" --exclude "denoiser" --exclude "ex*" --exclude "cudnn*" | |
- name: Check documentation | |
env: | |
RUSTDOCFLAGS: -Dwarnings | |
run: cargo doc --workspace --all-features --document-private-items --no-deps --exclude "optix*" --exclude "path-tracer" --exclude "denoiser" --exclude "ex*" --exclude "cudnn*" --exclude "cust_raw" | |
- name: Prepare artifact details | |
id: artifact_details | |
run: | | |
SANITIZED_NAME=$(echo '${{ matrix.variance.name }}' | sed 's/[^a-zA-Z0-9.-]/-/g') | |
ARTIFACT_NAME="target_debug-${SANITIZED_NAME}-${{ github.run_id }}" | |
ARTIFACT_PATH="target/debug" | |
echo "name=${ARTIFACT_NAME}" >> $GITHUB_OUTPUT | |
echo "path=${ARTIFACT_PATH}" >> $GITHUB_OUTPUT | |
- name: Upload build artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ steps.artifact_details.outputs.name }} | |
path: ${{ steps.artifact_details.outputs.path }} | |
retention-days: 1 | |
test: | |
name: Test / ${{ matrix.variance.name }} | |
# Depends on the build job | |
needs: build | |
# Run ONLY IF: | |
# - The corresponding 'build' job succeeded AND | |
# - EITHER: | |
# - Event is 'push' to 'main' | |
# - OR Event is 'workflow_dispatch' | |
# - OR Event is 'pull_request' AND the 'actor_has_write_permission' output from build is 'true' | |
if: > | |
needs.build.result == 'success' && | |
( | |
(github.event_name == 'push' && github.ref == 'refs/heads/main') || | |
github.event_name == 'workflow_dispatch' || | |
(github.event_name == 'pull_request' && needs.build.outputs.actor_has_write_permission == 'true') | |
) | |
runs-on: ubuntu-latest | |
# Use the exact same container image as the build job | |
container: | |
image: ${{ matrix.variance.image }} | |
strategy: | |
# Save some credits | |
fail-fast: true | |
matrix: | |
variance: | |
# Must match the build job's matrix definition | |
# - name: Ubuntu-22.04 / CUDA-11.8.0 image: | |
# "ghcr.io/rust-gpu/rust-cuda-ubuntu22-cuda11:latest" | |
- name: Ubuntu-22.04 / CUDA-12.8.1 | |
image: "ghcr.io/rust-gpu/rust-cuda-ubuntu22-cuda12:latest" | |
- name: Ubuntu-24.04 / CUDA-12.8.1 | |
image: "ghcr.io/rust-gpu/rust-cuda-ubuntu24-cuda12:latest" | |
- name: RockyLinux-9 / CUDA-12.8.1 | |
image: "ghcr.io/rust-gpu/rust-cuda-rockylinux9-cuda12:latest" | |
steps: | |
- name: Download build artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
name: ${{ needs.build.outputs.artifact_name }} | |
path: ${{ needs.build.outputs.artifact_path }} | |
- name: List downloaded files | |
run: ls -lR ${{ needs.build.outputs.artifact_path }} | |
- name: Run remote tests | |
env: | |
MODAL_TOKEN_ID: ${{ secrets.MODAL_TOKEN_ID }} | |
MODAL_TOKEN_SECRET: ${{ secrets.MODAL_TOKEN_SECRET }} | |
run: | | |
echo "Stubbed out" |