cc-audit 3.11.0

Security auditor for Claude Code skills, hooks, and MCP servers
Documentation
name: MSRV

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

env:
  CARGO_TERM_COLOR: always

jobs:
  changes:
    name: Detect Changes
    runs-on: ubuntu-latest
    outputs:
      rust: ${{ steps.filter.outputs.rust }}
    steps:
      - uses: actions/checkout@v7
      - uses: dorny/paths-filter@v4
        id: filter
        with:
          filters: |
            rust:
              - 'src/**'
              - 'Cargo.toml'
              - 'Cargo.lock'
              - 'rust-toolchain.toml'

  msrv-check:
    name: MSRV Check
    needs: changes
    if: needs.changes.outputs.rust == 'true'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v7

      - name: Install cargo-msrv
        run: cargo install cargo-msrv --locked

      - name: Find MSRV
        id: msrv
        run: |
          MSRV=$(cargo msrv find --min 1.75.0 2>&1 | grep -oP 'Minimum Supported Rust Version \(MSRV\): \K[0-9.]+' || echo "unknown")
          echo "msrv=$MSRV" >> $GITHUB_OUTPUT
          echo "MSRV: $MSRV"

      - name: Report MSRV
        run: |
          echo "## MSRV Report" >> $GITHUB_STEP_SUMMARY
          echo "" >> $GITHUB_STEP_SUMMARY
          echo "Minimum Supported Rust Version: **${{ steps.msrv.outputs.msrv }}**" >> $GITHUB_STEP_SUMMARY

  msrv-verify:
    name: Verify MSRV (${{ matrix.rust }})
    needs: changes
    if: needs.changes.outputs.rust == 'true'
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        rust:
          - "1.85.0"  # Current MSRV (edition 2024)
          - stable
          - beta
    steps:
      - uses: actions/checkout@v7

      - uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ matrix.rust }}

      - uses: Swatinem/rust-cache@v2
        with:
          key: ${{ matrix.rust }}

      - name: Check
        run: cargo check --all-features

      - name: Build
        run: cargo build --all-features

      - name: Test
        run: cargo test --all-features

  msrv-result:
    name: MSRV Result
    needs: [changes, msrv-check, msrv-verify]
    if: always()
    runs-on: ubuntu-latest
    steps:
      - name: Check results
        run: |
          if [[ "${{ needs.changes.outputs.rust }}" != "true" ]]; then
            echo "No relevant changes detected, skipping MSRV checks"
            exit 0
          fi
          if [[ "${{ needs.msrv-check.result }}" == "failure" || \
                "${{ needs.msrv-verify.result }}" == "failure" ]]; then
            echo "MSRV check failed"
            exit 1
          fi
          echo "MSRV checks passed"