name: Tests

on:
  push:
    branches:
      - develop
  pull_request:
  workflow_dispatch:

jobs:
  clippy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: Get nightly version to use
        id: nightly
        run: echo "version=$(cat .github/nightly-version)" >> $GITHUB_OUTPUT

      - name: Build Dependencies
        uses: ./.github/actions/build-dependencies
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          # Clippy requires nightly due to serai-runtime requiring it
          rust-toolchain: ${{ steps.nightly.outputs.version }}
          rust-components: clippy

      - name: Run Clippy
        run: cargo clippy --all-features --tests -- -D warnings -A dead_code

  deny:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: Advisory Cache
        uses: actions/cache@v3
        with:
          path: ~/.cargo/advisory-db
          key: rust-advisory-db

      - name: Install cargo
        uses: dtolnay/rust-toolchain@stable

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

      - name: Run cargo deny
        run: cargo deny -L error --all-features check

  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: Test Dependencies
        uses: ./.github/actions/test-dependencies
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}

      - name: Run Tests
        run: cargo test --all-features

  fmt:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: Get nightly version to use
        id: nightly
        run: echo "version=$(cat .github/nightly-version)" >> $GITHUB_OUTPUT

      - name: Install rustfmt
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ steps.nightly.outputs.version }}
          components: rustfmt

      - name: Run rustfmt
        run: cargo +${{ steps.nightly.outputs.version }} fmt -- --check