Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Generate rust coverage data #84

Merged
merged 2 commits into from
Oct 30, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
111 changes: 69 additions & 42 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,20 +11,20 @@ jobs:
name: Check the code style
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/setup-python@v4
with:
python-version: "3.10"
- uses: pre-commit/[email protected]

tests:
name: Run the tests
name: Run python tests
torymur marked this conversation as resolved.
Show resolved Hide resolved
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.10"]
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
Expand Down Expand Up @@ -58,12 +58,12 @@ jobs:
overwrite: true

coverage:
name: Combine & check coverage.
needs: tests
name: Check combined coverage
needs: [tests, cargo-test]
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
with:
fetch-depth: 0

Expand All @@ -76,20 +76,30 @@ jobs:
run: |
pip install --upgrade "coverage[toml]>=5.1" diff-cover

- uses: actions/download-artifact@v4
- name: Install lcov
run: sudo apt-get update && sudo apt-get install -yqq lcov

- name: Download python coverage data
uses: actions/download-artifact@v4
with:
name: coverage-data

- name: Download rust coverage data
uses: actions/download-artifact@v4
with:
name: rust-coverage-data

- name: Fetch main for coverage diff
run: |
git fetch --no-tags --prune origin main

- name: Combine coverage & fail if it's <100%.
run: |
python -m coverage combine
python -m coverage html --skip-covered --skip-empty
python -m coverage xml
diff-cover coverage.xml --markdown-report=coverage.md --fail-under=100 || (cat coverage.md >> $GITHUB_STEP_SUMMARY && exit 1)
python -m coverage lcov
lcov -a coverage.lcov -a lcov.info -o combined_coverage
genhtml combined_coverage --output-directory htmlcov
diff-cover combined_coverage --markdown-report=coverage.md --fail-under=100 || (cat coverage.md >> $GITHUB_STEP_SUMMARY && exit 1)

- name: Upload HTML report if check failed.
uses: actions/upload-artifact@v4
Expand All @@ -104,50 +114,67 @@ jobs:
name: Build Wheel and Test SDist
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Build SDist and Wheel
run: ./.github/scripts/build_sdist_and_wheel.sh

cargo-test:
name: Run Cargo tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install Rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- name: Cache Cargo dependencies
uses: actions/cache@v2
- uses: actions/checkout@v4
# toolchain choice needs to happen before cache: rustc version used as its cache key
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2

- name: Install cargo tarpaulin if not cached
run: |
if ! command -v cargo-tarpaulin &> /dev/null; then
echo "cargo-tarpaulin is not found, installing..."
cargo install cargo-tarpaulin
else
echo "cargo-tarpaulin is cached"
fi

- name: Generate rust code coverage
run: >
cargo tarpaulin
--out=Lcov
--output-dir=rust-coverage
--engine=llvm
--exclude-files=src/python_bindings/*
--no-dead-code
--workspace
--verbose
env:
RUSTFLAGS: -C instrument-coverage

- name: Upload rust coverage data
uses: actions/upload-artifact@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
- name: Run cargo test
run: cargo test
name: rust-coverage-data
path: rust-coverage/
if-no-files-found: ignore
include-hidden-files: true
overwrite: true

cargo-audit:
name: Run Cargo audit
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install Rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- name: Cache Cargo dependencies
uses: actions/cache@v2
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
- name: Install cargo-audit
run: cargo install cargo-audit
- uses: actions/checkout@v4
# toolchain choice needs to happen before cache: rustc version used as its cache key
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2

- name: Install cargo audit if not cached
run: |
if ! command -v cargo-audit &> /dev/null; then
echo "cargo-audit is not found, installing..."
cargo install cargo-audit
else
echo "cargo-audit is cached"
fi

- name: Run cargo audit
run: cargo audit
Loading