@@ -11,13 +11,22 @@ jobs:
11
11
with :
12
12
fetch-depth : 0
13
13
14
- - name : Check for 1. missing end line breaks and 2. control characters in filenames
14
+ # PR 라벨 확인
15
+ - name : Get PR labels
16
+ id : pr-labels
17
+ run : |
18
+ labels=$(gh pr view ${{ github.event.pull_request.number }} --json labels -q '.labels[].name' || echo "")
19
+ echo "labels=$labels" >> $GITHUB_OUTPUT
20
+ env :
21
+ GH_TOKEN : ${{ github.token }}
22
+
23
+ - name : Check for 1. missing end line breaks and 2. control characters in filenames and 3. filename rules
15
24
run : |
16
25
# 따옴표를 제거하고 파일 목록 가져오기
17
26
files=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.sha }} | tr -d '"')
18
27
echo "변경된 파일 목록:"
19
28
echo "$files"
20
-
29
+
21
30
success=true
22
31
23
32
# 줄바꿈 체크
@@ -35,13 +44,13 @@ jobs:
35
44
for file in $files; do
36
45
# basename으로 파일명만 추출하고 따옴표 제거
37
46
filename=$(basename "$file" | tr -d '"')
38
-
47
+
39
48
# 백슬래시로 시작하는 제어문자들 체크 (\b, \n, \r, \t 등)
40
49
if printf '%q' "$filename" | grep -q '\\[bnrtfv]'; then
41
50
echo "- $file (제어문자 포함)" >> $GITHUB_STEP_SUMMARY
42
51
success=false
43
52
fi
44
-
53
+
45
54
# 일반적인 제어문자들 체크 (0x00-0x1F, 0x7F)
46
55
if echo -n "$filename" | LC_ALL=C grep -q '[[:cntrl:]]'; then
47
56
echo "- $file (제어문자 포함)" >> $GITHUB_STEP_SUMMARY
@@ -53,17 +62,37 @@ jobs:
53
62
echo "- $file (제어문자 포함)" >> $GITHUB_STEP_SUMMARY
54
63
success=false
55
64
fi
56
-
65
+
57
66
# 이스케이프 시퀀스 체크
58
67
if [[ "$filename" =~ (\\[0-7]{1,3}|\\x[0-9a-fA-F]{1,2}) ]]; then
59
68
echo "- $file (제어문자 포함)" >> $GITHUB_STEP_SUMMARY
60
69
success=false
61
70
fi
62
71
done
63
72
73
+ # maintenance 라벨이 없는 경우에만 파일명 규칙 체크
74
+ if [[ ! "${{ steps.pr-labels.outputs.labels }}" =~ "maintenance" ]]; then
75
+ echo -e "\n## 파일명 규칙 위반" >> $GITHUB_STEP_SUMMARY
76
+ for file in $files; do
77
+ if [ -f "$file" ]; then
78
+ filename=$(basename "$file" | tr -d '"')
79
+ github_username="${{ github.event.pull_request.user.login }}"
80
+
81
+ # 파일명이 GitHub계정명인지 확인
82
+ if [[ ! "$filename" =~ ^"$github_username" ]]; then
83
+ echo "- $file (파일명은 '$github_username'로 해주셔야 합니다)" >> $GITHUB_STEP_SUMMARY
84
+ success=false
85
+ fi
86
+ fi
87
+ done
88
+ fi
89
+
64
90
if [ "$success" = false ]; then
65
91
echo -e "\n:warning: 위 문제들을 해결해 주세요:" >> $GITHUB_STEP_SUMMARY
66
92
echo "1. 파일 끝의 누락된 줄바꿈을 추가해 주세요." >> $GITHUB_STEP_SUMMARY
67
93
echo "2. 파일명에서 제어문자를 제거해 주세요." >> $GITHUB_STEP_SUMMARY
94
+ if [[ ! "${{ steps.pr-labels.outputs.labels }}" =~ "maintenance" ]]; then
95
+ echo "3. 파일명은 반드시 'GitHub계정명'으로 해주셔야 합니다. (예: ${{ github.event.pull_request.user.login }}.ts)" >> $GITHUB_STEP_SUMMARY
96
+ fi
68
97
exit 1
69
98
fi
0 commit comments