diff --git a/.github/workflows/auto-pr.yml b/.github/workflows/auto-pr.yml new file mode 100644 index 0000000..c1e6d5f --- /dev/null +++ b/.github/workflows/auto-pr.yml @@ -0,0 +1,59 @@ +name: Auto Create or Reopen PR + +on: + push: + branches: + - 'PR/*' + +jobs: + manage-pr: + runs-on: ubuntu-latest + permissions: + pull-requests: write + contents: read + steps: + - name: Check out repository + uses: actions/checkout@v4 + + - name: Create or Reopen PR + uses: actions/github-script@v7 + with: + script: | + const branchName = context.ref.replace('refs/heads/', ''); + const targetBranch = 'public'; + + // 1. Check if a PR already exists for this branch (open or closed) + const { data: prs } = await github.rest.pulls.list({ + owner: context.repo.owner, + repo: context.repo.repo, + head: `${context.repo.owner}:${branchName}`, + state: 'all' + }); + + if (prs.length > 0) { + const latestPr = prs[0]; + + // 2. If the PR is closed and was NOT merged, reopen it + if (latestPr.state === 'closed' && !latestPr.merged_at) { + console.log(`Reopening existing PR #${latestPr.number}`); + await github.rest.pulls.update({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: latestPr.number, + state: 'open' + }); + } else { + console.log('PR is already open or was previously merged. No action taken.'); + } + } else { + // 3. If no PR exists, create a new one + console.log(`Creating new PR for ${branchName}`); + await github.rest.pulls.create({ + owner: context.repo.owner, + repo: context.repo.repo, + title: `Auto PR: ${branchName}`, + head: branchName, + base: targetBranch, + body: 'This Pull Request was automatically generated by GitHub Actions.' + }); + }