name: "Build and test" on: push: branches: - master pull_request: jobs: build: runs-on: ubuntu-latest-personal steps: - uses: actions/checkout@v3 - name: Install latest nightly toolchain uses: actions-rs/toolchain@v1 with: toolchain: nightly override: true components: rustfmt, clippy - name: Cache dependencies uses: Swatinem/rust-cache@v2 - name: Build run: cargo build --all-features --verbose --release check: runs-on: ubuntu-latest-personal steps: - uses: actions/checkout@v3 - name: Install latest nightly toolchain uses: actions-rs/toolchain@v1 with: toolchain: nightly override: true components: rustfmt, clippy - name: Cache dependencies uses: Swatinem/rust-cache@v2 - name: Check code format run: cargo fmt -- --check - name: Check clippy run: cargo clippy --all-features -- --deny warnings test: runs-on: ubuntu-latest-personal steps: - uses: actions/checkout@v3 - uses: cargo-bins/cargo-binstall@main - name: Install latest nightly toolchain uses: actions-rs/toolchain@v1 with: toolchain: nightly override: true components: rustfmt, clippy, llvm-tools-preview - name: Cache dependencies uses: Swatinem/rust-cache@v2 - name: Create necessary directories run: mkdir -p target/test-report - name: Run tests run: | cargo test \ --all-features \ --release \ --no-fail-fast \ | tee target/test-report/test-report.json env: RUSTFLAGS: "-Cinstrument-coverage -Z unstable-options --format json --report-time" LLVM_PROFILE_FILE: "target/coverage/%p-%m.profraw" - name: Install markdown-test-report run: cargo binstall -y markdown-test-report - name: Generate test report run: markdown-test-report target/test-report/test-report.json target/test-report/test-report.md - name: Upload test report uses: actions/upload-artifact@v4 with: name: test-report path: target/test-report/test-report.md - name: Install grcov run: cargo binstall -y grcov - name: Generate coverage report run: | grcov \ --source-dir . \ --binary-path ./target/release/deps/ \ --excl-start 'mod test* \{' \ --ignore 'tests/*' \ --ignore "*test.rs" \ --ignore "*tests.rs" \ --ignore "*github.com*" \ --ignore "*libcore*" \ --ignore "*rustc*" \ --ignore "*liballoc*" \ --ignore "*cargo*" \ -t html \ -o ./target/coverage/html \ target/coverage/ - name: Upload coverage report uses: actions/upload-artifact@v4 with: name: coverage path: target/coverage/html