diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..ca1fd89f --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,88 @@ +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 nvidia-cuda-toolkit 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 + + test_cpu: + runs-on: ubuntu-24.04 + name: Test with CPU + strategy: + matrix: + cargo-args: ['--workspace', '--workspace --no-default-features', '--release -- --ignored'] + 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 + - name: Test + run: cargo test ${{ matrix.cargo-args }} + - name: Show results (only for ignored tests) + run: test -f aggregation.csv && cat aggregation.csv || true + + # Enable these tests once there's a runner with a GPU. + #test_gpu: + # runs-on: ubuntu-24.04 + # name: Test + # env: + # # Build the kernel only for the single architecture that is used on CI. + # # This should reduce the overall compile-time significantly. + # RUST_GPU_TOOLS_CUDA_NVCC_ARGS: --fatbin --gpu-architecture=sm_75 --generate-code=arch=compute_75,code=sm_75 + # # These are needed for SupraSeal only, but it shouldn't do any harm for + # # the other cases. + # CC: gcc-12 + # CXX: g++-12 + # NVCC_PREPEND_FLAGS: "-ccbin /usr/bin/g++-12" + # strategy: + # matrix: + # include: + # - name: "Test OpenCL only" + # cargo-args: "--workspace --release --features opencl" + # framework: "" + # - name: "Test CUDA only" + # - cargo-args: "--release --features cuda" + # framework: "" + # - name: "Test CUDA/OpenCL (CUDA at run-time)" + # cargo-args: "--release --features cuda,opencl" + # framework: cuda + # - name: "Test CUDA/OpenCL (OpenCL at run-time)" + # cargo-args: "--release --features cuda,opencl" + # framework: cuda + # - name: "Test SupraSeal" + # cargo-args: "--release --features cuda-supraseal" + # framework: "" + # 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 + # - name: Test ${{ matrix.framework }} with ${{ matrix.cargo-args }} + # run: BELLMAN_GPU_FRAMEWORK=${{ matrix.framework }} cargo test ${{ matrix.cargo-args }}