Skip to content

Commit 5c88eff

Browse files
committed
chore: PR 관련 액션 작성
- 자동 assignee 지정 - 자동 reviewer 지정 - approve 상태일 경우 자동으로 머지하며 브랜치 삭제
1 parent 1c81a1a commit 5c88eff

File tree

1 file changed

+135
-0
lines changed

1 file changed

+135
-0
lines changed
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
name: Auto Assign, Review, and Merge
2+
3+
on:
4+
pull_request:
5+
types:
6+
[
7+
opened,
8+
labeled,
9+
unlabeled,
10+
review_requested,
11+
review_request_removed,
12+
]
13+
pull_request_review:
14+
types: [submitted]
15+
16+
jobs:
17+
auto-assign:
18+
runs-on: ubuntu-latest
19+
steps:
20+
- name: Checkout repository
21+
uses: actions/checkout@v2
22+
23+
- name: Set up Node.js
24+
uses: actions/setup-node@v2
25+
with:
26+
node-version: "16"
27+
28+
- name: Assign PR creator as Assignee
29+
uses: actions/github-script@v6
30+
with:
31+
script: |
32+
const { github, context } = require("@actions/github");
33+
await github.rest.issues.addAssignees({
34+
owner: context.repo.owner,
35+
repo: context.repo.repo,
36+
issue_number: context.payload.pull_request.number,
37+
assignees: [context.actor]
38+
});
39+
40+
auto-reviewers:
41+
runs-on: ubuntu-latest
42+
needs: auto-assign
43+
steps:
44+
- name: Checkout repository
45+
uses: actions/checkout@v2
46+
47+
- name: Set up Node.js
48+
uses: actions/setup-node@v2
49+
with:
50+
node-version: "16"
51+
52+
- name: Add reviewers based on labels
53+
uses: actions/github-script@v6
54+
with:
55+
script: |
56+
const { github, context } = require("@actions/github");
57+
const prNumber = context.payload.pull_request.number;
58+
const assignees = context.payload.pull_request.assignees.map(a => a.login);
59+
60+
// Define reviewers for each label
61+
const BE_reviewers = ['summersummerwhy', 'ezcolin2', 'Tolerblanc'].filter(r => !assignees.includes(r));
62+
const FE_reviewers = ['yewonJin', 'djk01281'].filter(r => !assignees.includes(r));
63+
const doc_reviewers = ['summersummerwhy', 'ezcolin2', 'Tolerblanc', 'yewonJin', 'djk01281'].filter(r => !assignees.includes(r));
64+
65+
// Check the labels on the PR and assign appropriate reviewers
66+
const labels = context.payload.pull_request.labels.map(label => label.name);
67+
let reviewersToAdd = [];
68+
69+
if (labels.includes('🐧🚀😶‍🌫️ BE')) {
70+
reviewersToAdd.push(...BE_reviewers);
71+
}
72+
if (labels.includes('🐳🐣 FE')) {
73+
reviewersToAdd.push(...FE_reviewers);
74+
}
75+
if (labels.includes('📚 Documentation')) {
76+
reviewersToAdd.push(...doc_reviewers);
77+
}
78+
79+
// Remove duplicates if any
80+
reviewersToAdd = [...new Set(reviewersToAdd)];
81+
82+
// Request reviewers
83+
if (reviewersToAdd.length > 0) {
84+
await github.rest.pulls.requestReviewers({
85+
owner: context.repo.owner,
86+
repo: context.repo.repo,
87+
pull_number: prNumber,
88+
reviewers: reviewersToAdd
89+
});
90+
}
91+
92+
auto-merge:
93+
runs-on: ubuntu-latest
94+
needs: [auto-assign, auto-reviewers]
95+
if: github.event.pull_request.merged == false
96+
steps:
97+
- name: Checkout repository
98+
uses: actions/checkout@v2
99+
100+
- name: Set up Node.js
101+
uses: actions/setup-node@v2
102+
with:
103+
node-version: "16"
104+
105+
- name: Merge and Close PR if Approved
106+
uses: actions/github-script@v6
107+
with:
108+
script: |
109+
const { github, context } = require("@actions/github");
110+
const prNumber = context.payload.pull_request.number;
111+
112+
// Check if PR is approved
113+
const reviews = await github.rest.pulls.listReviews({
114+
owner: context.repo.owner,
115+
repo: context.repo.repo,
116+
pull_number: prNumber
117+
});
118+
119+
const approved = reviews.data.some(review => review.state === 'APPROVED');
120+
121+
// If approved, merge the PR
122+
if (approved) {
123+
await github.rest.pulls.merge({
124+
owner: context.repo.owner,
125+
repo: context.repo.repo,
126+
pull_number: prNumber
127+
});
128+
129+
// Delete the branch after merge
130+
await github.rest.git.deleteRef({
131+
owner: context.repo.owner,
132+
repo: context.repo.repo,
133+
ref: `heads/${branchName}`
134+
});
135+
}

0 commit comments

Comments
 (0)