Skip to content

Commit d64c4ae

Browse files
authored
Merge pull request DaleStudy#621 from HC-kang/main
Chore: integration workflow에 답안 파일 명을 "GitHub계정명".ext 형태로 강제하는 step 추가
2 parents 57cb89c + adb1dc8 commit d64c4ae

1 file changed

Lines changed: 71 additions & 27 deletions

File tree

.github/workflows/integration.yaml

Lines changed: 71 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)