@@ -11,16 +11,30 @@ jobs:
1111 with :
1212 fetch-depth : 0
1313
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+ pr_number="${{ github.event.pull_request.number }}"
19+ labels_json=$(gh pr view $pr_number --json labels -q '.labels[].name')
20+ if [ -n "$labels_json" ]; then
21+ echo "has_maintenance=$(echo $labels_json | grep -q 'maintenance' && echo 'true' || echo 'false')" >> $GITHUB_OUTPUT
22+ else
23+ echo "has_maintenance=false" >> $GITHUB_OUTPUT
24+ fi
25+ env :
26+ GH_TOKEN : ${{ github.token }}
27+
28+ # 줄바꿈 체크
29+ - name : Check for missing end line breaks
1530 run : |
1631 # 따옴표를 제거하고 파일 목록 가져오기
1732 files=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.sha }} | tr -d '"')
33+ success=true
34+
1835 echo "변경된 파일 목록:"
1936 echo "$files"
20-
21- success=true
2237
23- # 줄바꿈 체크
2438 echo "## 줄바꿈 누락 파일" >> $GITHUB_STEP_SUMMARY
2539 for file in $files; do
2640 if [ -s "$file" ] && [ "$(tail -c 1 $file | wc -l)" -eq 0 ]; then
@@ -30,40 +44,70 @@ jobs:
3044 fi
3145 done
3246
33- # 제어문자 체크
34- echo -e "\n## 제어문자가 포함된 파일명" >> $GITHUB_STEP_SUMMARY
47+ if [ "$success" = false ]; then
48+ echo -e "\n:warning: 파일 끝의 누락된 줄바꿈을 추가해 주세요." >> $GITHUB_STEP_SUMMARY
49+ exit 1
50+ fi
51+
52+ # 제어문자 체크
53+ - name : Check for control characters in filenames
54+ run : |
55+ files=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.sha }} | tr -d '"')
56+ success=true
57+
58+ echo "## 제어문자가 포함된 파일명" >> $GITHUB_STEP_SUMMARY
3559 for file in $files; do
3660 # basename으로 파일명만 추출하고 따옴표 제거
3761 filename=$(basename "$file" | tr -d '"')
38-
62+
3963 # 백슬래시로 시작하는 제어문자들 체크 (\b, \n, \r, \t 등)
40- if printf '%q' "$filename" | grep -q '\\[bnrtfv]'; then
41- echo "- $file (제어문자 포함)" >> $GITHUB_STEP_SUMMARY
42- success=false
43- fi
44-
45- # 일반적인 제어문자들 체크 (0x00-0x1F, 0x7F)
46- if echo -n "$filename" | LC_ALL=C grep -q '[[:cntrl:]]'; then
47- echo "- $file (제어문자 포함)" >> $GITHUB_STEP_SUMMARY
48- success=false
49- fi
64+ if printf '%q' "$filename" | grep -q '\\[bnrtfv]' || \
65+
66+ # 일반적인 제어문자들 체크 (0x00-0x1F, 0x7F)
67+ echo -n "$filename" | LC_ALL=C grep -q '[[:cntrl:]]' || \
5068
51- # 특수 제어문자들 체크
52- if echo -n "$filename" | grep -q $'[\x00-\x1F\x7F]'; then
69+ # 특수 제어문자들 체크
70+ echo -n "$filename" | grep -q $'[\x00-\x1F\x7F]' || \
71+
72+ # 이스케이프 시퀀스 체크
73+ [[ "$filename" =~ (\\[0-7]{1,3}|\\x[0-9a-fA-F]{1,2}) ]]; then
5374 echo "- $file (제어문자 포함)" >> $GITHUB_STEP_SUMMARY
5475 success=false
5576 fi
56-
57- # 이스케이프 시퀀스 체크
58- if [[ "$filename" =~ (\\[0-7]{1,3}|\\x[0-9a-fA-F]{1,2}) ]]; then
59- echo "- $file (제어문자 포함)" >> $GITHUB_STEP_SUMMARY
60- success=false
77+ done
78+
79+ if [ "$success" = false ]; then
80+ echo -e "\n:warning: 파일명에서 제어문자를 제거해 주세요." >> $GITHUB_STEP_SUMMARY
81+ exit 1
82+ fi
83+
84+ # 파일명 규칙 체크 - maintenance 라벨이 없는 경우에만 실행
85+ - name : Check filename rules
86+ if : ${{ steps.pr-labels.outputs.has_maintenance != 'true' }}
87+ run : |
88+ files=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.sha }} | tr -d '"')
89+ pr_author="${{ github.event.pull_request.user.login }}"
90+ success=true
91+
92+ echo "## 파일명 규칙 위반" >> $GITHUB_STEP_SUMMARY
93+ for file in $files; do
94+ if [ -f "$file" ]; then
95+
96+ # 파일명만 추출 (경로 제외)
97+ filename=$(basename "$file")
98+
99+ # 파일명이 GitHub계정명인지 확인
100+ shopt -s nocasematch
101+ if [[ ! "$filename" = "$pr_author"* ]]; then
102+ echo "- $file" >> $GITHUB_STEP_SUMMARY
103+ success=false
104+ fi
61105 fi
62106 done
63107
64108 if [ "$success" = false ]; then
65- echo -e "\n:warning: 위 문제들을 해결해 주세요:" >> $GITHUB_STEP_SUMMARY
66- echo "1. 파일 끝의 누락된 줄바꿈을 추가해 주세요." >> $GITHUB_STEP_SUMMARY
67- echo "2. 파일명에서 제어문자를 제거해 주세요." >> $GITHUB_STEP_SUMMARY
109+ echo -e "\n:warning: 파일명은 반드시 'GitHub계정명' 또는 'GitHub계정명-xxx' 형식으로 해주셔야 합니다. (예: ${pr_author}.ts, ${pr_author}-1.ts, ${pr_author}-2.ts)" >> $GITHUB_STEP_SUMMARY
68110 exit 1
69111 fi
112+ env :
113+ GH_TOKEN : ${{ github.token }}
0 commit comments