leetcode-study icon indicating copy to clipboard operation
leetcode-study copied to clipboard

ci: improve line break check ci to change file automatically

Open khg0712 opened this issue 3 months ago โ€ข 4 comments

line break ci๊ฐ€ ์ž๋™์œผ๋กœ ํŒŒ์ผ์— ๊ฐœํ–‰ ๋ฌธ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ปค๋ฐ‹ํ•˜๋„๋ก ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ๋ ˆํฌ๋ฅผ ๋งŒ๋“ค์–ด์„œ ํ•ด๋‹น ๋ณ€๊ฒฝ์ด ์„ฑ๊ณตํ•œ ์‚ฌ๋ก€ ๋‚จ๊น๋‹ˆ๋‹ค.

  • .github/ ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ํŒŒ์ผ ๋ช… ์ปจ๋ฒค์…˜ ci์— ๊ฑธ๋ ค์„œ ์ด๊ฒƒ์„ ์ œ์™ธํ•˜๋„๋ก ๋ณ€๊ฒฝํ•˜๋Š” ์ˆ˜์ •๋„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค
image image

khg0712 avatar Nov 08 '25 17:11 khg0712

@khg0712 ์•ˆ๋…•ํ•˜์„ธ์š”! ๋ณ‘ํ•ฉ์ „์— ํ•ด๋‹น ๋ณ€๊ฒฝ ๊ด€๋ จํ•˜์—ฌ ์šด์˜์ง„๋ถ„๋“ค๊ณผ ํ•จ๊ป˜ ๋…ผ์˜ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค!. ์ €ํฌ ์ƒ๊ฐ์—๋Š” ์ด๋Ÿฌํ•œ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ๋ณ€๊ฒฝ ์ฐธ์—ฌ์ž๋“ค์˜ ๊ฒฝํ—˜์— ์–ด๋–ค ์˜ํ–ฅ์„ ์ฃผ๋Š”์ง€์— ๋Œ€ํ•ด์„œ ๊ณ ๋ฏผ์ด ์ข€ ๋” ํ•„์š”ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ €ํฌ ์ƒ๊ฐ์œผ๋กœ๋Š” ๋‹จ์ˆœํžˆ ์ฒดํฌ ์ˆ˜์ค€์ด ์•„๋‹ˆ๋ผ ์ฐธ์—ฌ์ž๋ฅผ ๋Œ€์‹ ์—์„œ ์ง์ ‘ commit์„ ํ•  ๊ฒฝ์šฐ, ์ฐธ์—ฌ์ž๋ฅผ ์ด๋ฅผ ๋ชจ๋ฅธ ์ฒด๋กœ ๋กœ์ปฌ์—์„œ ๋‹ค๋ฅธ commit์„ ํ–ˆ์„ ๊ฒฝ์šฐ, conflict๋กœ ์ด์–ด์งˆ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค๊ณ  ์—ฌ๊ฒจ์ง€๋Š”๋ฐ ํ˜น์‹œ ์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ ๊ณ ๋ คํ•ด๋ณด์…จ์„๊นŒ์š”?

SamTheKorean avatar Nov 09 '25 17:11 SamTheKorean

@khg0712 ์•ˆ๋…•ํ•˜์„ธ์š”! ๋ณ‘ํ•ฉ์ „์— ํ•ด๋‹น ๋ณ€๊ฒฝ ๊ด€๋ จํ•˜์—ฌ ์šด์˜์ง„๋ถ„๋“ค๊ณผ ํ•จ๊ป˜ ๋…ผ์˜ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค!. ์ €ํฌ ์ƒ๊ฐ์—๋Š” ์ด๋Ÿฌํ•œ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ๋ณ€๊ฒฝ ์ฐธ์—ฌ์ž๋“ค์˜ ๊ฒฝํ—˜์— ์–ด๋–ค ์˜ํ–ฅ์„ ์ฃผ๋Š”์ง€์— ๋Œ€ํ•ด์„œ ๊ณ ๋ฏผ์ด ์ข€ ๋” ํ•„์š”ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ €ํฌ ์ƒ๊ฐ์œผ๋กœ๋Š” ๋‹จ์ˆœํžˆ ์ฒดํฌ ์ˆ˜์ค€์ด ์•„๋‹ˆ๋ผ ์ฐธ์—ฌ์ž๋ฅผ ๋Œ€์‹ ์—์„œ ์ง์ ‘ commit์„ ํ•  ๊ฒฝ์šฐ, ์ฐธ์—ฌ์ž๋ฅผ ์ด๋ฅผ ๋ชจ๋ฅธ ์ฒด๋กœ ๋กœ์ปฌ์—์„œ ๋‹ค๋ฅธ commit์„ ํ–ˆ์„ ๊ฒฝ์šฐ, conflict๋กœ ์ด์–ด์งˆ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค๊ณ  ์—ฌ๊ฒจ์ง€๋Š”๋ฐ ํ˜น์‹œ ์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ ๊ณ ๋ คํ•ด๋ณด์…จ์„๊นŒ์š”?

