88 - ' **'
99
1010jobs :
11- random-reviwer :
11+ random-reviewer :
1212 runs-on : ubuntu-latest
1313 steps :
14- - id : random_reviwer
15- uses : actions/github-script@v3
14+ - id : random_reviewer
15+ uses : actions/github-script@v6
1616 with :
1717 github-token : ${{ secrets.GITHUB_TOKEN }}
1818 script : |
1919 const myId = '${{ github.event.pull_request.user.login }}';
2020 const idList = ['yeolyi', 'Limchansol', 'goranikin', 'onemeee'];
21- const candidate = idList.filter(id => id !== myId);
21+ const candidateList = idList.filter(id => id !== myId);
2222
23- const idx = Math.floor(Math.random() * candidate.length);
24- const randomReviewer = candidate[idx];
23+ const recentPRs = await github.rest.pulls.list({
24+ owner: context.repo.owner,
25+ repo: context.repo.repo,
26+ state: 'all',
27+ sort: 'updated',
28+ direction: 'desc',
29+ per_page: 10
30+ });
31+
32+ const reviewerPromises = recentPRs.data.map(pr =>
33+ github.rest.pulls.listRequestedReviewers({
34+ owner: context.repo.owner,
35+ repo: context.repo.repo,
36+ pull_number: pr.number
37+ })
38+ );
39+
40+ const reviewersResults = await Promise.all(reviewerPromises);
41+
42+ const reviewCounts = {};
43+ for (const reviewer of candidateList) {
44+ reviewCounts[reviewer] = 0;
45+ }
46+
47+ for (const reviewers of reviewersResults) {
48+ for (const reviewer of reviewers.data.users) {
49+ if (reviewCounts[reviewer.login] !== undefined) {
50+ reviewCounts[reviewer.login]++;
51+ }
52+ }
53+ }
54+
55+ const minCount = Math.min(...Object.values(reviewCounts));
56+ const leastAssignedReviewers = Object.keys(reviewCounts).filter(
57+ reviewer => reviewCounts[reviewer] === minCount
58+ );
59+ const randomReviewer = leastAssignedReviewers[
60+ Math.floor(Math.random() * leastAssignedReviewers.length)
61+ ];
2562
2663 const deadline = new Date(Date.now() + 3 * 24 * 60 * 60 * 1000);
2764 const comment = `@${randomReviewer}님 ${deadline.toLocaleDateString('ko-KR')}까지 리뷰 부탁드립니다 🎉`
@@ -32,12 +69,12 @@ jobs:
3269 uses : mshick/add-pr-comment@v1
3370 with :
3471 message : |
35- ${{ steps.random_reviwer .outputs.comment }}
72+ ${{ steps.random_reviewer .outputs.comment }}
3673 repo-token : ${{ secrets.GITHUB_TOKEN }}
3774 repo-token-user-login : ' github-actions[bot]'
3875
3976 - name : Add Pull Request Reviewer
4077 uses : madrapps/add-reviewers@v1
4178 with :
42- reviewers : ${{ steps.random_reviwer .outputs.reviewer }}
79+ reviewers : ${{ steps.random_reviewer .outputs.reviewer }}
4380 token : ${{ secrets.GITHUB_TOKEN }}
0 commit comments