diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index e7b6ed39..2730b0d6 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -1,10 +1,9 @@ -name: Test and Build +name: Continuous integration on: [push, pull_request] jobs: - - test: + Test: runs-on: ubuntu-latest strategy: fail-fast: false @@ -13,43 +12,62 @@ jobs: - 1.63.0 # MSRV - stable - nightly - steps: - - uses: actions/checkout@v2 - - uses: Swatinem/rust-cache@v1.2.0 - - uses: actions-rs/toolchain@v1 + - name: "Checkout repo" + uses: actions/checkout@v4 + - name: "Install ${{ matrix.rust }} toolchain" + # https://github.com/dtolnay/rust-toolchain?tab=readme-ov-file#inputs + uses: dtolnay/rust-toolchain@master with: toolchain: ${{ matrix.rust }} - override: true + - name: "Use cache" + uses: Swatinem/rust-cache@v2 - name: Run tests run: RUST_LOG=debug bash contrib/test.sh - rustfmt: + Format: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: Swatinem/rust-cache@v1.2.0 - - uses: actions-rs/toolchain@v1 - with: - toolchain: nightly - override: true + - name: "Checkout repo" + uses: actions/checkout@v4 + - name: "Install nightly toolchain" + uses: dtolnay/rust-toolchain@nightly + - name: "Use cache" + uses: Swatinem/rust-cache@v2 - run: rustup component add rustfmt --toolchain nightly-x86_64-unknown-linux-gnu - - name: fmt check + - name: "Run formatting check" run: cargo fmt --all -- --check - clippy: + Lint: runs-on: ubuntu-latest steps: - name: "Checkout repo" uses: actions/checkout@v4 - - name: "Use caching" - uses: Swatinem/rust-cache@v1.2.0 - name: "Install nightly toolchain" - uses: actions-rs/toolchain@v1 - with: - toolchain: nightly - override: true + uses: dtolnay/rust-toolchain@nightly + - name: "Use cache" + uses: Swatinem/rust-cache@v2 - name: "Install clippy" run: rustup component add clippy --toolchain nightly-x86_64-unknown-linux-gnu - name: "Run linting" run: bash contrib/lint.sh + + Coverage: + name: Code coverage + runs-on: ubuntu-latest + strategy: + fail-fast: false + steps: + - name: "Checkout repo" + uses: actions/checkout@v4 + - name: "Install toolchain" + # https://github.com/dtolnay/rust-toolchain + uses: dtolnay/rust-toolchain@stable + - name: "Use cache" + uses: Swatinem/rust-cache@v2 + - name: "Install cargo-llvm-cov" + uses: taiki-e/install-action@cargo-llvm-cov + - name: "Generate code coverage for tests" + run: bash contrib/coverage.sh + - name: "Upload report to coveralls" + uses: coverallsapp/github-action@v2 diff --git a/README.md b/README.md index dda8df89..a59b7f27 100644 --- a/README.md +++ b/README.md @@ -72,7 +72,7 @@ Seeking review of the code that verifies there is no overpayment. Contributions - [x] CI - [x] Integration tests - [ ] Fuzzing -- [ ] Coverage measurement +- [x] Coverage measurement ## Minimum Supported Rust Version (MSRV) diff --git a/contrib/coverage.sh b/contrib/coverage.sh new file mode 100755 index 00000000..2d453b67 --- /dev/null +++ b/contrib/coverage.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +set -e + +# https://github.com/taiki-e/cargo-llvm-cov?tab=readme-ov-file#merge-coverages-generated-under-different-test-conditions +cargo llvm-cov clean --workspace # remove artifacts that may affect the coverage results +cargo llvm-cov --no-report --features=send,receive +cargo llvm-cov --no-report --features=v2,danger-local-https,io +cargo llvm-cov report --lcov --output-path lcov.info # generate report without tests diff --git a/contrib/lint.sh b/contrib/lint.sh old mode 100644 new mode 100755