name: Rust Formatting

on:
  push:
  pull_request:

jobs:
  format:
    name: Format
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          persist-credentials: false

      - name: Install rust
        uses: ./.forgejo/actions/rust-toolchain
        with:
          toolchain: "nightly"
          components: "rustfmt"

      - name: Check formatting
        run: |
          cargo +nightly fmt --all -- --check

  clippy:
    name: Clippy
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          persist-credentials: false

      - name: Install rust
        uses: ./.forgejo/actions/rust-toolchain

      - uses: https://github.com/actions/create-github-app-token@v2
        id: app-token
        with:
          app-id: ${{ vars.GH_APP_ID }}
          private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}
          github-api-url: https://api.github.com
          owner: ${{ vars.GH_APP_OWNER }}
          repositories: ""
      - name: Install sccache
        uses: ./.forgejo/actions/sccache
        with:
          token: ${{ steps.app-token.outputs.token }}
      - run: sudo apt-get update
      - name: Install system dependencies
        uses: https://github.com/awalsh128/cache-apt-pkgs-action@v1
        with:
          packages: clang liburing-dev
          version: 1
      - name: Cache Rust registry
        uses: actions/cache@v3
        with:
          path: |
            ~/.cargo/git
            !~/.cargo/git/checkouts
            ~/.cargo/registry
            !~/.cargo/registry/src
          key: rust-registry-${{hashFiles('**/Cargo.lock') }}
      - name: Check formatting
        run: |
          cargo clippy \
            --workspace \
            --locked \
            --profile test \
            -- \
            -D warnings

      - name: Show sccache stats
        run: sccache --show-stats
