From ec5640ff8d81142a0db12efaf9582e0c255c2a1d Mon Sep 17 00:00:00 2001 From: komagata Date: Thu, 24 Jul 2025 19:15:39 +0900 Subject: [PATCH] =?UTF-8?q?PR=E4=BD=9C=E6=88=90=E6=99=82=E3=81=AB=E8=87=AA?= =?UTF-8?q?=E5=8B=95=E3=81=A7=E3=83=AC=E3=83=93=E3=83=A5=E3=83=AF=E3=83=BC?= =?UTF-8?q?=E3=82=92=E8=A8=AD=E5=AE=9A=E3=81=99=E3=82=8BGitHub=20Actions?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - DraftではないPRが作成されたときに自動実行 - komagataとokuramasafumiを3:2の確率で選択 - PR作成者自身は除外 --- .github/workflows/auto-assign-reviewer.yml | 52 ++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 .github/workflows/auto-assign-reviewer.yml diff --git a/.github/workflows/auto-assign-reviewer.yml b/.github/workflows/auto-assign-reviewer.yml new file mode 100644 index 00000000000..5e4779fd766 --- /dev/null +++ b/.github/workflows/auto-assign-reviewer.yml @@ -0,0 +1,52 @@ +name: Auto Assign Reviewer + +on: + pull_request: + types: [opened, ready_for_review] + +jobs: + assign-reviewer: + if: github.event.pull_request.draft == false + runs-on: ubuntu-latest + permissions: + pull-requests: write + steps: + - name: Assign reviewer based on weighted random selection + uses: actions/github-script@v7 + with: + script: | + const reviewers = [ + { username: 'komagata', weight: 3 }, + { username: 'okuramasafumi', weight: 2 } + ]; + + // Create weighted array + const weightedArray = []; + reviewers.forEach(reviewer => { + for (let i = 0; i < reviewer.weight; i++) { + weightedArray.push(reviewer.username); + } + }); + + // Select random reviewer + const randomIndex = Math.floor(Math.random() * weightedArray.length); + const selectedReviewer = weightedArray[randomIndex]; + + // Get PR author + const prAuthor = context.payload.pull_request.user.login; + + // Don't assign the PR author as reviewer + if (selectedReviewer === prAuthor) { + console.log('Selected reviewer is the PR author, skipping assignment'); + return; + } + + // Assign reviewer + await github.rest.pulls.requestReviewers({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: context.issue.number, + reviewers: [selectedReviewer] + }); + + console.log(`Assigned ${selectedReviewer} as reviewer`); \ No newline at end of file