diff --git a/.github/workflows/backmerge-release.yml b/.github/workflows/backmerge-release.yml index 05cd2c507d1..b8c92f0d4fc 100644 --- a/.github/workflows/backmerge-release.yml +++ b/.github/workflows/backmerge-release.yml @@ -57,36 +57,57 @@ jobs: echo "Merge conflicts detected" fi - - name: Create Pull Request + - name: Create or update Pull Request if: steps.check.outputs.changes == 'true' && steps.merge.outputs.merge_success == 'true' id: create-pr - uses: dotnet/actions-create-pull-request@e8d799aa1f8b17f324f9513832811b0a62f1e0b1 - with: - token: ${{ secrets.GITHUB_TOKEN }} - head: backmerge/release-13.2-to-main - base: main - title: "[Automated] Backmerge release/13.2 to main" - labels: area-engineering-systems - body: | - ## Automated Backmerge - - This PR merges changes from `release/13.2` back into `main`. - - **Commits to merge:** ${{ steps.check.outputs.behind_count }} - - This PR was created automatically to keep `main` up-to-date with release branch changes. - Once approved, it will auto-merge. + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + # Check if a PR already exists for this branch + EXISTING_PR=$(gh pr list --head backmerge/release-13.2-to-main --base main --json number --jq '.[0].number // empty') - --- - *This PR was generated by the [backmerge-release](${{ github.server_url }}/${{ github.repository }}/actions/workflows/backmerge-release.yml) workflow.* + if [ -n "$EXISTING_PR" ]; then + echo "PR #$EXISTING_PR already exists, updating it" + echo "pull_request_number=$EXISTING_PR" >> $GITHUB_OUTPUT + else + PR_BODY="## Automated Backmerge + + This PR merges changes from \`release/13.2\` back into \`main\`. + + **Commits to merge:** ${{ steps.check.outputs.behind_count }} + + This PR was created automatically to keep \`main\` up-to-date with release branch changes. + Once approved, it will auto-merge. + + --- + *This PR was generated by the [backmerge-release](${{ github.server_url }}/${{ github.repository }}/actions/workflows/backmerge-release.yml) workflow.*" + + # Remove leading whitespace from heredoc-style body + PR_BODY=$(echo "$PR_BODY" | sed 's/^ //') + + PR_URL=$(gh pr create \ + --head backmerge/release-13.2-to-main \ + --base main \ + --title "[Automated] Backmerge release/13.2 to main" \ + --body "$PR_BODY" \ + --assignee joperezr,radical \ + --label area-engineering-systems) + + PR_NUMBER=$(echo "$PR_URL" | grep -oE '[0-9]+$') + if [ -z "$PR_NUMBER" ]; then + echo "::error::Failed to extract PR number from: $PR_URL" + exit 1 + fi + echo "pull_request_number=$PR_NUMBER" >> $GITHUB_OUTPUT + echo "Created PR #$PR_NUMBER" + fi - - name: Add assignees and enable auto-merge - if: steps.create-pr.outputs.pull-request-number + - name: Enable auto-merge + if: steps.create-pr.outputs.pull_request_number env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - gh pr edit ${{ steps.create-pr.outputs.pull-request-number }} --add-assignee joperezr,radical - gh pr merge ${{ steps.create-pr.outputs.pull-request-number }} --auto --merge + gh pr merge ${{ steps.create-pr.outputs.pull_request_number }} --auto --merge - name: Create issue for merge conflicts if: steps.check.outputs.changes == 'true' && steps.merge.outputs.merge_success == 'false'