name: Clippy

on:
  pull_request:
    paths:
      - ".github/workflows/clippy.yml"
      - "tools/**/*"
      - "examples/**/*"
      - "packages/**/*"
      - "Cargo.toml"
      - "Cargo.lock"
  push:
    branches: [master]

jobs:
  feature-soundness:
    name: Feature Soundness
    runs-on: ubuntu-latest
    # if normal clippy doesn't succeed, do not try to lint feature soundness
    needs: clippy

    strategy:
      fail-fast: false
      matrix:
        profile:
          - dev
          - release
    steps:
      - uses: actions/checkout@v4

      - name: Setup toolchain
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: stable
          components: clippy

      - uses: Swatinem/rust-cache@v2
        with:
          shared-key: clippy

      - name: Lint feature soundness
        if: matrix.profile == 'dev'
        run: bash ./ci/feature-soundness.sh

      - name: Lint feature soundness
        if: matrix.profile == 'release'
        run: bash ./ci/feature-soundness-release.sh

  clippy:
    name: Clippy Workspace
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        toolchain:
          - stable

    steps:
      - uses: actions/checkout@v4

      - name: Setup toolchain
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ matrix.toolchain }}
          components: clippy

      - uses: Swatinem/rust-cache@v2
        with:
          shared-key: clippy

      - name: Run clippy
        run: |
          cargo clippy \
            --all-targets \
            --all-features \
            --workspace \
            -- -D warnings
