From f38300364d8685f3c672277637b838448e32d7d0 Mon Sep 17 00:00:00 2001 From: HC-kang Date: Fri, 29 Nov 2024 21:38:53 +0900 Subject: [PATCH 1/6] =?UTF-8?q?Chore:=20=ED=86=B5=ED=95=A9=20=EC=9B=8C?= =?UTF-8?q?=ED=81=AC=ED=94=8C=EB=A1=9C=EC=9A=B0=EC=97=90=20=EB=AC=B8?= =?UTF-8?q?=EC=A0=9C=EC=A0=9C=EC=B6=9C=EC=8B=9C=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=9E=90=EB=AA=85,=20=ED=8C=8C=EC=9D=BC=EB=AA=85=20=EA=B2=80?= =?UTF-8?q?=EC=A6=9D=20=EC=8A=A4=ED=85=9D=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/integration.yaml | 39 ++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/.github/workflows/integration.yaml b/.github/workflows/integration.yaml index 3d2534f53..ddb30c25d 100644 --- a/.github/workflows/integration.yaml +++ b/.github/workflows/integration.yaml @@ -11,13 +11,22 @@ jobs: with: fetch-depth: 0 - - name: Check for 1. missing end line breaks and 2. control characters in filenames + # PR 라벨 확인 + - name: Get PR labels + id: pr-labels + run: | + labels=$(gh pr view ${{ github.event.pull_request.number }} --json labels -q '.labels[].name' || echo "") + echo "labels=$labels" >> $GITHUB_OUTPUT + env: + GH_TOKEN: ${{ github.token }} + + - name: Check for 1. missing end line breaks and 2. control characters in filenames and 3. filename rules run: | # 따옴표를 제거하고 파일 목록 가져오기 files=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.sha }} | tr -d '"') echo "변경된 파일 목록:" echo "$files" - + success=true # 줄바꿈 체크 @@ -35,13 +44,13 @@ jobs: for file in $files; do # basename으로 파일명만 추출하고 따옴표 제거 filename=$(basename "$file" | tr -d '"') - + # 백슬래시로 시작하는 제어문자들 체크 (\b, \n, \r, \t 등) if printf '%q' "$filename" | grep -q '\\[bnrtfv]'; then echo "- $file (제어문자 포함)" >> $GITHUB_STEP_SUMMARY success=false fi - + # 일반적인 제어문자들 체크 (0x00-0x1F, 0x7F) if echo -n "$filename" | LC_ALL=C grep -q '[[:cntrl:]]'; then echo "- $file (제어문자 포함)" >> $GITHUB_STEP_SUMMARY @@ -53,7 +62,7 @@ jobs: echo "- $file (제어문자 포함)" >> $GITHUB_STEP_SUMMARY success=false fi - + # 이스케이프 시퀀스 체크 if [[ "$filename" =~ (\\[0-7]{1,3}|\\x[0-9a-fA-F]{1,2}) ]]; then echo "- $file (제어문자 포함)" >> $GITHUB_STEP_SUMMARY @@ -61,9 +70,29 @@ jobs: fi done + # maintenance 라벨이 없는 경우에만 파일명 규칙 체크 + if [[ ! "${{ steps.pr-labels.outputs.labels }}" =~ "maintenance" ]]; then + echo -e "\n## 파일명 규칙 위반" >> $GITHUB_STEP_SUMMARY + for file in $files; do + if [ -f "$file" ]; then + filename=$(basename "$file" | tr -d '"') + github_username="${{ github.event.pull_request.user.login }}" + + # 파일명이 GitHub계정명인지 확인 + if [[ ! "$filename" =~ ^"$github_username" ]]; then + echo "- $file (파일명은 '$github_username'로 해주셔야 합니다)" >> $GITHUB_STEP_SUMMARY + success=false + fi + fi + done + fi + if [ "$success" = false ]; then echo -e "\n:warning: 위 문제들을 해결해 주세요:" >> $GITHUB_STEP_SUMMARY echo "1. 파일 끝의 누락된 줄바꿈을 추가해 주세요." >> $GITHUB_STEP_SUMMARY echo "2. 파일명에서 제어문자를 제거해 주세요." >> $GITHUB_STEP_SUMMARY + if [[ ! "${{ steps.pr-labels.outputs.labels }}" =~ "maintenance" ]]; then + echo "3. 파일명은 반드시 'GitHub계정명'으로 해주셔야 합니다. (예: ${{ github.event.pull_request.user.login }}.ts)" >> $GITHUB_STEP_SUMMARY + fi exit 1 fi From 469cb305dbee1b85ff42de379ff0a216bcbd483b Mon Sep 17 00:00:00 2001 From: HC-kang Date: Fri, 29 Nov 2024 23:18:43 +0900 Subject: [PATCH 2/6] =?UTF-8?q?Chore:=20=ED=86=B5=ED=95=A9=20=EC=9B=8C?= =?UTF-8?q?=ED=81=AC=ED=94=8C=EB=A1=9C=EC=9A=B0=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/integration.yaml | 36 +++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/.github/workflows/integration.yaml b/.github/workflows/integration.yaml index ddb30c25d..a4fde7ea6 100644 --- a/.github/workflows/integration.yaml +++ b/.github/workflows/integration.yaml @@ -15,13 +15,27 @@ jobs: - name: Get PR labels id: pr-labels run: | - labels=$(gh pr view ${{ github.event.pull_request.number }} --json labels -q '.labels[].name' || echo "") - echo "labels=$labels" >> $GITHUB_OUTPUT + pr_number="${{ github.event.pull_request.number }}" + labels_json=$(gh pr view $pr_number --json labels -q '.labels[].name') + if [ -n "$labels_json" ]; then + echo "has_maintenance=$(echo $labels_json | grep -q 'maintenance' && echo 'true' || echo 'false')" >> $GITHUB_OUTPUT + else + echo "has_maintenance=false" >> $GITHUB_OUTPUT + fi env: GH_TOKEN: ${{ github.token }} - name: Check for 1. missing end line breaks and 2. control characters in filenames and 3. filename rules run: | + # 필요한 값들 미리 설정 + pr_author="${{ github.event.pull_request.user.login }}" + pr_number="${{ github.event.pull_request.number }}" + labels_json=$(gh pr view $pr_number --json labels -q '.labels[].name') + has_maintenance=false + if echo "$labels_json" | grep -q "maintenance"; then + has_maintenance=true + fi + # 따옴표를 제거하고 파일 목록 가져오기 files=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.sha }} | tr -d '"') echo "변경된 파일 목록:" @@ -71,16 +85,16 @@ jobs: done # maintenance 라벨이 없는 경우에만 파일명 규칙 체크 - if [[ ! "${{ steps.pr-labels.outputs.labels }}" =~ "maintenance" ]]; then + if [ "$has_maintenance" != "true" ]; then echo -e "\n## 파일명 규칙 위반" >> $GITHUB_STEP_SUMMARY for file in $files; do if [ -f "$file" ]; then - filename=$(basename "$file" | tr -d '"') - github_username="${{ github.event.pull_request.user.login }}" - + # 파일명만 추출 (경로 제외) + filename=$(basename "$file") # 파일명이 GitHub계정명인지 확인 - if [[ ! "$filename" =~ ^"$github_username" ]]; then - echo "- $file (파일명은 '$github_username'로 해주셔야 합니다)" >> $GITHUB_STEP_SUMMARY + shopt -s nocasematch + if [[ ! "$filename" = "$pr_author"* ]]; then + echo "- $file (파일명은 '$pr_author'형식으로 해주셔야 합니다)" >> $GITHUB_STEP_SUMMARY success=false fi fi @@ -91,8 +105,10 @@ jobs: echo -e "\n:warning: 위 문제들을 해결해 주세요:" >> $GITHUB_STEP_SUMMARY echo "1. 파일 끝의 누락된 줄바꿈을 추가해 주세요." >> $GITHUB_STEP_SUMMARY echo "2. 파일명에서 제어문자를 제거해 주세요." >> $GITHUB_STEP_SUMMARY - if [[ ! "${{ steps.pr-labels.outputs.labels }}" =~ "maintenance" ]]; then - echo "3. 파일명은 반드시 'GitHub계정명'으로 해주셔야 합니다. (예: ${{ github.event.pull_request.user.login }}.ts)" >> $GITHUB_STEP_SUMMARY + if [[ ! "$pr_labels" =~ "maintenance" ]]; then + echo "3. 파일명은 반드시 'GitHub계정명'형식으로 해주셔야 합니다. (예: ${pr_author}.ts)" >> $GITHUB_STEP_SUMMARY fi exit 1 fi + env: + GH_TOKEN: ${{ github.token }} From 792188bbc7bc7c42fe4111aa5448e2d4e469c0b3 Mon Sep 17 00:00:00 2001 From: HC-kang Date: Fri, 29 Nov 2024 23:50:06 +0900 Subject: [PATCH 3/6] =?UTF-8?q?Chore:=20=EC=9B=8C=ED=81=AC=ED=94=8C?= =?UTF-8?q?=EB=A1=9C=EC=9A=B0=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/integration.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/integration.yaml b/.github/workflows/integration.yaml index a4fde7ea6..4c87bb464 100644 --- a/.github/workflows/integration.yaml +++ b/.github/workflows/integration.yaml @@ -89,8 +89,10 @@ jobs: echo -e "\n## 파일명 규칙 위반" >> $GITHUB_STEP_SUMMARY for file in $files; do if [ -f "$file" ]; then + # 파일명만 추출 (경로 제외) filename=$(basename "$file") + # 파일명이 GitHub계정명인지 확인 shopt -s nocasematch if [[ ! "$filename" = "$pr_author"* ]]; then From 00c0a54a5afa2d7d933f2405aca3981a40464cfa Mon Sep 17 00:00:00 2001 From: HC-kang Date: Sat, 30 Nov 2024 09:11:11 +0900 Subject: [PATCH 4/6] chore: update integration info message --- .github/workflows/integration.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/integration.yaml b/.github/workflows/integration.yaml index 4c87bb464..cdab5c9b7 100644 --- a/.github/workflows/integration.yaml +++ b/.github/workflows/integration.yaml @@ -108,7 +108,7 @@ jobs: echo "1. 파일 끝의 누락된 줄바꿈을 추가해 주세요." >> $GITHUB_STEP_SUMMARY echo "2. 파일명에서 제어문자를 제거해 주세요." >> $GITHUB_STEP_SUMMARY if [[ ! "$pr_labels" =~ "maintenance" ]]; then - echo "3. 파일명은 반드시 'GitHub계정명'형식으로 해주셔야 합니다. (예: ${pr_author}.ts)" >> $GITHUB_STEP_SUMMARY + echo "3. 파일명은 반드시 'GitHub계정명' 또는 'GitHub계정명-xxx' 형식으로 해주셔야 합니다. (예: ${pr_author}.ts, ${pr_author}-1.ts, ${pr_author}-2.ts)" >> $GITHUB_STEP_SUMMARY fi exit 1 fi From 8f5d650178973fc5106cc44756daa9e38f8612e8 Mon Sep 17 00:00:00 2001 From: HC-kang Date: Sat, 30 Nov 2024 09:24:50 +0900 Subject: [PATCH 5/6] chore: Separate file validation steps in integration workflow --- .github/workflows/integration.yaml | 105 ++++++++++++++--------------- 1 file changed, 51 insertions(+), 54 deletions(-) diff --git a/.github/workflows/integration.yaml b/.github/workflows/integration.yaml index cdab5c9b7..d08cfab1f 100644 --- a/.github/workflows/integration.yaml +++ b/.github/workflows/integration.yaml @@ -25,25 +25,16 @@ jobs: env: GH_TOKEN: ${{ github.token }} - - name: Check for 1. missing end line breaks and 2. control characters in filenames and 3. filename rules + # 줄바꿈 체크 + - name: Check for missing end line breaks run: | - # 필요한 값들 미리 설정 - pr_author="${{ github.event.pull_request.user.login }}" - pr_number="${{ github.event.pull_request.number }}" - labels_json=$(gh pr view $pr_number --json labels -q '.labels[].name') - has_maintenance=false - if echo "$labels_json" | grep -q "maintenance"; then - has_maintenance=true - fi - # 따옴표를 제거하고 파일 목록 가져오기 files=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.sha }} | tr -d '"') + success=true + echo "변경된 파일 목록:" echo "$files" - success=true - - # 줄바꿈 체크 echo "## 줄바꿈 누락 파일" >> $GITHUB_STEP_SUMMARY for file in $files; do if [ -s "$file" ] && [ "$(tail -c 1 $file | wc -l)" -eq 0 ]; then @@ -53,63 +44,69 @@ jobs: fi done - # 제어문자 체크 - echo -e "\n## 제어문자가 포함된 파일명" >> $GITHUB_STEP_SUMMARY + if [ "$success" = false ]; then + echo -e "\n:warning: 파일 끝의 누락된 줄바꿈을 추가해 주세요." >> $GITHUB_STEP_SUMMARY + exit 1 + fi + + # 제어문자 체크 + - name: Check for control characters in filenames + run: | + files=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.sha }} | tr -d '"') + success=true + + echo "## 제어문자가 포함된 파일명" >> $GITHUB_STEP_SUMMARY for file in $files; do # basename으로 파일명만 추출하고 따옴표 제거 filename=$(basename "$file" | tr -d '"') # 백슬래시로 시작하는 제어문자들 체크 (\b, \n, \r, \t 등) - if printf '%q' "$filename" | grep -q '\\[bnrtfv]'; then - echo "- $file (제어문자 포함)" >> $GITHUB_STEP_SUMMARY - success=false - fi + if printf '%q' "$filename" | grep -q '\\[bnrtfv]' || \ - # 일반적인 제어문자들 체크 (0x00-0x1F, 0x7F) - if echo -n "$filename" | LC_ALL=C grep -q '[[:cntrl:]]'; then - echo "- $file (제어문자 포함)" >> $GITHUB_STEP_SUMMARY - success=false - fi + # 일반적인 제어문자들 체크 (0x00-0x1F, 0x7F) + echo -n "$filename" | LC_ALL=C grep -q '[[:cntrl:]]' || \ - # 특수 제어문자들 체크 - if echo -n "$filename" | grep -q $'[\x00-\x1F\x7F]'; then - echo "- $file (제어문자 포함)" >> $GITHUB_STEP_SUMMARY - success=false - fi + # 특수 제어문자들 체크 + echo -n "$filename" | grep -q $'[\x00-\x1F\x7F]' || \ - # 이스케이프 시퀀스 체크 - if [[ "$filename" =~ (\\[0-7]{1,3}|\\x[0-9a-fA-F]{1,2}) ]]; then + # 이스케이프 시퀀스 체크 + [[ "$filename" =~ (\\[0-7]{1,3}|\\x[0-9a-fA-F]{1,2}) ]]; then echo "- $file (제어문자 포함)" >> $GITHUB_STEP_SUMMARY success=false fi done - # maintenance 라벨이 없는 경우에만 파일명 규칙 체크 - if [ "$has_maintenance" != "true" ]; then - echo -e "\n## 파일명 규칙 위반" >> $GITHUB_STEP_SUMMARY - for file in $files; do - if [ -f "$file" ]; then - - # 파일명만 추출 (경로 제외) - filename=$(basename "$file") - - # 파일명이 GitHub계정명인지 확인 - shopt -s nocasematch - if [[ ! "$filename" = "$pr_author"* ]]; then - echo "- $file (파일명은 '$pr_author'형식으로 해주셔야 합니다)" >> $GITHUB_STEP_SUMMARY - success=false - fi - fi - done + if [ "$success" = false ]; then + echo -e "\n:warning: 파일명에서 제어문자를 제거해 주세요." >> $GITHUB_STEP_SUMMARY + exit 1 fi - if [ "$success" = false ]; then - echo -e "\n:warning: 위 문제들을 해결해 주세요:" >> $GITHUB_STEP_SUMMARY - echo "1. 파일 끝의 누락된 줄바꿈을 추가해 주세요." >> $GITHUB_STEP_SUMMARY - echo "2. 파일명에서 제어문자를 제거해 주세요." >> $GITHUB_STEP_SUMMARY - if [[ ! "$pr_labels" =~ "maintenance" ]]; then - echo "3. 파일명은 반드시 'GitHub계정명' 또는 'GitHub계정명-xxx' 형식으로 해주셔야 합니다. (예: ${pr_author}.ts, ${pr_author}-1.ts, ${pr_author}-2.ts)" >> $GITHUB_STEP_SUMMARY + # 파일명 규칙 체크 - maintenance 라벨이 없는 경우에만 실행 + - name: Check filename rules + if: ${{ steps.pr-labels.outputs.has_maintenance != 'true' }} + run: | + files=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.sha }} | tr -d '"') + pr_author="${{ github.event.pull_request.user.login }}" + success=true + + echo "## 파일명 규칙 위반" >> $GITHUB_STEP_SUMMARY + for file in $files; do + if [ -f "$file" ]; then + + # 파일명만 추출 (경로 제외) + filename=$(basename "$file") + + # 파일명이 GitHub계정명인지 확인 + shopt -s nocasematch + if [[ ! "$filename" = "$pr_author"* ]]; then + echo "- $file (파일명은 '$pr_author'형식으로 해주셔야 합니다)" >> $GITHUB_STEP_SUMMARY + success=false + fi fi + done + + if [ "$success" = false ]; then + echo -e "\n:warning: 파일명은 반드시 'GitHub계정명' 또는 'GitHub계정명-xxx' 형식으로 해주셔야 합니다. (예: ${pr_author}.ts, ${pr_author}-1.ts, ${pr_author}-2.ts)" >> $GITHUB_STEP_SUMMARY exit 1 fi env: From adb1dc8b7d8290d511d6f5d05c055ab4d4752328 Mon Sep 17 00:00:00 2001 From: HC-kang Date: Sat, 30 Nov 2024 09:46:55 +0900 Subject: [PATCH 6/6] chore: remove unnecessary message --- .github/workflows/integration.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/integration.yaml b/.github/workflows/integration.yaml index d08cfab1f..7ea6d739b 100644 --- a/.github/workflows/integration.yaml +++ b/.github/workflows/integration.yaml @@ -99,7 +99,7 @@ jobs: # 파일명이 GitHub계정명인지 확인 shopt -s nocasematch if [[ ! "$filename" = "$pr_author"* ]]; then - echo "- $file (파일명은 '$pr_author'형식으로 해주셔야 합니다)" >> $GITHUB_STEP_SUMMARY + echo "- $file" >> $GITHUB_STEP_SUMMARY success=false fi fi