# Simplified Commit Queue
#
# (Force) push to "queue-main-$USER" a potential change, and
# this job will push it main if it passes pre-commit and tests,
# which will run in parallel. The push may fail if the commit
# cannot be pushed cleanly because it needs to be rebased, which
# will happen especially if another developer pushes a change at
# roughly the same time.
#
# Please keep this file in sync with queue-dev.yml.

name: Main Branch Commit Queue
on:
  push:
    branches:
      - "queue-main-*"

permissions: read-all

jobs:
  formatting:
    uses: ./.github/workflows/formatting.yml
    permissions:
      contents: write
    with:
      auto_fix: true

  go-test:
    needs: [formatting]
    uses: ./.github/workflows/go_test.yml
    permissions: read-all
    with:
      ref: ${{ needs.formatting.outputs.commit_sha }}

  ui-test:
    needs: [formatting]
    uses: ./.github/workflows/webui_test.yml
    permissions: read-all
    with:
      ref: ${{ needs.formatting.outputs.commit_sha }}

  push-to-main:
    runs-on: ubuntu-latest
    needs: [go-test, ui-test, formatting]
    permissions:
      contents: write
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Push to main
        id: push
        run: |
          COMMIT_TO_PUSH="HEAD"
          if [[ "${{ needs.formatting.outputs.commit_sha }}" != "" ]]; then
            echo "Using formatted commit: ${{ needs.formatting.outputs.commit_sha }}"
            COMMIT_TO_PUSH="${{ needs.formatting.outputs.commit_sha }}"
          fi

          # Get the actual commit SHA that we're pushing
          COMMIT_SHA=$(git rev-parse "${COMMIT_TO_PUSH}")
          echo "commit_sha=${COMMIT_SHA}" >> $GITHUB_OUTPUT

          # Ensure we have the latest main branch reference
          git fetch origin main
          
          # Get the list of commits that will be pushed (in chronological order)
          # Use FETCH_HEAD as the base to avoid rewriting local main reference
          COMMITS_TO_NOTIFY=$(git log FETCH_HEAD.."${COMMIT_TO_PUSH}" --reverse --format="%H" | tr '\n' ' ')
          echo "commits_to_notify=${COMMITS_TO_NOTIFY}" >> $GITHUB_OUTPUT
          echo "Commits to be pushed and notified: ${COMMITS_TO_NOTIFY}"

          git push https://${GITHUB_ACTOR}:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git "${COMMIT_TO_PUSH}":main
        env:
          GITHUB_TOKEN: ${{ github.token }}

      - name: Send Discord notifications for all pushed commits
        if: success()
        env:
          DISCORD_WEBHOOK_FOR_COMMITS: ${{ secrets.DISCORD_WEBHOOK_FOR_COMMITS }}
        run: |
          COMMITS="${{ steps.push.outputs.commits_to_notify }}"
          if [[ -z "$COMMITS" ]]; then
            echo "No commits to notify about"
            exit 0
          fi
          
          echo "Sending Discord notifications for commits: $COMMITS"
          for commit_sha in $COMMITS; do
            echo "Sending notification for commit: $commit_sha"
            git checkout "$commit_sha"
            GITHUB_SHA="$commit_sha" python3 .github/scripts/discord_notify.py
          done
