---
name: PR cleanliness
on: [pull_request]

permissions:
  contents: read

jobs:
  pr_clean:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
        with:
          fetch-depth: '0'
          persist-credentials: false
      - name: Check for added-and-deleted files
        run: |
          git fetch --quiet origin "$GITHUB_BASE_REF"
          base="$(git merge-base "origin/$GITHUB_BASE_REF" 'HEAD^2')"
          ad="$(git log "$base..HEAD^2" --pretty=tformat: --name-status --diff-filter=AD |
                cut --fields 2 | sort | uniq --repeated)"
          if [[ -n "$ad" ]]; then
            printf 'The following files were both added and deleted in this PR:\n%s\n' "$ad"
            exit 1
          fi
      - name: Check for added-and-modified images
        run: |
          git fetch --quiet origin "$GITHUB_BASE_REF"
          base="$(git merge-base "origin/$GITHUB_BASE_REF" 'HEAD^2')"
          am="$(git log "$base..HEAD^2" --pretty=tformat: --name-status --diff-filter=AM |
                cut --fields 2 | sort | uniq --repeated |
                grep -E '\.(png|pdf|ps|eps|svg)' || true)"
          if [[ -n "$am" ]]; then
            printf 'The following images were both added and modified in this PR:\n%s\n' "$am"
            exit 1
          fi
      - name: Check for invalid backports to -doc branches
        if: endsWith(github.base_ref, '-doc')
        run: |
          git fetch --quiet origin "$GITHUB_BASE_REF"
          base="$(git merge-base "origin/$GITHUB_BASE_REF" 'HEAD^2')"
          lib="$(git log "$base..HEAD^2" --pretty=tformat: --name-status -- lib src |
                 cut --fields 2 | sort || true)"
          if [[ -n "$lib" ]]; then
            printf 'Changes to the following files have no effect and should not be backported:\n%s\n' "$lib"
            exit 1
          fi
      - name: Check for branches opened against main
        if: github.ref_name == 'main'
        run: |
          echo 'PR branch should not be main.'
          echo 'See https://matplotlib.org/devdocs/devel/development_workflow.html#make-a-new-feature-branch'
          exit 1
