name: Update Supported Enterprise Server Versions

on:
  schedule:
    - cron: "0 0 * * *"
  workflow_dispatch:
  pull_request:
    branches:
      - main
    paths:
      - .github/workflows/update-supported-enterprise-server-versions.yml
      - .github/workflows/update-supported-enterprise-server-versions/update.py

jobs:
  update-supported-enterprise-server-versions:
    name: Update Supported Enterprise Server Versions
    timeout-minutes: 45
    runs-on: ubuntu-slim
    if: github.repository == 'github/codeql-action'
    permissions:
      contents: write # needed to push commits
      pull-requests: write # needed to create pull request

    steps:
      - name: Setup Python
        uses: actions/setup-python@v6
        with:
          python-version: "3.13"
      - name: Checkout CodeQL Action
        uses: actions/checkout@v6
      - name: Checkout Enterprise Releases
        uses: actions/checkout@v6
        with:
          repository: github/enterprise-releases
          token: ${{ secrets.ENTERPRISE_RELEASE_TOKEN }}
          path: ${{ github.workspace }}/enterprise-releases/
          sparse-checkout: releases.json
      - name: Update Supported Enterprise Server Versions
        run: |
          cd ./.github/workflows/update-supported-enterprise-server-versions/
          python3 -m pip install pipenv
          pipenv install
          pipenv run ./update.py
          rm --recursive "$ENTERPRISE_RELEASES_PATH"
          npm ci
          npm run build
        env:
          ENTERPRISE_RELEASES_PATH: ${{ github.workspace }}/enterprise-releases/

      - name: Update git config
        run: |
          git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
          git config --global user.name "github-actions[bot]"

      - name: Commit changes
        id: prepare-commit
        run: |
          if [[ -z $(git status --porcelain) ]]; then
            echo "No changes to commit"
            echo "committed=false" >> $GITHUB_OUTPUT
          else
            git checkout -b update-supported-enterprise-server-versions
            git add .
            git commit --message "Update supported GitHub Enterprise Server versions"

            echo "committed=true" >> $GITHUB_OUTPUT
          fi

      - name: Open PR
        if: github.event_name != 'pull_request' && steps.prepare-commit.outputs.committed == 'true'
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          git push origin update-supported-enterprise-server-versions

          body="This PR updates the list of supported GitHub Enterprise Server versions, either because a new "
          body+="version is about to be feature frozen, or because an old release has been deprecated."
          body+=$'\n\n'
          body+="If an old release has been deprecated, please follow the instructions in CONTRIBUTING.md to "
          body+="deprecate the corresponding version of CodeQL."

          gh pr create --draft \
            --title "Update supported GitHub Enterprise Server versions" \
            --body "$body"
