name: Clippy Test

on:
  push:
    # Ignore bors branches, since they are covered by `clippy_bors.yml`
    branches-ignore:
      - auto
      - try
    # Don't run Clippy tests, when only textfiles were modified
    paths-ignore:
    - 'COPYRIGHT'
    - 'LICENSE-*'
    - '**.md'
    - '**.txt'
  pull_request:
    # Don't run Clippy tests, when only textfiles were modified
    paths-ignore:
    - 'COPYRIGHT'
    - 'LICENSE-*'
    - '**.md'
    - '**.txt'

env:
  RUST_BACKTRACE: 1
  CARGO_TARGET_DIR: '${{ github.workspace }}/target'
  NO_FMT_TEST: 1

jobs:
  base:
    runs-on: ubuntu-latest

    steps:
    # Setup
    - uses: rust-lang/simpleinfra/github-actions/cancel-outdated-builds@master
      with:
        github_token: "${{ secrets.github_token }}"

    - name: rust-toolchain
      uses: actions-rs/toolchain@v1.0.6
      with:
        toolchain: nightly
        target: x86_64-unknown-linux-gnu
        profile: minimal

    - name: Checkout
      uses: actions/checkout@v2.3.3

    - name: Run cargo update
      run: cargo update

    - name: Cache cargo dir
      uses: actions/cache@v2
      with:
        path: ~/.cargo
        key: ${{ runner.os }}-x86_64-unknown-linux-gnu-${{ hashFiles('Cargo.lock') }}
        restore-keys: |
          ${{ runner.os }}-x86_64-unknown-linux-gnu

    - name: Master Toolchain Setup
      run: bash setup-toolchain.sh

    # Run
    - name: Set LD_LIBRARY_PATH (Linux)
      run: |
        SYSROOT=$(rustc --print sysroot)
        echo "LD_LIBRARY_PATH=${SYSROOT}/lib${LD_LIBRARY_PATH+:${LD_LIBRARY_PATH}}" >> $GITHUB_ENV

    - name: Build
      run: cargo build --features deny-warnings

    - name: Test
      run: cargo test --features deny-warnings

    - name: Test clippy_lints
      run: cargo test --features deny-warnings
      working-directory: clippy_lints

    - name: Test rustc_tools_util
      run: cargo test --features deny-warnings
      working-directory: rustc_tools_util

    - name: Test clippy_dev
      run: cargo test --features deny-warnings
      working-directory: clippy_dev

    - name: Test cargo-clippy
      run: ../target/debug/cargo-clippy
      working-directory: clippy_workspace_tests

    - name: Test clippy-driver
      run: bash .github/driver.sh
      env:
        OS: ${{ runner.os }}

    - name: Test cargo dev new lint
      run: |
        cargo dev new_lint --name new_early_pass --pass early
        cargo dev new_lint --name new_late_pass --pass late
        cargo check
        git reset --hard HEAD

    # Cleanup
    - name: Run cargo-cache --autoclean
      run: |
        cargo +nightly install cargo-cache --no-default-features --features ci-autoclean cargo-cache
        cargo cache