์ง€๋‚˜๊ฐ€๋‹ค ์•„์ด๋””์–ด๊ฐ€ ๋– ์˜ฌ๋ผ์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ณต์œ ๋งŒ ๋“œ๋ ค์š”~

ํ˜„์žฌ์ฒ˜๋Ÿผ CI๊ฐ€ ๋‹จ์ˆœ ์‹คํŒจ๋งŒ ํ•˜์ง€ ์•Š๊ณ  ํŒŒ์ผ ๋ ๊ฐœํ–‰ ๋ˆ„๋ฝ ์‹œ PR์— ์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋‚จ๊ธฐ๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฐœ์„ ํ•˜๋ฉด Conflict๋„ ๋ฐฉ์ง€๋˜๊ณ , ๊ฐœํ–‰์ด ์žˆ์„ ๊ฒฝ์šฐ ์•Œ๋ฆผ์„ ์ฃผ์–ด ์ฐธ์—ฌ์ž ๊ฒฝํ—˜์„ ์กฐ๊ธˆ ๋” ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ ํ•ฉ๋‹ˆ๋‹ค ๐Ÿค”

  • create a review comment for a pull request ๋ฅผ ์ฐธ๊ณ 
  • API๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ suggestion์„ body์— ๋‚จ๊ธฐ๋ฉด ๋ฆฌ๋ทฐ๋ฅผ ๋ณด๊ณ  ์†์‰ฝ๊ฒŒ ์ฆ‰๊ฐ ๋ฐ˜์˜ํ•˜๋Š”๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์„๊นŒ ์‹ถ์–ด์š” ใ…Žใ…Ž

์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜์™€ ๊ฐ™์ด ํŒŒ์ผ์˜ ๋งˆ์ง€๋ง‰ ์ค„ ๋ฒˆํ˜ธ๋ฅผ ๊ตฌํ•˜๊ณ , ํ•ด๋‹น ์ค„์— ์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋‹ฌ์•„์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•  ์ˆ˜๋„ ์žˆ์ง€ ์•Š์„๊นŒ ์‹ถ์—ˆ์–ด์š”! (์‹ค์ œ ์ •ํ™•ํ•˜๊ฒŒ ๋™์ž‘ํ•˜๋Š” ์ฝ”๋“œ์ธ์ง€ ํ™•์ธ์„ ํ•˜์ง€ ์•Š์•„์„œ ์ˆ˜๋„ ์ฝ”๋“œ๋กœ ๋ด์ฃผ์„ธ์š”!)

      - name: Check for missing end line breaks
        env:
           ...
        run: |
           ...
          echo "## ์ค„๋ฐ”๊ฟˆ ๋ˆ„๋ฝ ํŒŒ์ผ" >> $GITHUB_STEP_SUMMARY

          for file in $files; do
            if [ -f "$file" ]; then
              if [ -s "$file" ] && [ "$(tail -c 1 "$file" | wc -l)" -eq 0 ]; then
                echo "โŒ ์ค„๋ฐ”๊ฟˆ ๋ˆ„๋ฝ: $file"
                echo "- $file" >> $GITHUB_STEP_SUMMARY
                success=false

               # ๋งˆ์ง€๋ง‰ ์ค„ ๋ฒˆํ˜ธ ๊ตฌํ•˜๊ธฐ
               last_line=$(wc -l < "$file")
                [ "$last_line" -eq 0 ] && last_line=1

                # ์ฝ”๋ฉ˜ํŠธ payload ๊ตฌ์„ฑ
                payload=$(jq -n \
                  --arg body "โŒ ํŒŒ์ผ ๋์— ์ค„๋ฐ”๊ฟˆ์ด ์—†์Šต๋‹ˆ๋‹ค." \
                  --arg commit_id "${{ github.event.pull_request.head.sha }}"
                  --arg path "$file" \
                  --argjson line "$last_line" \
                  '{body: $body, commit_id: $commit_id, path: $path, line: $line, side: "RIGHT"}')

                 curl --silent --fail --show-error \
                  -H "Accept: application/vnd.github+json" \
                  -H "Authorization: Bearer $GITHUB_TOKEN" \
                  -H "X-GitHub-Api-Version: 2022-11-28" \
                  -d "$payload" \
                  "https://api.github.com/repos/${{ github.repository }}/pulls/${PR_NUMBER}/comments" \
                  || echo "โš ๏ธ GitHub ์ฝ”๋ฉ˜ํŠธ ๋“ฑ๋ก ์‹คํŒจ (๊ถŒํ•œ ๋ฌธ์ œ ๋˜๋Š” ์ž˜๋ชป๋œ commit_id)"

              else
       ...

