name: Rust CI
on:
push:
branches: [ "master", "pre-release" ]
pull_request:
branches: [ "master" ]
permissions:
contents: read
env:
CARGO_TERM_COLOR: always
jobs:
test:
name: Test on ${{ matrix.os }} (Shard ${{ matrix.shard }}/4)
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
rust: [stable]
shard: [1, 2, 3, 4]
steps:
- uses: actions/checkout@v4
- name: Install NASM
if: runner.os == 'Windows'
uses: ilammy/setup-nasm@72793074d3c8cdda771dba85f6deafe00623038b
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@b3b07ba8b418998c39fb20f53e8b695cdcc8de1b with:
toolchain: ${{ matrix.rust }}
- name: Cache dependencies
uses: actions/cache@v3
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: ${{ runner.os }}-cargo-tests-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-tests-
- name: Install matrix-runner
shell: bash
run: |
if [[ "${{ runner.os }}" == "Linux" ]]; then
URL="https://github.com/ShaoG-R/matrix-runner/releases/latest/download/matrix-runner-linux-amd64"
FILENAME="matrix-runner"
elif [[ "${{ runner.os }}" == "Windows" ]]; then
URL="https://github.com/ShaoG-R/matrix-runner/releases/latest/download/matrix-runner-windows-amd64.exe"
FILENAME="matrix-runner.exe"
elif [[ "${{ runner.os }}" == "macOS" ]]; then
URL="https://github.com/ShaoG-R/matrix-runner/releases/latest/download/matrix-runner-macos-arm64"
FILENAME="matrix-runner"
fi
curl -sSL -o $FILENAME $URL
if [[ "${{ runner.os }}" != "Windows" ]]; then
chmod +x $FILENAME
fi
# The rust-toolchain action adds ~/.cargo/bin to the PATH
mv $FILENAME ~/.cargo/bin/
- name: Run test matrix shard
shell: bash
run: matrix-runner run --runner-index $((${{ matrix.shard }} - 1)) --total-runners 4
env:
CC_x86_64_pc_windows_msvc: clang-cl
CXX_x86_64_pc_windows_msvc: clang-cl