compiledb 1.1.5

Clang's Compilation Database generator for make-based build systems
Documentation
name: Build, Lint & Test

on:
  pull_request:
    branches: [ "main" ]
    paths-ignore:
      - '**.md'
      - 'docs/**'
      - 'LICENSE'
  workflow_dispatch:  # Allow manual trigger

env:
  CARGO_TERM_COLOR: always

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  security-audit:
    name: Security Audit
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      
      - name: Setup Rust toolchain with caching
        uses: brndnmtthws/rust-action@v1
        with:
          toolchain: stable
          cargo-packages: cargo-audit
      
      - name: Run security audit
        run: cargo audit

  msrv:
    name: Check MSRV
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      
      - name: Setup 1.85.0 Rust toolchain with caching
        uses: brndnmtthws/rust-action@v1
        with:
          toolchain: 1.85.0
      
      - name: Check MSRV
        run: cargo check --all-features
  
  build:
    strategy:
      matrix:
        rust-toolchain:
          - stable
          - beta
          - nightly
        os:
          - ubuntu-latest
          - ubuntu-24.04-arm
          - macos-latest
          - windows-latest
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v6
      - name: Setup ${{ matrix.rust-toolchain }} Rust toolchain with caching
        uses: brndnmtthws/rust-action@v1
        with:
          toolchain: ${{ matrix.rust-toolchain }}
      - run: cargo build --locked
      - run: cargo test --locked
        env:
          RUST_BACKTRACE: 1
      - run: cargo fmt --all -- --check
      - run: cargo clippy -- -D warnings

  coverage:
    name: Code Coverage
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      
      - name: Setup nightly Rust toolchain with caching
        uses: brndnmtthws/rust-action@v1
        with:
          toolchain: nightly
      - run: cargo tarpaulin --locked --out Xml
      
      - name: Upload coverage to Codecov
        uses: codecov/codecov-action@v5
        with:
          token: ${{ secrets.CODECOV_ORG_TOKEN }}
          fail_ci_if_error: true