findutils 0.8.0

Rust implementation of GNU findutils
Documentation
on: [push, pull_request]

name: Basic CI

jobs:
  check:
    name: cargo check
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, macOS-latest, windows-latest]
    steps:
      - uses: actions/checkout@v4
      - name: Install `rust` toolchain
        run: |
          ## Install `rust` toolchain
          rustup toolchain install stable --no-self-update -c rustfmt --profile minimal
          rustup default stable

      # For bindgen: https://github.com/rust-lang/rust-bindgen/issues/1797
      - uses: KyleMayes/install-llvm-action@v2
        if: matrix.os == 'windows-latest'
        with:
          version: "11.0"
          directory: ${{ runner.temp }}/llvm
      - run: echo "LIBCLANG_PATH=$((gcm clang).source -replace "clang.exe")" >> $env:GITHUB_ENV
        if: matrix.os == 'windows-latest'

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

  test:
    name: cargo test
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, macOS-latest, windows-latest]
    steps:
      - uses: actions/checkout@v4
      - name: Install `rust` toolchain
        run: |
          ## Install `rust` toolchain
          rustup toolchain install stable --no-self-update -c rustfmt --profile minimal
          rustup default stable

      # For bindgen: https://github.com/rust-lang/rust-bindgen/issues/1797
      - uses: KyleMayes/install-llvm-action@v2
        if: matrix.os == 'windows-latest'
        with:
          version: "11.0"
          directory: ${{ runner.temp }}/llvm
      - run: echo "LIBCLANG_PATH=$((gcm clang).source -replace "clang.exe")" >> $env:GITHUB_ENV
        if: matrix.os == 'windows-latest'

      - name: Test
        run: |
          cargo test

  fmt:
    name: cargo fmt --all -- --check
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Install `rust` toolchain
        run: |
          ## Install `rust` toolchain
          rustup toolchain install stable --no-self-update -c rustfmt --profile minimal
          rustup default stable

      - run: rustup component add rustfmt
      - name: cargo fmt
        run: |
          cargo fmt --all -- --check

  clippy:
    name: cargo clippy -- -D warnings
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Install `rust` toolchain
        run: |
          ## Install `rust` toolchain
          rustup toolchain install stable --no-self-update -c rustfmt --profile minimal
          rustup default stable
      - run: rustup component add clippy
      - name: cargo clippy
        run: |
          cargo clippy --all-targets -- -D warnings

  grcov:
    name: Code coverage
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os:
          - ubuntu-latest
        toolchain:
          - nightly
        cargo_flags:
          - "--all-features"
    steps:
      - name: Checkout source code
        uses: actions/checkout@v4

      - name: Install `rust` toolchain
        run: |
          rustup toolchain install nightly --no-self-update -c rustfmt --profile minimal
          rustup default nightly

      - name: Install cargo-llvm-cov
        uses: taiki-e/install-action@cargo-llvm-cov
      - name: Generate code coverage
        run: cargo llvm-cov --all-features --lcov --branch --output-path lcov.info

      - name: Upload coverage as artifact
        uses: actions/upload-artifact@v4
        with:
          name: lcov.info
          path: lcov.info

      - name: Upload coverage to codecov.io
        uses: codecov/codecov-action@v5
        with:
          files: lcov.info
          fail_ci_if_error: true
        env:
          CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}