diff --git a/.github/workflows/update-version.yml b/.github/workflows/update-version.yml index 8c61def1..6e1454a2 100644 --- a/.github/workflows/update-version.yml +++ b/.github/workflows/update-version.yml @@ -15,9 +15,7 @@ on: permissions: contents: write pull-requests: write - # Note: Auto-merge may require additional permissions depending on repository settings. - # If auto-merge fails, consider using a Personal Access Token (PAT) or GitHub App token - # with 'pull-requests: write' and 'contents: write' scopes. + actions: write jobs: update-version: @@ -205,15 +203,77 @@ jobs: GH_TOKEN: ${{ secrets.GH_PAT || secrets.GITHUB_TOKEN }} run: | PR_NUMBER="${{ steps.create_pr.outputs.pr_number }}" - echo "🔀 Merging PR #$PR_NUMBER via squash..." + echo "🔀 Attempting to merge PR #$PR_NUMBER via squash..." + + # Check PR status + set +e + PR_STATE=$(gh pr view "$PR_NUMBER" --repo "${{ github.repository }}" --json state --jq '.state' 2>&1) + PR_VIEW_EXIT=$? + set -e + + if [ $PR_VIEW_EXIT -ne 0 ] || [ -z "$PR_STATE" ]; then + echo "⚠️ Could not retrieve PR state, attempting merge anyway..." + else + echo "📊 PR State: $PR_STATE" + if [ "$PR_STATE" != "OPEN" ]; then + echo "⚠️ PR is not open (state: $PR_STATE), skipping merge" + exit 0 + fi + fi + # Brief wait for GitHub to compute PR mergeability sleep 5 - gh pr merge "$PR_NUMBER" \ + + # Check if PR is mergeable + set +e + MERGEABLE=$(gh pr view "$PR_NUMBER" --repo "${{ github.repository }}" --json mergeable --jq '.mergeable' 2>&1) + set -e + echo "📊 Mergeable: $MERGEABLE" + + # Attempt merge with error handling + set +e + MERGE_OUTPUT=$(gh pr merge "$PR_NUMBER" \ --repo "${{ github.repository }}" \ --squash \ --delete-branch \ - --yes - echo "✅ PR #$PR_NUMBER merged successfully" + --yes 2>&1) + MERGE_EXIT=$? + set -e + + if [ $MERGE_EXIT -eq 0 ]; then + echo "✅ PR #$PR_NUMBER merged successfully" + echo "$MERGE_OUTPUT" + else + echo "::warning::Standard merge failed for PR #$PR_NUMBER" + echo "::group::Merge Error Output" + echo "$MERGE_OUTPUT" + echo "::endgroup::" + + # Try with admin flag (bypasses branch protection if user has admin rights) + echo "🔧 Attempting merge with admin override..." + set +e + ADMIN_OUTPUT=$(gh pr merge "$PR_NUMBER" \ + --repo "${{ github.repository }}" \ + --squash \ + --delete-branch \ + --admin 2>&1) + ADMIN_EXIT=$? + set -e + + if [ $ADMIN_EXIT -eq 0 ]; then + echo "✅ PR #$PR_NUMBER merged successfully with admin override" + echo "$ADMIN_OUTPUT" + else + echo "::error::Failed to merge PR #$PR_NUMBER even with admin override" + echo "::group::Admin Merge Error Output" + echo "$ADMIN_OUTPUT" + echo "::endgroup::" + echo "::warning::Consider configuring a Personal Access Token (PAT) with full repo permissions as GH_PAT secret" + echo "::warning::PR #$PR_NUMBER was created but requires manual merge: https://github.com/${{ github.repository }}/pull/$PR_NUMBER" + # Don't exit with error to avoid blocking the workflow + exit 0 + fi + fi - name: Summary run: |