torc 0.22.0

Workflow management system
name: Lint

on:
  pull_request:
    branches:
      - main
  push:
    branches:
      - main

jobs:
  lint:
    name: Lint and Format
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v6

      - name: Setup Rust
        uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt, clippy

      - name: Cache cargo registry
        uses: actions/cache@v5
        with:
          path: ~/.cargo/registry
          key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
          restore-keys: |
            ${{ runner.os }}-cargo-registry-

      - name: Cache cargo index
        uses: actions/cache@v5
        with:
          path: ~/.cargo/git
          key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}
          restore-keys: |
            ${{ runner.os }}-cargo-index-

      - name: Cache cargo build
        uses: actions/cache@v5
        with:
          path: target
          key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }}
          restore-keys: |
            ${{ runner.os }}-cargo-build-target-

      - name: Check Rust formatting
        run: cargo fmt -- --check

      - name: Setup database for sqlx
        run: |
          cargo install sqlx-cli --no-default-features --features sqlite
          mkdir -p db/sqlite
          DATABASE_URL=sqlite:db/sqlite/dev.db sqlx database create
          DATABASE_URL=sqlite:db/sqlite/dev.db sqlx migrate run --source torc-server/migrations

      - name: Run Clippy
        run: cargo clippy --all --all-targets --all-features -- -D warnings

      - name: Check Rust-owned OpenAPI artifacts
        run: |
          cargo test --lib --no-default-features --features openapi-codegen
          bash api/check_openapi_codegen_parity.sh

      - name: Install dprint
        run: |
          curl -fsSL https://dprint.dev/install.sh | sh
          echo "$HOME/.dprint/bin" >> $GITHUB_PATH

      - name: Check markdown formatting
        run: ~/.dprint/bin/dprint check

      - name: Run shellcheck
        run: |
          find . -name '*.sh' -not -path './target/*' -not -path './.venv/*' -not -path '*/\.venv/*' | xargs shellcheck