@@ -11,13 +11,22 @@ 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+ 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
1524 run : |
1625 # 따옴표를 제거하고 파일 목록 가져오기
1726 files=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.sha }} | tr -d '"')
1827 echo "변경된 파일 목록:"
1928 echo "$files"
20-
29+
2130 success=true
2231
2332 # 줄바꿈 체크
@@ -35,13 +44,13 @@ jobs:
3544 for file in $files; do
3645 # basename으로 파일명만 추출하고 따옴표 제거
3746 filename=$(basename "$file" | tr -d '"')
38-
47+
3948 # 백슬래시로 시작하는 제어문자들 체크 (\b, \n, \r, \t 등)
4049 if printf '%q' "$filename" | grep -q '\\[bnrtfv]'; then
4150 echo "- $file (제어문자 포함)" >> $GITHUB_STEP_SUMMARY
4251 success=false
4352 fi
44-
53+
4554 # 일반적인 제어문자들 체크 (0x00-0x1F, 0x7F)
4655 if echo -n "$filename" | LC_ALL=C grep -q '[[:cntrl:]]'; then
4756 echo "- $file (제어문자 포함)" >> $GITHUB_STEP_SUMMARY
@@ -53,17 +62,37 @@ jobs:
5362 echo "- $file (제어문자 포함)" >> $GITHUB_STEP_SUMMARY
5463 success=false
5564 fi
56-
65+
5766 # 이스케이프 시퀀스 체크
5867 if [[ "$filename" =~ (\\[0-7]{1,3}|\\x[0-9a-fA-F]{1,2}) ]]; then
5968 echo "- $file (제어문자 포함)" >> $GITHUB_STEP_SUMMARY
6069 success=false
6170 fi
6271 done
6372
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+
6490 if [ "$success" = false ]; then
6591 echo -e "\n:warning: 위 문제들을 해결해 주세요:" >> $GITHUB_STEP_SUMMARY
6692 echo "1. 파일 끝의 누락된 줄바꿈을 추가해 주세요." >> $GITHUB_STEP_SUMMARY
6793 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
6897 exit 1
6998 fi
0 commit comments