|
4 | 4 | push: |
5 | 5 | branches: |
6 | 6 | - main |
| 7 | + paths: |
| 8 | + - '**.rs' |
| 9 | + - '**/Cargo.toml' |
| 10 | + - '**/Cargo.lock' |
| 11 | + - '.github/workflows/release.yml' |
7 | 12 |
|
8 | 13 | env: |
9 | 14 | CARGO_TERM_COLOR: always |
|
28 | 33 | - name: Install Rust |
29 | 34 | uses: dtolnay/rust-toolchain@stable |
30 | 35 | with: |
31 | | - components: clippy |
| 36 | + components: clippy, llvm-tools-preview |
| 37 | + |
| 38 | + - name: Install cargo-llvm-cov |
| 39 | + run: cargo install cargo-llvm-cov |
| 40 | + |
| 41 | + - name: Install rustfilt |
| 42 | + run: cargo install rustfilt |
32 | 43 |
|
33 | 44 | - name: Cache cargo registry |
34 | 45 | uses: actions/cache@v4 |
|
55 | 66 | -W clippy::nursery \ |
56 | 67 | -D warnings |
57 | 68 |
|
58 | | - - name: Run tests |
59 | | - run: cargo test --all-features --verbose |
| 69 | + - name: Generate test coverage |
| 70 | + run: cargo llvm-cov --workspace --all-features --lcov --output-path lcov.info --branch |
| 71 | + |
| 72 | + - name: Demangle coverage output |
| 73 | + run: rustfilt -i lcov.info -o lcov-demangled.info |
| 74 | + |
| 75 | + - name: Upload coverage to Codecov |
| 76 | + uses: codecov/codecov-action@v5 |
| 77 | + with: |
| 78 | + files: lcov-demangled.info |
| 79 | + fail_ci_if_error: false |
| 80 | + token: ${{ secrets.CODECOV_TOKEN }} |
60 | 81 |
|
61 | 82 | - name: Build all examples |
62 | 83 | run: cargo build --examples --all-features --verbose |
@@ -91,10 +112,15 @@ jobs: |
91 | 112 | env: |
92 | 113 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
93 | 114 | CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_TOKEN }} |
94 | | - run: npx semantic-release |
| 115 | + run: | |
| 116 | + npx semantic-release |
| 117 | + echo "new_release_published=$([ -f .semanticRelease ])" >> $GITHUB_OUTPUT |
95 | 118 |
|
96 | 119 | - name: Publish to crates.io |
97 | | - if: steps.semantic.outputs.new_release_published == 'true' |
98 | | - run: cargo publish --token ${{ secrets.CARGO_TOKEN }} --allow-dirty |
| 120 | + run: | |
| 121 | + if cargo publish --token ${{ secrets.CARGO_TOKEN }} --allow-dirty 2>&1 | grep -q "crate version .* is already uploaded"; then |
| 122 | + echo "Version already published, skipping" |
| 123 | + exit 0 |
| 124 | + fi |
99 | 125 | env: |
100 | 126 | CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_TOKEN }} |
0 commit comments