@@ -3,18 +3,18 @@ name: Auto Assign, Review, and Merge
33on :
44 pull_request :
55 types :
6- [
7- opened,
8- labeled,
9- unlabeled,
10- review_requested,
11- review_request_removed,
12- ]
6+ - opened
7+ - labeled
8+ - unlabeled
9+ - review_requested
10+ - review_request_removed
1311 pull_request_review :
14- types : [submitted]
12+ types :
13+ - submitted
1514
1615jobs :
1716 auto-assign :
17+ if : github.event_name == 'pull_request'
1818 runs-on : ubuntu-latest
1919 steps :
2020 - name : Checkout repository
3737 });
3838
3939 auto-reviewers :
40+ if : github.event_name == 'pull_request'
4041 runs-on : ubuntu-latest
4142 needs : auto-assign
4243 steps :
@@ -53,25 +54,31 @@ jobs:
5354 with :
5455 script : |
5556 const prNumber = context.payload.pull_request.number;
57+ const prAuthor = context.payload.pull_request.user.login;
5658 const assignees = context.payload.pull_request.assignees.map(a => a.login);
5759
5860 // Define reviewers for each label
59- const BE_reviewers = ['summersummerwhy', 'ezcolin2', 'Tolerblanc'].filter(r => !assignees.includes(r));
60- const FE_reviewers = ['yewonJin', 'djk01281'].filter(r => !assignees.includes(r));
61- const doc_reviewers = ['summersummerwhy', 'ezcolin2', 'Tolerblanc', 'yewonJin', 'djk01281'].filter(r => !assignees.includes(r));
61+ const BE_reviewers = ['summersummerwhy', 'ezcolin2', 'Tolerblanc'];
62+ const FE_reviewers = ['yewonJin', 'djk01281'];
63+ const doc_reviewers = ['summersummerwhy', 'ezcolin2', 'Tolerblanc', 'yewonJin', 'djk01281'];
64+
65+ // Function to filter out assignees and PR author
66+ const filterReviewers = (reviewers) => {
67+ return reviewers.filter(r => !assignees.includes(r) && r !== prAuthor);
68+ };
6269
6370 // Check the labels on the PR and assign appropriate reviewers
6471 const labels = context.payload.pull_request.labels.map(label => label.name);
6572 let reviewersToAdd = [];
6673
6774 if (labels.includes('🐧🚀😶🌫️ BE')) {
68- reviewersToAdd.push(...BE_reviewers);
75+ reviewersToAdd.push(...filterReviewers( BE_reviewers) );
6976 }
7077 if (labels.includes('🐳🐣 FE')) {
71- reviewersToAdd.push(...FE_reviewers);
78+ reviewersToAdd.push(...filterReviewers( FE_reviewers) );
7279 }
7380 if (labels.includes('📚 Documentation')) {
74- reviewersToAdd.push(...doc_reviewers);
81+ reviewersToAdd.push(...filterReviewers( doc_reviewers) );
7582 }
7683
7784 // Remove duplicates if any
8895 }
8996
9097 auto-merge :
98+ if : github.event_name == 'pull_request_review' && github.event.action == 'submitted' && github.event.review.state == 'approved'
9199 runs-on : ubuntu-latest
92100 needs : [auto-assign, auto-reviewers]
93- if : github.event.pull_request.merged == false
94101 steps :
95102 - name : Checkout repository
96103 uses : actions/checkout@v2
@@ -106,6 +113,17 @@ jobs:
106113 script : |
107114 const prNumber = context.payload.pull_request.number;
108115
116+ // Check if PR is already merged
117+ const pr = await github.rest.pulls.get({
118+ owner: context.repo.owner,
119+ repo: context.repo.repo,
120+ pull_number: prNumber
121+ });
122+
123+ if (pr.data.merged) {
124+ return;
125+ }
126+
109127 // Check if PR is approved
110128 const reviews = await github.rest.pulls.listReviews({
111129 owner: context.repo.owner,
0 commit comments