์“ฐ๋‹ค๋ณด๋‹ˆ ์ด ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ๋•Œ ๋ช‡ ๊ฐ€์ง€ ์‹ ๊ฒฝ์จ์•ผํ•˜๋Š” ๋ถ€๋ถ„์ด ์žˆ๋”๋ผ๊ณ ์š”..!

  • API ํ˜ธ์ถœ์ด ๋นˆ๋ฒˆํ•˜๋ฉด GitHub API rate limit์— ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๋‹ค
  • ๋งค๋ฒˆ workflow๊ฐ€ ๋Œ ๋•Œ๋งˆ๋‹ค ๊ฐ™์€ ํŒŒ์ผ์— ๊ฐ™์€ ์ฝ”๋ฉ˜ํŠธ๊ฐ€ ๊ณ„์† ๋‹ฌ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ๐Ÿ˜…
  • PR ์ฝ”๋ฉ˜ํŠธ๋ฅผ ์“ฐ๋ ค๋ฉด workflow ๊ถŒํ•œ์— write ๊ถŒํ•œ์ด ํ•„์š”ํ•  ๊ฒƒ ๊ฐ™์•„์š”.

์ €๋Š” ์•„์ด๋””์–ด๋งŒ ์ œ๊ณตํ•˜๊ณ  ๊ฐ€๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค..! ์ œ๊ฐ€ ์ž˜๋ชป ์ดํ•ดํ•œ ๋ถ€๋ถ„์ด ์žˆ๊ฑฐ๋‚˜, ๊ถ๊ธˆํ•œ ๋ถ€๋ถ„์ด ์žˆ์œผ๋ฉด ์ฝ”๋ฉ˜ํŠธ๋กœ ๋‚จ๊ฒจ์ฃผ์„ธ์š”! ํ™”์ดํŒ…์ž…๋‹ˆ๋‹ค~! ๐Ÿ’ช

unpo88 avatar Nov 10 '25 02:11 unpo88

