From a7ee57d533d4254572a943c0c7bb26dbb0ba5a83 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 | 93 +++++++++++++++++++++++++++-- run.sh | 44 ++++++++++++++ 2 files changed, 133 insertions(+), 4 deletions(-) create mode 100755 run.sh diff --git a/.gitea/workflows/build-and-test.yml b/.gitea/workflows/build-and-test.yml index 64476cc..afe1b1d 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,102 @@ 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: https://git.pvv.ntnu.no/oysteikt/rsync-action@main + with: + source: target/test-report/test-report.md + target: mpvipc/${{ gitea.ref_name }}/ + username: oysteikt + ssh-key: ${{ secrets.OYSTEIKT_GITEA_WEBDOCS_SSH_KEY }} + host: microbel.pvv.ntnu.no + known-hosts: "microbel.pvv.ntnu.no ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEq0yasKP0mH6PI6ypmuzPzMnbHELo9k+YB5yW534aKudKZS65YsHJKQ9vapOtmegrn5MQbCCgrshf+/XwZcjbM=" + + - 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 test report + uses: https://git.pvv.ntnu.no/oysteikt/rsync-action@main + with: + source: target/coverage/html/ + target: mpvipc/${{ gitea.ref_name }}/coverage/ + username: oysteikt + ssh-key: ${{ secrets.OYSTEIKT_GITEA_WEBDOCS_SSH_KEY }} + host: microbel.pvv.ntnu.no + known-hosts: "microbel.pvv.ntnu.no ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEq0yasKP0mH6PI6ypmuzPzMnbHELo9k+YB5yW534aKudKZS65YsHJKQ9vapOtmegrn5MQbCCgrshf+/XwZcjbM=" + + 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: Transfer files + uses: https://git.pvv.ntnu.no/oysteikt/rsync-action@main + with: + source: target/doc/ + target: mpvipc/${{ gitea.ref_name }}/docs/ + username: oysteikt + ssh-key: ${{ secrets.OYSTEIKT_GITEA_WEBDOCS_SSH_KEY }} + host: microbel.pvv.ntnu.no + known-hosts: "microbel.pvv.ntnu.no ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEq0yasKP0mH6PI6ypmuzPzMnbHELo9k+YB5yW534aKudKZS65YsHJKQ9vapOtmegrn5MQbCCgrshf+/XwZcjbM=" \ 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