name: Lint and Format

on:
  # Run on pushes to master and pushed tags, and on pull requests against master, but ignore the docs folder
  push:
    branches: [ master ]
    tags:
      - 'v*'
    paths:
      - '**'
      - '!docs/**'
      - '.github/**'
  pull_request:
    branches: [ master ]
    paths:
      - '**'
      - '!docs/**'
      - '.github/**'
  merge_group:

concurrency:
  group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
  cancel-in-progress: true

jobs:
  wpiformat:
    name: "wpiformat"
    runs-on: ubuntu-22.04
    steps:
      - uses: actions/checkout@v4
      - name: Fetch all history and metadata
        run: |
          git fetch --prune --unshallow
          git checkout -b pr
          git branch -f master origin/master
      - name: Set up Python 3.8
        uses: actions/setup-python@v4
        with:
          python-version: 3.11
      - name: Install wpiformat
        run: pip3 install wpiformat==2024.45
      - name: Run
        run: wpiformat
      - name: Check output
        run: git --no-pager diff --exit-code HEAD
      - name: Generate diff
        run: git diff HEAD > wpiformat-fixes.patch
        if: ${{ failure() }}
      - uses: actions/upload-artifact@v4
        with:
          name: wpiformat fixes
          path: wpiformat-fixes.patch
        if: ${{ failure() }}
  javaformat:
    name: "Java Formatting"
    runs-on: ubuntu-22.04
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - uses: actions/setup-java@v4
        with:
          java-version: 17
          distribution: temurin
      - run: ./gradlew spotlessCheck
        name: Run spotless

  client-lint-format:
    name: "PhotonClient Lint and Formatting"
    defaults:
      run:
        working-directory: photon-client
    runs-on: ubuntu-22.04
    steps:
      - uses: actions/checkout@v4
      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 18
      - name: Install Dependencies
        run: npm ci
      - name: Check Linting
        run: npm run lint-ci
      - name: Check Formatting
        run: npm run format-ci
  server-index:
    name: "Check server index.html not changed"
    runs-on: ubuntu-22.04
    steps:
      - uses: actions/checkout@v4
      - name: Fetch all history and metadata
        run: |
          git fetch --prune --unshallow
          git checkout -b pr
          git branch -f master origin/master
      - name: Check index.html not changed
        run: git --no-pager diff --exit-code origin/master photon-server/src/main/resources/web/index.html
