-
Notifications
You must be signed in to change notification settings - Fork 2
89 lines (74 loc) · 2.94 KB
/
fe-d-n-label-automation.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
name: Update PR Labels Daily
on:
schedule:
- cron: "0 15 * * *" # 매일 밤 12시 실행
workflow_dispatch: # 수동 실행 허용
pull_request: # 스크립트 동작 테스트 목적
branches:
- develop
jobs:
update-labels:
runs-on: ubuntu-latest
steps:
- name: Update PR Labels with github-script
uses: actions/github-script@v7
with:
script: |
const owner = context.repo.owner;
const repo = context.repo.repo;
// 열려 있는 모든 PR을 가져온다.
const pullRequests = await github.rest.pulls.list({
owner,
repo,
state: 'open',
});
for (const pr of pullRequests.data) {
const { number, labels } = pr;
// 열려 있는 PR에 FE 라벨이 달려있는지 확인한다.
const hasFeLabel = labels.some(label => label.name === '🫧 FE');
if (!hasFeLabel) {
console.log(`PR #${number} does not have 'FE' label. Skipping.`);
continue;
}
// 'D-'로 시작하는 라벨이 있는지 확인한다.
const dLabel = labels.find(label => label.name.startsWith('D-'));
// 'D-'로 시작하는 라벨이 없다면 D-3' 라벨을 추가하고 끝낸다.
if (!dLabel) {
await github.rest.issues.addLabels({
owner,
repo,
issue_number: number,
labels: ['D-3'],
});
console.log(`Added 'D-3' label to PR #${number}`);
continue;
}
// 'D-0'이면 카운팅을 스킵한다.
if (dLabel.name === 'D-0') {
console.log(`PR #${number} already at 'D-0'. Skipping decrement.`);
continue;
}
// 'D-n'로 시작하는 라벨이 있다면 n 값을 가져온다.
const currentDay = parseInt(dLabel.name.split('-')[1], 10);
if (isNaN(currentDay) || currentDay < 1) {
console.log(`PR #${number} 유효하지 않은 라벨이거나 연산할 수 없는 라벨 '${dLabel.name}'.`);
continue;
}
// 현재 'D-n' 라벨을 제거한다.
await github.rest.issues.removeLabel({
owner,
repo,
issue_number: number,
name: dLabel.name,
});
// 'D-(n-1)' 라벨을 새로 추가한다.
const newDay = currentDay - 1;
const newLabel = `D-${newDay}`;
await github.rest.issues.addLabels({
owner,
repo,
issue_number: number,
labels: [newLabel],
});
console.log(`Updated PR #${number}: '${dLabel.name}' -> '${newLabel}'`);
}