์ œ๊ฐ€ ์ƒ๊ฐํ–ˆ๋˜ ๊ธฐ์กด PR ์›Œํฌ ํ”Œ๋กœ์šฐ์˜ ๋ถˆํŽธํ•œ ๋ถ€๋ถ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ๋ฆ„์œผ๋กœ ๋А๊ปด์กŒ์Šต๋‹ˆ๋‹ค.

  1. WIKI์— ์ฐธ์—ฌ์ž๊ฐ€ ์•Œ์•„์•ผ ํ•˜๋Š” ์ •๋ณด๊ฐ€ ๋งŽ์€๋ฐ ํŒŒ์ผ ๊ฐœํ–‰๊ด€๋ จ ๊ทœ์น™์€ ์ฐธ์—ฌ์ž๊ฐ€ ์•Œ์ง€ ์•Š๋”๋ผ๋„ ์‹œ์Šคํ…œ์ ์œผ๋กœ ์ž๋™ํ™”ํ•˜๋ฉด ๋” ์ข‹๊ฒ ๋‹ค.
  2. ๋‹จ์ˆœํžˆ ์ฝ”๋ฉ˜ํŠธ๋‚˜ Ci ์‹คํŒจ๋กœ ์•Œ๋ ค์ค˜๋„ ์ฐธ์—ฌ์ž๊ฐ€ ์ธ์ง€ํ•  ์ˆ˜๋Š” ์žˆ๊ฒ ์œผ๋‚˜ ์‚ฌ์šฉ์ž๊ฐ€ ํ•ด๋‹น ์•Œ๋ฆผ์— ๋Œ€ํ•ด ํŒ”๋กœ์—…์„ ํ•ด์•ผ ํ•˜๊ณ  ๋น„๋™๊ธฐ ์†Œํ†ต์ด ๊ธฐ๋ฐ˜์ธ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์ด๋Ÿฐ ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ํ๋ฆ„์„ ๋” ๋А๋ฆฌ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด๋ณด์ธ๋‹ค.
  3. ํŒŒ์ผ N๊ฐœ์— ๋Œ€ํ•ด์„œ ์ˆ˜๋™์œผ๋กœ ํŒŒ์ผ ๊ฐœํ–‰์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ƒ๊ฐ๋ณด๋‹ค ๋ถˆํŽธํ•œ๋ฐ ํ•ด๋‹น ์ž‘์—…์ด ๋ณต์žกํ•œ ํŒŒ์ผ๋ณ€๊ฒฝ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž๋™ํ™”ํ•˜๋ฉด ํŽธ๋ฆฌํ•˜๊ฒ ๋‹ค.

๋งŒ์•ฝ ๋กœ์ปฌ ๋ณ€๊ฒฝ๊ณผ ๋ฆฌ๋ชจํŠธ ์†Œ์Šค์˜ ์ฐจ์ด๋กœ ์ธํ•ด ์ปจํ”Œ๋ฆญ์ด ๋‚˜๋Š” ๊ฒƒ์ด ๊ฑฑ์ •๋˜์‹ ๋‹ค๋ฉด ci์—์„œ๋Š” ํŒŒ์ผ ์ปจ๋ฒค์…˜ ๊ฒ€์‚ฌ๋งŒ ํ•˜๊ณ  ์ด๋Ÿฐ ์ž๋™ํ™”๋Š” pre-commit hook์ด๋‚˜ pre-push ํ›…์—์„œ ์ฒ˜๋ฆฌํ•˜๋ฉด ํ•ด๋‹น ๋ฌธ์ œ๋Š” ์—†์–ด์งˆ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ œ ์š”์ ์€ ์ฐธ์—ฌ์ž๋“ค์˜ ์ธ์ง€ ๋ถ€ํ•˜๋ฅผ ์ค„์ด๊ณ  ์ž๋™ํ™”๊ฐ€๋Šฅํ•œ ์˜์—ญ์€ ์ž๋™ํ™”ํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค ์˜€์Šต๋‹ˆ๋‹ค.

khg0712 avatar Nov 10 '25 03:11 khg0712

@khg0712 ์ž๋™ ๊ฐœํ–‰ ์ถ”๊ฐ€๊ฐ€ ์ฐธ์—ฌ์ž ํŽธ์˜์— ๋„์›€์ด ๋œ๋‹ค๋Š” ์  ์ถฉ๋ถ„ํžˆ ๊ณต๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ จ ๋ฌธ์ œ ์ธ์ง€ํ•˜์‹œ๊ณ  PR ์ž‘์„ฑํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค! ๋‹ค๋งŒ, CI๊ฐ€ ์ง์ ‘ ์ปค๋ฐ‹์ด๋‚˜ ํ‘ธ์‹œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ตฌ์กฐ๋Š” ์ง€์–‘ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค!. ํœด๊ณ ๋‹˜์ด ์ฃผ์‹  ๋Œ€์•ˆ์ฒ˜๋Ÿผ pre-commit hook์ด๋‚˜ pre-push ๋‹จ๊ณ„๋กœ ์˜ฎ๊ธฐ๋Š” ๋ฐฉํ–ฅ์ด ๋” ์ ์ ˆํ•ด ๋ณด์ž…๋‹ˆ๋‹ค!

SamTheKorean avatar Nov 10 '25 07:11 SamTheKorean