ํ์ด! ์ค๋์ ๋ด๊ฐ ์์ ๋ถํฐ ์ง์ง์ง์ง ์ฌ์ฉํด๋ณด๊ณ ์ถ์๋ Github action ์ ์ฉ๊ธฐ์ ๋ํด์ ์์ฑํด๋ณผ๊ฒ์ด๋ค.
์ ํ ๋๋ฒจ๋กํผ ์์นด๋ฐ๋ฏธ์์ ๋ง์ง๋ง ํ๋ก์ ํธ๋ฅผ ์งํํ ๋ ๊ฐ.๋.๋ ๊ฐ github action์ lint์ ๋น๋๋ฅผ ์ ์ฉํด์ค์, pr์ ๋ ๋ฆด๋๋ง๋ค ์์ฃผ ๊ฐํธํ๊ฒ! ๋์ ์ฝ๋๋ค์ ํ์ธํ ์ ์์๋ค. (๋น๋ํ
์คํธ์ ๋ฆฐํธ๊ฐ ์ ์ ์ฉ๋๋์ง!)
์ฐ์ , Lint๋ฅผ ์ก์ ์ ์ ์ฉํ๊ฒ ๋๋ฉด, PR์ ๋ ๋ฆด๋๋ง๋ค ๋์ ์ฝ๋์์ Swift Lint ๊ท์น์ด ์ ์ ์ฉ๋์ด์๋์ง ๊นํ๋ธ ์ก์ ์์ ํ์ธํด์ค๋ค!
PR์ ๋ ๋ฆฌ๋ฉด, ์๋ก์ฝ๋กฌ ๋๊ธ๋ก ๋ฆฐํธ Success!!! ๋ผ๊ณ ์๋ ค์ค๋ค. ๋ง์ฝ, ๋ฆฐํธ์ ์ด๊ธ๋๋ ์ฌํญ์ด ์์ผ๋ฉด, ๋๊ธ๋ ๋ฌ๋ฆฌ์ง ์๊ณ , ๋ฐ์ ๋์๋งํ โํ์๊ฐ ๋จ๊ฒ ๋๋ค.
๐ฃ ์ ์ฉํ๊ณ ์ข์๋ ์
ํ๋ก์ ํธ ๋ด๋ถ์ ์ธ๋ฐ์๋ warning์ ๋ณด์ง ์์๋ ๋๋ค.
๋ฆฐํธ๋ฅผ ์ ์ฉํด๋ณธ์ฌ๋์ด๋ผ๋ฉด ์๊ฒ์ด๋ค. TODO, MARK ์ฃผ์์๋ ์ ๋ถ warning์ด ๋จ๊ณ , ์ฌ์ฌ๊ฑด๊ฑด ์ ๋ถ๋ค!!!!! warning์ผ๋ก ๋ฆฐํธ๊ฒฝ๊ณ ๋ฅผ ์ค๋ค. ํ๋ก์ ํธ๊ฐ ์ปค์ง๋ฉด ์ปค์ง์๋ก, criticalํ ์๋ฌ๋ ์๋๋ฐ ๋ฌด์ํ ๋ง์ ๊ฒฝ๊ณ ๋ค์ ๋ง๋๊ฒ ๋๋ค. ๊ทธ๋ฌ๋ฉด์ ๊ฒฐ๊ตญ criticalํ ์๋ฌ๊ฐ ๋ฌปํ๊ฒ ๋๊ฒ ์ง..?
lint๋ฅผ github action์์ ํ์ธํ๊ฒ ํจ์ผ๋ก์จ, ์ด๋ฐ ๋ถํธํจ์ ์ค์ผ ์ ์์๋ค. criticalํ ๋ฆฐํธ์๋ฌ ์ผ ๊ฒฝ์ฐ, ์ง์ pr์์ merge๋ฅผ ๋ง์์ฃผ๊ธฐ ๋๋ฌธ์ criticalํ ์๋ฌ ๋ง๊ณ ์์ํ warning๋ค์ ๊ทธ๋ฅ ๋๊ธธ ์ ์๋ค.
ํธํ๋ค.
ํ๋ก์ ํธ๋ฅผ ์ปค๋ฐํ๊ธฐ ์ , ํญ์ lint๋ฅผ ์ง์ผฐ๋ ํ์ธํ๋ ๊ณผ์ ์ด ํ์ํ๋ค. ์๋๋ฉด.. warning์ด ๊ธฐ๋ณธ 10๊ฐ ์ด์ ๋จ๊ธฐ ๋๋ฌธ์!! ๋ฌผ๋ก ์ด๋ ๊ฒ ํ๋ํ๋ ์ ๋ถ ๊ฒํ ํ๋๊ฒ ์ข์ ์ต๊ด์ด๊ธด ํ์ง๋ง, ์ด ๋ชจ๋ ๊ฒ์ฌ๋ค์ ์๋์ผ๋ก ์งํํด์ฃผ๊ธฐ ๋๋ฌธ์ ์ ๋ง ํธํ๋ค. ์ ์ฐจ,, CI์ ๊ด์ฌ์ด ๊ฐ๊ธฐ ์์ํ๋ค. . ๋๊ทผ๋๊ทผ
๐ฃ ์์ํ๋ฉฐ
์ผ์ฌ์ฐจ๊ฒ '๋์์ด(๊ฐ์ธ ํ๋ก์ ํธ)' ๊ฐ๋ฐ์ ์์ํ๋ ค๊ณ ํ๋ค. ์ง๊ธ์ ์์ํ๊ธฐ ์ , ํ๋ก์ ํธ setting ๋จ๊ณ..! ์ด์ ์ ๋ฉด์ ์์ ๊ฐ๋ฐ๋ฌธํ์ ๊ด๋ จํ ์ง๋ฌธ์ด ๋ค์ด์์๋, Lint์ ๋ํ ์ด์ผ๊ธฐ๋ฅผ ๋๋ ์ ์ด ์๋๋ฐ Human์ด ์งํค๋ ค๊ณ ๋ ธ๋ ฅํ ๊ฒ์ด๋, CI๋ฅผ ์ ์ฉํด์ ์ฌ์ฉํด๋ณธ๊ฒ์ด๋๋ผ๋ ์ง๋ฌธ์ ๋ฐ์ ์ ์ด ์์๋ค.
๊ทธ์ ๋๋, Human error๋ฅผ ์ง์ ์์ ํ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ๋ค๊ณ ๋๋ตํ๊ณ , ๊ทธ ์ดํ EarthValley80ํ๋ก์ ํธ์์ ๋๋๊ฐ ์ค์ ํด์ค lint Action์ ๋ณด๊ณ ๊ผญ ์ง์ ํด๋ณด๊ณ ์ถ์ ๋ง์์ด ๋ค์์๋ค.
๋๋๊ฐ ์ ์ ๋ฆฌํด์ค ๊ธ, ๊ทธ๋ฆฌ๊ณ ์ธํฐ๋ท์ ๊ธ์ ๋ณด๊ณ ๋์ ํ๋ก์ ํธ์ ์ ์ฉํด๋ณด์!
๐ฃ SwiftLint๋ฅผ Action์ ์ ์ฉํ๊ธฐ
- ํ๋ก์ ํธ์ ์ ์ฉํ๋ค๋ณด๋ฉด, ๋๋ฌด ๋ง์ Warning ๋ค์ด ๋ฌ๋ค. TODO , MARK ๋ฅผ ๋ฌ์๋์ ๊ฒ๋ค์๋ ๋ค Warning์ด ๋จ๊ธฐ ๋๋ฌธ์ด๋ค!!! ์ ์ ์ ๋ง criticalํ ๋ฌธ์ ๊ฐ ๋ฌด์์ธ์ง ์ ์ธ์์ด ์๋๋ค๋ ๋ฌธ์ ์ ์ด ์๋ค.
ํ๋ก์ ํธ ๋ด๋ถ์๋ค๊ฐ lint๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ๋ ์์ง๋ง, ์ด๋ฏธ ๋ง์ผ ํ๋ ์ด์ค์ ๋์์๋ SwiftLint๊ฐ ์กด์ฌํ๋ค. ํด๋น ๋งํฌ๋ SwitLint๋ฅผ Github Action์์ ์ฌ์ฉํ ์ ์๋๋ก ๋์์๋ค.
https://github.com/norio-nomura/action-swiftlint
๋ฆฌ๋๋ฏธ์ ์ฌ์ฉ ๋ฐฉ๋ฒ์ด ์ ๋์์๋ค.
1๏ธโฃ swiftlint.yml ํ์ผ ์์ฑ
ํด๋น ํ์ผ์ ์ด ์ ๊ฒฝ๋ก์ ์์ฑํด์ฃผ์. ๋ด๋ถ๋ ์๋์ฒ๋ผ ์๊ฒผ๋ค.
name: auto PR swiftLint
on:
pull_request:
branches: [ develop ]
paths:
- '.github/workflows/swiftlint.yml'
- '.swiftlint.yml'
- '**/*.swift'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: GitHub Action for SwiftLint
uses: norio-nomura/action-swiftlint@master
env:
DIFF_BASE: ${{ github.base_ref }}
- name: Add PR Comment
if: ${{ success() }}
uses: mshick/add-pr-comment@v1
with:
message: |
## All File Checked โ
| โ
| Auto Pull Request SwiftLint Success!!!! |
|--- |---------------------------------------------- |
repo-token: ${{ secrets.ACCESS_TOKEN }}
repo-token-user-login: 'github-actions[bot]' # The user.login for temporary GitHub tokens
allow-repeats: false # This is the default
2๏ธโฃ ACCESS_TOKEN ์ค์
repo-token: ${{ secrets.ACCESS_TOKEN }}
์ด ๋ถ๋ถ์ ๋ด repo์ access token์ ๋ฃ์ด์ฃผ์ด์ผ ํ๋ค. ๊ทธ๋์ผ PR์ ์ฌ๋ ธ์๋, ์ ๊ทผ ๊ถํ์ ์ป์ด์ ๋๊ธ์ ์๋์ผ๋ก ๋ฌ์์ค ์ ์๋ค.
ACCESS_TOKEN์ ๋ฐ๊ธ๋ฐ๋ ๊ฒฝ๋ก๋ Github ๋ด๋ถ Setting์์ ๊ฐ๋ฅํ๋ค.
๐๐ป ๊ฒฝ๋ก!!
Settings** > **Secrets and Variables** > **Actions** -> New repository secret
title๋ฅผ ACCESS_TOKEN์ผ๋ก ์ค์ ํด์ฃผ์๋ค. ์ด๋ ๊ฒ ํ๊ฒ ๋๋ฉด,
secrets.ACCESS_TOKEN
์ผ๋ก ํ ํฐ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์๋ค.
Secret์์ ์๋ ๊ฐ์, ๋์ Github AccessToken ๊ฐ์ ๋ฃ์ด์ค ๊ฒ์ด๋ค. ๋ฐ๊ธ๋ฐ๋ ๋ฐฉ๋ฒ์
1. ์ด๋ฏธ์ง ์ ์ฌ์ง ํด๋ฆญ ํ Settings ํด๋ฆญ
2.์ผ์ชฝ ๋ฉ๋ด ๋งจ ๋ฐ, Developer Settings ํด๋ฆญ
3. Personal access tokens → Token (Clasic) → Generate New token ํด๋ฆญ
4. ์ต์
์,, classic์ผ๋ก … ๊ทธ๋ฅ..
5. ํ ํฐ๋ ์์ฃผ ๋ฐ๊ฟ์ค์ผ ์ข์ง๋ง ๋๋ ๊ท์ฐฎ์ผ๋๊น ์ผ๋จ ๊ธฐ๊ฐ ๋ง๋ฃ ์์ด ํ ํฐ์ ์์ฑํ๋ค. ๊ทธ๋ฆฌ๊ณ ํ ํฐ์ ๋ฑ ํ ๋ฒ ๋ง ๋ณด์ฌ์ฃผ๊ธฐ ๋๋ฌธ์ ํ ํฐ์ ๋ฐ๋ก ๋ฉ๋ชจ์ฅ์ ์ ๋ฆฌํด๋๋ ๊ฒ์ด์ข๋ค๊ณ ํ๋ค. .(์ด์ ์ ์ํด๋จ๋๋ฐ ์ง๊ธ๋ถํฐ๋ผ๋ ํด๋์ผ์ง,,,) ์ต์ ์ repo๋ง ํด๋ฆญํ๋ค.
์ด๋ ๊ฒ ์ด์ ์์ฑ๋ ํ ํฐ์ Secrets์ ๋ฃ์ด์ฃผ์.
์ด ๋ถ๋ถ๊น์ง ์ค์ ํ๋ฉด, PR๋ฅผ ๋ ๋ฆด ๋๋ง๋ค github-action[bot]์ด ๋ ํฌ์ ๋ํ ๊ถํ์ ๋ฐ์์ Swiftlint์ ๋ํ ๊ฒ์ฌ๋ฅผ ์งํํ๊ฒ ๋๋ค.
3๏ธโฃ ๋๊ทผ๋๊ทผ ์ด์ PR์ ๋ ๋ ค๋ณด์.
์ง๊ธ๊น์ง ์์ฑ๋ ๋ชจ๋ ๊ฒ๋ค์ ๊ธฐ๋ฐ์ผ๋ก ์ผ๋จ PR์ ๋ ๋ฆฌ๊ณ , ํด๋น PR์ ๋ฆฐํธ๋ด์ด ๋๊ธ์ ๋ฌ๋ฉด, ๋ฌด์ฌํ ์๋ฃ๊ฐ ๋ ๊ฒ์ด๋ค. ๋๊ทผ……ํ.. action์ด ๋์๊ฐ๋ ค๊ณ ๋๋ฆ๋๋ฆ ํ๋ค. ๐จ๐ฅถ
์ค ์ค์ค ์ค์ค์ค์ค์น ๋๋ฐ!!!
์ค์~ ์๊ฐ๋ณด๋ค ๊ฐ๋จํ๋ค. ์ด์ , lint๋ฅผ action์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ์์์ผ๋!! builder๋ฅผ ์ ์ฉํด๋ณด์. ํํํ
๐ ์ฐธ๊ณ ๋ ํผ๋ฐ์ค - ๊ฐ๋์ ๊ณต์ ์๋ฃ
https://github.com/DeveloperAcademy-POSTECH/MacC-Team-EarthValley80/discussions/5