name: Build and test on: pull_request: push: branches: - main jobs: build: runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] rust: [stable, beta, nightly] steps: - name: Checkout repository uses: actions/checkout@v4 - 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-git-${{ hashFiles('**/Cargo.lock') }} - name: Cache cargo build uses: actions/cache@v4 with: path: target key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }} - name: Set up Rust uses: dtolnay/rust-toolchain@v1 with: toolchain: ${{ matrix.rust }} - name: Install grcov uses: taiki-e/install-action@v2 with: tool: grcov - name: Add llvm-tools-preview run: rustup component add llvm-tools-preview - name: Build and test run: | cargo build --verbose cargo test --verbose env: RUSTFLAGS: -Cinstrument-coverage LLVM_PROFILE_FILE: "%p-%m.profraw" - name: Generate lcov.info run: | grcov . --binary-path ./target/debug/ -s . -t lcov --branch --ignore-not-existing --ignore "/*" -o lcov.info - name: Upload coverage reports to Codecov uses: codecov/codecov-action@v4.0.1 with: token: ${{ secrets.CODECOV_TOKEN }} file: lcov.info