diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..3b4a3f58 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,89 @@ +name: CI + +on: [pull_request, push] + +# Cancel a job if there's a new on on the same branch started. +# Based on https://stackoverflow.com/questions/58895283/stop-already-running-workflow-job-in-github-actions/67223051#67223051 +concurrency: + group: ${{ github.ref }} + cancel-in-progress: true + +env: + CARGO_INCREMENTAL: 0 + RUST_BACKTRACE: 1 + # Faster crates.io index checkout. + CARGO_REGISTRIES_CRATES_IO_PROTOCOL: sparse + RUST_LOG: debug + +jobs: + check_clippy: + runs-on: ubuntu-24.04 + name: Clippy + steps: + - uses: actions/checkout@v4 + - name: Install required packages + run: sudo apt install --no-install-recommends --yes libhwloc-dev ocl-icd-opencl-dev + - name: Run cargo clippy + run: cargo clippy --all-targets --workspace -- -D warnings + + check_fmt: + runs-on: ubuntu-24.04 + name: Checking fmt + steps: + - uses: actions/checkout@v4 + - name: Run cargo fmt + run: cargo fmt --all -- --check + + build_gpu: + runs-on: ubuntu-24.04 + name: Build with various GPU support enabled + env: + RUST_LOG: trace + # Build the kernel only for the single architecture . This should reduce + # the overall compile-time significantly. + EC_GPU_CUDA_NVCC_ARGS: --fatbin --gpu-architecture=sm_75 --generate-code=arch=compute_75,code=sm_75 + BELLMAN_CUDA_NVCC_ARGS: --fatbin --gpu-architecture=sm_75 --generate-code=arch=compute_75,code=sm_75 + NEPTUNE_CUDA_NVCC_ARGS: --fatbin --gpu-architecture=sm_75 --generate-code=arch=compute_75,code=sm_75 + steps: + - uses: actions/checkout@v4 + - name: Install required packages + run: sudo apt install --no-install-recommends --yes libhwloc-dev nvidia-cuda-toolkit ocl-icd-opencl-dev + # Run clippy as apart of the test job as it also needs the nvidia toolkit + # in order to compile + - name: Run Clippy + run: cargo clippy --workspace -- -D warnings + - name: Build it + run: cargo build --verbose + + test_gpu: + runs-on: ubuntu-24.04 + name: Test on GPUs + env: + RUST_LOG: trace + # Build the kernel only for the single architecture . This should reduce + # the overall compile-time significantly. + EC_GPU_CUDA_NVCC_ARGS: --fatbin --gpu-architecture=sm_75 --generate-code=arch=compute_75,code=sm_75 + BELLMAN_CUDA_NVCC_ARGS: --fatbin --gpu-architecture=sm_75 --generate-code=arch=compute_75,code=sm_75 + NEPTUNE_CUDA_NVCC_ARGS: --fatbin --gpu-architecture=sm_75 --generate-code=arch=compute_75,code=sm_75 + steps: + - uses: actions/checkout@v4 + - name: Install required packages + run: sudo apt install --no-install-recommends --yes libhwloc-dev nvidia-cuda-toolkit ocl-icd-opencl-dev + # Run clippy as apart of the test job as it also needs the nvidia toolkit + # in order to compile + - name: Run Clippy + run: cargo clippy --workspace -- -D warnings + - name: Test with CUDA + run: cargo test --verbose + + test_macos: + runs-on: macos-latest + name: Test in release mode on MacOS + steps: + - uses: actions/checkout@v4 + - name: Install required packages + run: HOMEBREW_NO_AUTO_UPDATE=1 brew install hwloc + + - name: Run usual tests in release profile + # CUDA isn't support on MacOS, hence only enable OpenCL. + run: cargo test --verbose --release --no-default-features -- --nocapture