name: Scheduled Checks

on:
  schedule:
    # Every monday at 7 AM
    - cron: 0 7 * * 1

jobs:
  update:
    runs-on: ubuntu-latest
    permissions:
      contents: write
      pull-requests: write
    steps:
      - name: Checkout 🛎
        uses: actions/checkout@v4

      - name: Setup Python
        uses: actions/setup-python@v5
        with:
          python-version: "3.12"

      - name: Set PY
        shell: bash
        run: echo "PY=$(python -VV | sha256sum | cut -d' ' -f1)" >> $GITHUB_ENV

      - name: Cache
        uses: actions/cache@v4
        with:
          path: |
            ~/.cache/pre-commit
            ~/.cache/pip
          key: pre-commit-${{ env.PY }}-${{ hashFiles('.pre-commit-config.yaml') }}

      - name: Install pre-commit
        shell: bash
        run: pip install -U pre-commit

      - name: Run `pre-commit autoupdate`
        shell: bash
        run: pre-commit autoupdate --color=always

      - name: Generate GitHub App Token
        id: app-token
        uses: actions/create-github-app-token@v1
        with:
          app-id: ${{ secrets.COMMIT_BOT_APP_ID }}
          private-key: ${{ secrets.COMMIT_BOT_APP_PRIVATE_KEY }}

      - name: Create Pull Request
        id: create-pr
        uses: peter-evans/create-pull-request@v6
        with:
          token: ${{ steps.app-token.outputs.token }}
          commit-message: "Update pre-commit hooks"
          branch: "fix/update-pre-commit-hooks"
          labels: |
            chore
          delete-branch: true
          base: mealie-next
          title: "chore(auto): Update pre-commit hooks"
          body: "Auto-generated by `.github/workflows/scheduled-checks.yml`"

      - name: Approve PR
        if: steps.create-pr.outputs.pull-request-number
        env:
          GH_TOKEN: ${{ steps.app-token.outputs.token }}
          PR_NUMBER: ${{ steps.create-pr.outputs.pull-request-number }}
          REPO: ${{ github.repository }}
        run: |
          APPROVED=$(gh pr view "$PR_NUMBER" \
            --repo "$REPO" \
            --json reviews \
            --jq '.reviews[] | select(.state == "APPROVED") | .id' \
            | wc -l)

          if [ "$APPROVED" -gt 0 ]; then
            echo "PR already approved"
            exit 0
          fi

          gh pr review "$PR_NUMBER" \
            --repo "$REPO" \
            --approve \
            --body "Auto-approved: Pre-commit hook updates"

      - name: Enable auto-merge
        if: steps.create-pr.outputs.pull-request-number
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          PR_NUMBER: ${{ steps.create-pr.outputs.pull-request-number }}
          REPO: ${{ github.repository }}
        run: |
          gh pr merge "$PR_NUMBER" \
            --repo "$REPO" \
            --auto \
            --squash
