Skip to content

Remove CUDA 11 Dockerfile and related CI tasks. #465

Remove CUDA 11 Dockerfile and related CI tasks.

Remove CUDA 11 Dockerfile and related CI tasks. #465

Workflow file for this run

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: ${{ matrix.variance.runner }}
strategy:
fail-fast: false
matrix:
variance:
- name: Ubuntu-22.04 / CUDA-12.8.1 / x86_64
image: "ghcr.io/rust-gpu/rust-cuda-ubuntu22-cuda12:latest"
runner: ubuntu-latest
- name: Ubuntu-22.04 / CUDA-12.8.1 / ARM64
image: "ghcr.io/rust-gpu/rust-cuda-ubuntu22-cuda12:latest"
runner: ubuntu-22.04-arm
- name: Ubuntu-24.04 / CUDA-12.8.1 / x86_64
image: "ghcr.io/rust-gpu/rust-cuda-ubuntu24-cuda12:latest"
runner: ubuntu-latest
- name: Ubuntu-24.04 / CUDA-12.8.1 / ARM64
image: "ghcr.io/rust-gpu/rust-cuda-ubuntu24-cuda12:latest"
runner: ubuntu-24.04-arm
- name: RockyLinux-9 / CUDA-12.8.1 / x86_64
image: "ghcr.io/rust-gpu/rust-cuda-rockylinux9-cuda12:latest"
runner: ubuntu-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: Free up space
# Without this the job will likely run out of disk space.
run: |
df -h
# Remove Java
sudo rm -rf /usr/lib/jvm
# Remove .NET
sudo rm -rf /usr/share/dotnet
# Remove Swift
sudo rm -rf /usr/share/swift
# Remove Haskell
sudo rm -rf /usr/local/.ghcup
# Remove Julia
sudo rm -rf /usr/local/julia*
# Remove Android SDKs
sudo rm -rf /usr/local/lib/android
# Remove Chromium
sudo rm -rf /usr/local/share/chromium
# Remove Microsoft/Edge and Google Chrome builds
sudo rm -rf /opt/microsoft /opt/google
# Remove Azure CLI
sudo rm -rf /opt/az
# Remove PowerShell
sudo rm -rf /usr/local/share/powershell
# Remove CodeQL and other toolcaches
sudo rm -rf /opt/hostedtoolcache
docker system prune -af || true
docker builder prune -af || true
df -h
- 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: Pull build image
run: docker pull ${{ matrix.variance.image }}
- name: Record host UID/GID
run: |
echo "HOST_UID=$(id -u)" >> $GITHUB_ENV
echo "HOST_GID=$(id -g)" >> $GITHUB_ENV
- name: Set container name
run: echo "CONTAINER_NAME=ci-build-${{ github.run_id }}-${{ github.run_attempt }}-${{ matrix.variance.runner }}" >> $GITHUB_ENV
- name: Start build container
run: |
docker create --name "$CONTAINER_NAME" \
-v "$PWD":/workspace \
-w /workspace \
-e RUST_LOG \
-e RUST_BACKTRACE \
${{ matrix.variance.image }} \
sleep infinity
docker start "$CONTAINER_NAME"
- name: Verify CUDA, Rust installation
run: |
docker exec "$CONTAINER_NAME" bash -lc 'set -euo pipefail
nvcc --version
rustup show
'
- name: Rustfmt
run: |
docker exec "$CONTAINER_NAME" bash -lc 'set -euo pipefail
cargo fmt --all -- --check
'
- name: Build all bindings
run: |
docker exec "$CONTAINER_NAME" bash -lc 'set -euo pipefail
cargo build --all-features -p cust_raw
'
- name: Build workspace
run: |
docker exec "$CONTAINER_NAME" bash -lc 'set -euo pipefail
cargo build --workspace \
--exclude "optix*" \
--exclude "path-tracer" \
--exclude "denoiser" \
--exclude "ex0*" \
--exclude "cudnn*"
'
- name: Clippy
run: |
docker exec "$CONTAINER_NAME" bash -lc 'set -euo pipefail
export RUSTFLAGS=-Dwarnings
cargo clippy --workspace \
--exclude "optix*" \
--exclude "path-tracer" \
--exclude "denoiser" \
--exclude "ex0*" \
--exclude "cudnn*"
'
- name: Check documentation
run: |
docker exec "$CONTAINER_NAME" bash -lc 'set -euo pipefail
export RUSTDOCFLAGS=-Dwarnings
cargo doc --workspace --all-features --document-private-items --no-deps \
--exclude "optix*" \
--exclude "path-tracer" \
--exclude "denoiser" \
--exclude "ex0*" \
--exclude "cudnn*" \
--exclude "cust_raw"
'
- name: Normalize build artifacts ownership
run: |
docker exec "$CONTAINER_NAME" bash -lc "rm -rf /workspace/target/debug/incremental || true"
docker exec "$CONTAINER_NAME" bash -lc "chown -R ${HOST_UID}:${HOST_GID} /workspace/target || true"
- name: Stop build container
run: |
docker rm -f "$CONTAINER_NAME" || true
- 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: ${{ matrix.variance.runner }}
# 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-12.8.1 / x86_64
image: "ghcr.io/rust-gpu/rust-cuda-ubuntu22-cuda12:latest"
runner: ubuntu-latest
- name: Ubuntu-22.04 / CUDA-12.8.1 / ARM64
image: "ghcr.io/rust-gpu/rust-cuda-ubuntu22-cuda12:latest"
runner: ubuntu-22.04-arm
- name: Ubuntu-24.04 / CUDA-12.8.1 / x86_64
image: "ghcr.io/rust-gpu/rust-cuda-ubuntu24-cuda12:latest"
runner: ubuntu-latest
- name: Ubuntu-24.04 / CUDA-12.8.1 / ARM64
image: "ghcr.io/rust-gpu/rust-cuda-ubuntu24-cuda12:latest"
runner: ubuntu-24.04-arm
steps:
- name: Compute artifact name
id: test_artifact
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: Download build artifacts
uses: actions/download-artifact@v4
with:
name: ${{ steps.test_artifact.outputs.name }}
path: ${{ steps.test_artifact.outputs.path }}
- name: List downloaded files
run: ls -lR ${{ steps.test_artifact.outputs.path }}
- name: Run remote tests
env:
MODAL_TOKEN_ID: ${{ secrets.MODAL_TOKEN_ID }}
MODAL_TOKEN_SECRET: ${{ secrets.MODAL_TOKEN_SECRET }}
run: |
echo "Stubbed out"
compiletest:
name: Compile tests
runs-on: ubuntu-latest
container:
image: "ghcr.io/rust-gpu/rust-cuda-ubuntu24-cuda12:latest"
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Run cargo version
run: cargo --version
- name: Rustfmt compiletests
shell: bash
run: shopt -s globstar && rustfmt --check tests/compiletests/ui/**/*.rs
- name: Compiletest
run: cargo run -p compiletests --release --no-default-features -- --target-arch compute_61,compute_75,compute_90