name: CI
on:
push:
branches: [main]
pull_request:
workflow_dispatch:
inputs:
bench:
description: "Also run the raw benchmark harness (numbers from shared VMs are indicative only)"
type: boolean
default: false
env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
jobs:
test:
name: test (${{ matrix.os }})
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, ubuntu-24.04-arm, macos-14]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy
- name: fmt
run: cargo fmt --all -- --check
- name: clippy (lib + tests)
run: cargo clippy --lib --tests -- -D warnings
- name: test
run: cargo test
- name: test with 3-slot blocks
run: cargo test
env:
RUSTFLAGS: --cfg fcrs_small_blocks
- name: stress tests, release, 3-slot blocks
run: cargo test --release --lib threads_
env:
RUSTFLAGS: --cfg fcrs_small_blocks
- name: benchmark harness smoke (quick mode)
run: cargo test --release --bench raw_bench -- --nocapture
env:
FCRS_RAW_BENCH: "1"
loom:
name: loom model checks
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- run: cargo test --release --features loom --test loom --test mpsc_loom
miri:
name: miri (unsafe core)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@nightly
with:
components: miri
- run: cargo miri setup
- run: cargo miri test --lib -- --skip threads_
env:
RUSTFLAGS: --cfg fcrs_small_blocks
MIRIFLAGS: -Zmiri-strict-provenance
bench:
name: raw benchmark (${{ matrix.os }}, indicative only)
if: ${{ github.event_name == 'workflow_dispatch' && inputs.bench }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, ubuntu-24.04-arm, macos-14]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- name: full harness
run: cargo test --release --bench raw_bench -- --nocapture | tee raw_bench.txt
env:
FCRS_RAW_BENCH_FULL: "1"
FCRS_RAW_BENCH_ARGS: "--json"
RUSTFLAGS: -C target-cpu=native
- uses: actions/upload-artifact@v4
with:
name: raw-bench-${{ matrix.os }}
path: raw_bench.txt