name: CI
on:
push:
pull_request:
env:
CARGO_TERM_COLOR: always
jobs:
lint:
name: fmt + clippy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy
- uses: Swatinem/rust-cache@v2
- run: cargo fmt --all --check
- run: cargo clippy --all-targets --features stats -- -D warnings
test:
name: tests (stable)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- run: cargo test --features stats
default-build:
name: default build (lean)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- run: cargo build
- run: cargo test --no-run
thread-sanitizer:
name: ThreadSanitizer (real code)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@nightly
with:
components: rust-src
- uses: Swatinem/rust-cache@v2
- name: cargo test under TSan
run: |
TARGET=$(rustc -vV | sed -n 's/host: //p')
cargo test -Zbuild-std --target "$TARGET" --features stats \
--lib --test conformance -- concurrent mutual_exclusion_under_contention
env:
RUSTFLAGS: "-Zsanitizer=thread"
miri:
name: Miri (UB / provenance)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@nightly
with:
components: miri
- uses: Swatinem/rust-cache@v2
- name: cargo miri test (curated subset)
run: |
cargo miri test --lib --features stats -- \
managed_frames_not_written \
bitmap_hosted_past_span_start_hole \
free_stats_split_and_merge \
phantom_prefix_reserved_for_unaligned_phys_base \
multi_frame_count_rounds_up_to_order \
frees_overflow_into_depot_and_other_cpu_reuses \
single_frame_oom_steals_from_sibling_magazine \
default_selector_alloc_dealloc \
add_usable_routes_to_owning_region
env:
MIRIFLAGS: "-Zmiri-permissive-provenance"
miri-concurrent:
name: Miri (concurrent / weak memory)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@nightly
with:
components: miri
- uses: Swatinem/rust-cache@v2
- name: cargo miri test (threaded, 16 seeds)
run: |
cargo miri test --features stats --lib --test conformance \
-- concurrent mutual_exclusion_under_contention
env:
MIRIFLAGS: "-Zmiri-permissive-provenance -Zmiri-many-seeds=0..16"
audit:
name: audit (per-op invariants)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- run: cargo test --features stats
env:
RUSTFLAGS: "--cfg audit"