From c5d40a68a64db93f553704763f8d3e0052e36981 Mon Sep 17 00:00:00 2001 From: h7x4 Date: Tue, 30 Apr 2024 17:39:33 +0200 Subject: [PATCH] WIP: workflow: generate test reports --- .gitea/workflows/build-and-test.yml | 58 +++++++++++++++++++++++++++-- .gitea/workflows/build-docs.yml | 44 ++++++++++++++++++++++ run.sh | 44 ++++++++++++++++++++++ 3 files changed, 142 insertions(+), 4 deletions(-) create mode 100644 .gitea/workflows/build-docs.yml create mode 100755 run.sh diff --git a/.gitea/workflows/build-and-test.yml b/.gitea/workflows/build-and-test.yml index 64476cc..518b287 100644 --- a/.gitea/workflows/build-and-test.yml +++ b/.gitea/workflows/build-and-test.yml @@ -16,13 +16,12 @@ jobs: with: toolchain: nightly override: true - components: rustfmt, clippy - name: Cache dependencies 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 +48,67 @@ jobs: runs-on: ubuntu-latest-personal steps: - uses: actions/checkout@v3 + - uses: cargo-bins/cargo-binstall@main + + - name: Install mpv + run: apt-get update && apt-get install -y mpv - name: Install latest nightly toolchain uses: actions-rs/toolchain@v1 with: toolchain: nightly override: true - components: rustfmt, clippy + components: 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 --no-fail-fast -- -Zunstable-options --format json --report-time \ + | tee target/test-report/test-report.json + env: + RUSTFLAGS: "-Cinstrument-coverage" + 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 --output target/test-report/test-report.md + + - name: Upload test report + uses: actions/upload-artifact@v3 + with: + name: test-report.md + 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@v3 + with: + name: coverage + path: target/coverage/html diff --git a/.gitea/workflows/build-docs.yml b/.gitea/workflows/build-docs.yml new file mode 100644 index 0000000..8f27f21 --- /dev/null +++ b/.gitea/workflows/build-docs.yml @@ -0,0 +1,44 @@ +name: "Build docs" +on: + push: + branches: + - master +jobs: + docs: + 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 + + - name: Cache dependencies + uses: Swatinem/rust-cache@v2 + + - name: Build docs + run: cargo doc --all-features --document-private-items --release + + - name: Install rsync + run: apt-get update && apt-get install -y rsync + + - name: Install SSH key + run: | + mkdir -p ~/.ssh + cat <~/.ssh/key + ${{ secrets.OYSTEIKT_GITEA_WEBDOCS_SSH_KEY }} + EOF + chmod 600 ~/.ssh/key + + - name: Deploy docs to https://pvv.ntnu.no/~oysteikt/mpvipc/${{ gitea.ref_name }}/ + run: | + rsync \ + --archive \ + --compress \ + --verbose \ + --mkpath \ + --rsh="ssh -oBatchMode=yes -oStrictHostKeyChecking=accept-new -i ~/.ssh/key" \ + "target/doc/" \ + "oysteikt@microbel.pvv.ntnu.no:mpvipc/${{ gitea.ref_name }}/" \ No newline at end of file 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