name: CI on: push: branches: ['main'] pull_request: concurrency: group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true jobs: test: strategy: matrix: os: [ubuntu-latest, macos-latest, windows-latest] rust: [stable, beta] exclude: - os: macos-latest rust: beta - os: windows-latest rust: beta runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v6 - uses: dtolnay/rust-toolchain@master with: toolchain: ${{ matrix.rust }} - run: cargo test --locked --all-features msrv: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - uses: dtolnay/rust-toolchain@master with: toolchain: 1.65.0 - run: cargo check --locked --lib --all-features lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - uses: dtolnay/rust-toolchain@stable with: components: rustfmt, clippy - run: cargo fmt --all -- --check - run: cargo clippy --all-targets --all-features -- -D warnings docs: name: Check for documentation errors runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - uses: dtolnay/rust-toolchain@nightly - run: cargo doc --locked --all-features --no-deps --document-private-items env: RUSTDOCFLAGS: -Dwarnings semver: name: Check semver compatibility runs-on: ubuntu-latest steps: - name: Checkout sources uses: actions/checkout@v6 with: persist-credentials: false - name: Check semver uses: obi1kenobi/cargo-semver-checks-action@v2 miri: name: Run all tests under miri runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - uses: dtolnay/rust-toolchain@nightly with: components: miri - run: cargo miri test --locked --all-features sanitizers: name: Run all tests under sanitizers runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - uses: dtolnay/rust-toolchain@nightly with: components: rust-src - run: | RUSTDOCFLAGS=-Cunsafe-allow-abi-mismatch=sanitizer RUSTFLAGS="-Z sanitizer=address" cargo -Z build-std test --locked --target x86_64-unknown-linux-gnu --all-features RUSTDOCFLAGS=-Cunsafe-allow-abi-mismatch=sanitizer RUSTFLAGS="-Z sanitizer=leak" cargo test --locked -Z build-std --target x86_64-unknown-linux-gnu --all-features RUSTDOCFLAGS=-Cunsafe-allow-abi-mismatch=sanitizer RUSTFLAGS="-Z sanitizer=memory" cargo test --locked -Z build-std --target x86_64-unknown-linux-gnu --all-features audit: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - uses: EmbarkStudios/cargo-deny-action@v2