Skip to content
This repository was archived by the owner on Jan 2, 2026. It is now read-only.

Commit 3dffdcd

Browse files
authored
✨ 더 공평한 리뷰어 선정 (#398)
1 parent 71d55a7 commit 3dffdcd

File tree

2 files changed

+47
-10
lines changed

2 files changed

+47
-10
lines changed

.github/workflows/playwright.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
name: Playwright Tests
22
on:
33
push:
4-
branches: '**'
4+
branches: ['**']
55
pull_request:
6-
branches: '**'
6+
branches: ['**']
77
jobs:
88
test:
99
timeout-minutes: 60

.github/workflows/random_reviewer.yaml

Lines changed: 45 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,57 @@ on:
88
- '**'
99

1010
jobs:
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

Comments
 (0)