name: CI
on:
push:
branches: [main]
paths-ignore:
- '*.md'
- 'docs/**'
- 'LICENSE'
pull_request:
branches: [main]
paths-ignore:
- '*.md'
- 'docs/**'
- 'LICENSE'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
CARGO_TERM_COLOR: always
jobs:
fmt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6.0.2
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- run: cargo fmt -- --check
clippy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6.0.2
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- uses: Swatinem/rust-cache@v2.9.1
- run: cargo clippy --all-targets -- -D warnings
test:
runs-on: ubuntu-latest
needs: [fmt, clippy]
steps:
- uses: actions/checkout@v6.0.2
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2.9.1
- run: cargo test --verbose
coverage:
runs-on: ubuntu-latest
needs: [test]
steps:
- uses: actions/checkout@v6.0.2
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2.9.1
- name: Install tarpaulin
run: cargo install cargo-tarpaulin
- name: Check coverage (90% minimum)
run: |
OUTPUT=$(cargo tarpaulin --skip-clean --no-default-features --features "daemon,lang-rust,lang-typescript,lang-javascript,lang-java,lang-python,lang-go,lang-c,lang-cpp,lang-ruby,lang-csharp,lang-swift,lang-kotlin,lang-bash,lang-css,lang-scss,lang-php,lang-markdown,lang-json,lang-yaml,lang-toml,lang-dockerfile,lang-hcl,lang-dart,lang-scala,lang-lua,lang-elixir,lang-zig,lang-haskell,lang-groovy,lang-objc,lang-r,lang-julia,lang-ocaml,lang-matlab,lang-proto,lang-svelte,lang-makefile,lang-html,lang-graphql,lang-xml,lang-sql,lang-prisma" --lib --test cli_test --test diff_test --test overview_test --test scanner_test --test trace_test --timeout 300 2>&1) || true
echo "$OUTPUT"
COVERAGE=$(echo "$OUTPUT" | grep -oP '[\d.]+(?=% coverage)' | tail -1)
echo "Coverage: ${COVERAGE}%"
if [ -z "$COVERAGE" ]; then
echo "❌ Could not determine coverage from tarpaulin output"
exit 1
fi
if [ "$(echo "$COVERAGE < 90" | bc -l)" -eq 1 ]; then
echo "❌ Coverage ${COVERAGE}% is below 90% threshold"
exit 1
fi
echo "✅ Coverage ${COVERAGE}% meets 90% threshold"