name: CI on: push: branches: [ main, master ] pull_request: branches: [ main, master ] env: CARGO_TERM_COLOR: always RUST_BACKTRACE: 1 jobs: test: name: Test - ${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] rust: [stable, beta] exclude: - os: windows-latest rust: beta - os: macos-latest rust: beta steps: - uses: actions/checkout@v4 - name: Install Rust uses: dtolnay/rust-toolchain@master with: toolchain: ${{ matrix.rust }} components: rustfmt, clippy - name: Cache cargo registry uses: actions/cache@v4 with: path: ~/.cargo/registry key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }} - name: Cache cargo index uses: actions/cache@v4 with: path: ~/.cargo/git key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }} - name: Cache cargo build uses: actions/cache@v4 with: path: target key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }} - name: Check formatting run: cargo fmt -- --check - name: Run clippy run: cargo clippy --all-features -- -D warnings - name: Build run: cargo build --verbose --all-features - name: Run tests run: cargo test --verbose --all-features - name: Build release run: cargo build --release --all-features - name: Run benchmarks (smoke test) run: cargo bench --no-run coverage: name: Code Coverage runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install Rust uses: dtolnay/rust-toolchain@stable with: components: llvm-tools-preview - name: Install cargo-llvm-cov uses: taiki-e/install-action@cargo-llvm-cov - name: Generate code coverage run: cargo llvm-cov --all-features --workspace --lcov --output-path lcov.info - name: Upload coverage to Codecov uses: codecov/codecov-action@v4 with: files: lcov.info fail_ci_if_error: false security-audit: name: Security Audit runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Run cargo audit uses: actions-rs/audit-check@v1 with: token: ${{ secrets.GITHUB_TOKEN }}