name: Check pre-commit rules

on:
  pull_request:
    types: [opened, reopened, synchronize]

permissions:
  contents: read

jobs:
  pre_commit_check:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          ref: ${{ github.base_ref }}
          fetch-depth: 20
      - name: Fetch head and base refs
        # This is necessary for pre-commit to check the changes in the PR branch (and to set origin/HEAD and HEAD refs)
        run: |
          git fetch origin ${{ github.event.pull_request.head.sha }}:pr_ref
          git checkout pr_ref
          git remote set-head origin --auto
          git merge-base origin/HEAD HEAD || ( echo "Your PR is far behind origin/HEAD, please rebase" && exit 1 )
      - name: Set up Python environment
        uses: actions/setup-python@master
        with:
          python-version: v3.8
      - name: Install python packages
        run: |
          pip install pre-commit
          pre-commit install-hooks
      - name: Run pre-commit and check for any changes
        run: |
          echo "Commits being checked:"
          git log --oneline --no-decorate origin/HEAD..HEAD
          echo ""
          if ! pre-commit run --from-ref origin/HEAD --to-ref HEAD --hook-stage manual --show-diff-on-failure ; then
            echo ""
            echo "::notice::It looks like the commits in this PR have been made without having pre-commit hooks installed."
            echo "::notice::Please see https://github.com/espressif/esp-protocols/CONTRIBUTING.md for instructions."
            echo ""
            exit 1
          fi
