name: Quality

on:
  push:
    branches: [main]
  pull_request:

permissions:
  contents: write

jobs:
  format:
    name: Auto Format
    runs-on: macos-latest

    steps:
      - name: Checkout
        uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
        with:
          ref: ${{ (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository && github.head_ref) || github.ref }}
          token: ${{ secrets.GITHUB_TOKEN }}

      - name: Cache Homebrew
        uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
        with:
          path: |
            ~/Library/Caches/Homebrew
            /usr/local/Cellar/shfmt
            /usr/local/Cellar/shellcheck
          key: ${{ runner.os }}-brew-quality-${{ hashFiles('**/Brewfile') }}
          restore-keys: |
            ${{ runner.os }}-brew-quality-

      - name: Install tools
        run: brew install shfmt shellcheck

      - name: Set up Go
        uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff # v5
        with:
          go-version: '1.24'

      - name: Format all code
        run: |
          echo "Formatting shell scripts..."
          ./scripts/format.sh
          echo "Formatting Go code..."
          gofmt -w ./cmd
          echo "✓ All code formatted"

      - name: Commit formatting changes
        if: ${{ github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository }}
        run: |
          git config user.name "Tw93"
          git config user.email "tw93@qq.com"
          if [[ -n $(git status --porcelain) ]]; then
            git add .
            git commit -m "chore: auto format code"
            git push
            echo "✓ Formatting changes committed"
          else
            echo "✓ No formatting changes needed"
          fi

  quality:
    name: Code Quality
    runs-on: macos-latest
    needs: format

    steps:
      - name: Checkout
        uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
        with:
          ref: ${{ (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository && github.head_ref) || github.ref }}

      - name: Cache Homebrew
        uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
        with:
          path: |
            ~/Library/Caches/Homebrew
            /usr/local/Cellar/shfmt
            /usr/local/Cellar/shellcheck
          key: ${{ runner.os }}-brew-quality-${{ hashFiles('**/Brewfile') }}
          restore-keys: |
            ${{ runner.os }}-brew-quality-

      - name: Install tools
        run: brew install shfmt shellcheck

      - name: ShellCheck
        run: |
          echo "Running ShellCheck on all shell scripts..."
          shellcheck mole
          shellcheck bin/*.sh
          find lib -name "*.sh" -exec shellcheck {} +
          echo "✓ ShellCheck passed"

      - name: Syntax check
        run: |
          echo "Checking Bash syntax..."
          bash -n mole
          for script in bin/*.sh; do
            bash -n "$script"
          done
          find lib -name "*.sh" | while read -r script; do
            bash -n "$script"
          done
          echo "✓ All scripts have valid syntax"
