cargo-cache 0.8.3

Manage cargo cache ($CARGO_HOME or ~/.cargo/), show sizes and remove directories selectively
name: ci

# trigger on pushes, PRs and every day at 03:00 GMT, 05:00 CEST
on:
  push:
  pull_request:
  schedule:
    - cron: "0 3 * * *"

jobs:
  # run tests on linux, macos and windows
  test:
    name: Test
    env:
      RUST_BACKTRACE: full
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        build:
          [
            linux-msrv-release,
            linux-msrv-debug,
            linux-nightly-release,
            linux-nightly-debug,
            linux-stable-release,
            linux-stable-debug,
            linux-beta-release,
            linux-beta-debug,
            macos-nightly-release,
            macos-nightly-debug,
            windows-nightly-release,
            windows-nightly-debug,
          ]
        include:
          - build: linux-msrv-release
            os: ubuntu-latest
            toolchain: 1.57
            release: true
          - build: linux-msrv-debug
            os: ubuntu-latest
            toolchain: 1.57
            debug: true

          - build: linux-nightly-release
            os: ubuntu-latest
            toolchain: nightly
            release: true
          - build: linux-nightly-debug
            os: ubuntu-latest
            toolchain: nightly
            debug: true

          - build: macos-nightly-release
            os: macos-latest
            toolchain: nightly
            mode: release
            release: true
          - build: macos-nightly-debug
            os: macos-latest
            toolchain: nightly
            debug: true

          - build: windows-nightly-release
            os: windows-latest
            toolchain: nightly
            release: true
          - build: windows-nightly-debug
            os: windows-latest
            toolchain: nightly
            debug: true

          - build: linux-beta-release
            os: ubuntu-latest
            toolchain: beta
            release: true
          - build: linux-beta-debug
            os: ubuntu-latest
            toolchain: beta
            debug: true

          - build: linux-stable-release
            os: ubuntu-latest
            toolchain: stable
            release: true
          - build: linux-stable-debug
            os: ubuntu-latest
            toolchain: stable
            debug: true

    steps:
      - uses: actions/checkout@v1
      - name: install toolchain
        uses: actions-rs/toolchain@v1
        with:
          toolchain: ${{ matrix.toolchain }}
          override: true
          profile: minimal

      # build
      - name: cargo build
        run: cargo build --verbose --all
        if: matrix.debug
      - name: cargo build --release --all
        run: cargo build --verbose --release
        if: matrix.release

      # run tests
      - name: test
        run: cargo test --verbose --all -- --nocapture
        if: matrix.debug
      - name: test  --release
        run: cargo test --verbose --release --all -- --nocapture
        if: matrix.release

      # run cargo cache
      - name: cargo run
        run: cargo run
        if: matrix.debug
      - name: cargo run --release
        run: cargo run --release
        if: matrix.release

      # install cargo cache
      - name: install cargo-cache
        run: cargo install --force --path .
        if: matrix.release
      - name: install cargo-cache --debug
        run: cargo install --force --path . --debug
        if: matrix.debug

      # in release mode, run the benchmarks, otherwise just test them
      - name: test benchmarks debug
        if: matrix.debug && matrix.toolchain == 'nightly'
        run: cargo test --features bench
      - name: test benchmarks release
        if: matrix.release && matrix.toolchain == 'nightly'
        run: cargo test --features bench --release
      - name: run cargo bench
        if: matrix.release && matrix.toolchain == 'nightly'
        run: cargo bench
      - name: actually run benchmarks
        if: matrix.release && matrix.toolchain == 'nightly'
        run: cargo bench --features bench

      # run cargo cache
      - name: run "cargo-cache"
        run: cargo-cache
      - name: run "cargo cache"
        run: cargo cache
      - name: run "cargo cache --help"
        run: cargo cache --help
      - name: run "cargo cache --top-cache-items 20"
        run: cargo cache --top-cache-items 20
      - name: run "cargo cache --gc --dry-run"
        run: cargo cache --gc --dry-run
      - name: run "cargo cache --gc"
        run: cargo cache --gc
      - name: run "cargo cache --info"
        run: cargo cache --info
      - name: run "cargo cache --list-dirs"
        run: cargo cache --list-dirs
      - name: run "cargo cache verify"
        run: cargo cache verify
      - name: run "cargo cache --keep-duplicate-crates 10 --dry-run"
        run: cargo cache --keep-duplicate-crates 10 --dry-run
      - name: run "cargo cache --keep-duplicate-crates 1  --dry-run"
        run: cargo cache --keep-duplicate-crates 1  --dry-run
      - name: run "cargo cache --keep-duplicate-crates 0  --dry-run"
        run: cargo cache --keep-duplicate-crates 0  --dry-run
      # check ci-autoclean feature
      - name: install with ci_autoclean feature
        run: cargo install --force --git https://github.com/matthiaskrgr/cargo-cache --no-default-features --features ci-autoclean cargo-cache
      - name: run ci_autoclean
        run: cargo-cache
  # check for vulns in deps with cargo-audit
  cargo-audit:
    runs-on: ubuntu-latest
    env:
      RUSTC_BACKTRACE: full
    steps:
      - uses: actions/checkout@v1
      - name: install nightly toolchain
        uses: actions-rs/toolchain@v1
        with:
          toolchain: nightly
          override: true
          profile: minimal
      - name: install cargo-audit
        run: cargo install cargo-audit --debug
      - name: run cargo-audit
        # as far as I see, cargo-cache is not using affected code in critical places
        # and since there is no new chrono version out yet, there is not a lot I can do
        run: cargo audit --ignore RUSTSEC-2020-0071 --ignore RUSTSEC-2020-0159

  # check code with clippy
  run_clippy:
    runs-on: ubuntu-latest
    env:
      RUSTC_BACKTRACE: full
    steps:
      - uses: actions/checkout@v1
      # we don't need rustfmt or anything here
      - name: install toolchain
        uses: actions-rs/toolchain@v1
        with:
          toolchain: nightly
          override: true
          components: clippy
      - name: clippy version
        run: cargo clippy --version
      - name: clippy all targets all features
        run: cargo clippy --all-targets --all-features -- -Dwarnings
      - name: clippy ci_autoclean
        run: cargo clippy --no-default-features --features ci-autoclean -- -Dwarnings
      - name: clippy default features
        run: cargo clippy --all-targets --features default -- -Dwarnings
  # make sure code formatting is consistent
  rustfmt:
    runs-on: ubuntu-latest
    env:
      RUSTC_BACKTRACE: full
    steps:
      - uses: actions/checkout@v1
      - name: install toolchain
        uses: actions-rs/toolchain@v1
        with:
          toolchain: nightly
          override: true
          components: rustfmt
      - name: rustfmt check formatting
        run: cargo fmt --all -- --check