diff --git a/.gitea/workflows/build-and-test.yml b/.gitea/workflows/build-and-test.yml index 64476cc..873fc10 100644 --- a/.gitea/workflows/build-and-test.yml +++ b/.gitea/workflows/build-and-test.yml @@ -22,7 +22,7 @@ jobs: uses: Swatinem/rust-cache@v2 - name: Build - run: cargo build --all-features --verbose + run: cargo build --all-features --verbose --release check: runs-on: ubuntu-latest-personal @@ -49,16 +49,62 @@ jobs: 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 + 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 --verbose \ No newline at end of file + run: cargo test --all-features --release -Z unstable-options --report-time --format json | tee target/test-report/test-report.json + env: + RUSTFLAGS: "-Cinstrument-coverage" + LLVM_PROFILE_FILE: "target/release/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/prof + + - name: Upload coverage report + uses: actions/upload-artifact@v4 + with: + name: coverage + path: target/coverage/html diff --git a/run.sh b/run.sh new file mode 100755 index 0000000..796571e --- /dev/null +++ b/run.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash + +rm -rf target + +mkdir -p target/test-report + +export RUSTFLAGS="-Cinstrument-coverage" +export LLVM_PROFILE_FILE="target/coverage/prof/%p-%m.profraw" + +rustup override set nightly + +echo "Running tests..." +cargo test --all-features --release --no-fail-fast -- -Z unstable-options --report-time --format json | tee target/test-report/test-report.json + +echo "Generating test report..." +markdown-test-report target/test-report/test-report.json --output target/test-report/test-report.md +echo "Generating test report HTML..." +pandoc target/test-report/test-report.md -o target/test-report/test-report.html + +# rustup override set stable + +echo "Removing unused profraw files..." +for file in target/coverage/prof/*.profraw; do + ~/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/bin/llvm-profdata show "$file" 1>/dev/null 2>/dev/null || rm -f "$file" +done + +echo "Generating coverage report..." +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/prof + +rustup override set nightly