diff --git a/.github/workflows/auto-assign-prs.yml b/.github/workflows/auto-assign-prs.yml new file mode 100644 index 00000000000..270e7af55bb --- /dev/null +++ b/.github/workflows/auto-assign-prs.yml @@ -0,0 +1,60 @@ +name: Auto Assign Reviewers + +on: + pull_request: + types: [opened, edited, review_requested] + +jobs: + assign-reviewers: + runs-on: ubuntu-latest + + steps: + - name: Check out the repository + uses: actions/checkout@v4 + + - name: Assign reviewers as assignees + uses: actions/github-script@v6 + with: + github-token: ${{ secrets.PRBOT_PAT }} + script: | + const { owner, repo } = context.repo; + + async function getCurrentPR() { + if (context.payload.pull_request) { + return context.payload.pull_request; + } + + const allPRs = await github.rest.pulls.list({ + owner, + repo, + state: 'open', + }); + + return allPRs.data.find(pr => pr.head.sha === context.sha); + } + + const pr = await getCurrentPR(); + if (!pr) { + console.log('No matching PR found.'); + return; + } + + console.log(`Processing PR #${pr.number}`); + + const reviewers = pr.requested_reviewers.map(reviewer => reviewer.login); + + if (reviewers.length === 0) { + console.log('No reviewers found for this PR.'); + return; + } + + console.log(`Current reviewers: ${reviewers.join(', ')}`); + + await github.rest.issues.addAssignees({ + owner, + repo, + issue_number: pr.number, + assignees: reviewers, + }); + + console.log(`Assigned ${reviewers.join(', ')} as assignees to PR #${pr.number}`);