๐ฌ builder๊ฐ ์ ํ์ํ๊ฐ
์๋ชจ์กฐ๋ชจ ํ๋ก์ ํธ๋ฅผ ์งํํ ๋, ์ญ์๋ ๊ฐ๋๋๊ฐ builder๋ฅผ github action์ ์ ์ฉํด๋จ์๋ค. ๋น๋ํ ์คํธ๋ฅผ ํด๋ณธ๋ค๊ตฌ? ์ด๊ฒ ๋ฌด์จ์๋ฏธ์ง!!! ์๊ฐํ์๋ค. ๊ทธ๋ฅ local์์ ์ ๋์๊ฐ๋ฉด ๋๋๊ฑฐ ์๋ ?
ํ์ง๋ง,, ํด๋น builder์ ์ญํ ์ ์์ฒญ๋ฌ๋ค. ํ๋ก์ ํธ๊ฐ ๊นจ์ง๋ปํ ์ฌ๋ฌ๋ฒ์ ์๊ธฐ์์ ๋ ๊ตฌํด์ฃผ์๋ค. helpโฆ
[Github] git conflict ํด๊ฒฐ! (feat. fork๐ด) ํ์ํ ๋ ์๋์ผ๋ก ์ฝ๋๋ฅผ ์ถ๊ฐํด์ฃผ์
์ด๋ฌํ ์ถฉ๋๋ค๋, ์ ๋ถ builder๊ฐ ๋น๋ ์๋๋ค๊ณ ์๋ ค์ฃผ๊ณ merge๋ฅผ ๋ง์์ค ์ถฉ๋๋ค์ด๋ค. ์ฌ๋ฌ์ฌ๋๊ณผ ํ์ ํ๋ค๋ณด๋ฉด, ๋ค์ํ ์ฝ๋๊ฐ ๋ฐ๋๊ฒ ๋๋ฉด์ ๋ด local์์๋ ๋น๋๊ฐ ๋์๋๋ฐ develop ๋ธ๋์น์ ๋ด ์ฝ๋๊ฐ ์ฌ๋ผ๊ฐ๋ ์๊ฐ! ํ๋ก์ ํธ๊ฐ ๊นจ์ ธ๋ฒ๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธด๋ค. (๋ํ์ ์ผ๋ก ๋ด ๋๋ฒ์ฌ ํ๋ก์ ํธ ใ ใ ์ด๋ ๋น๋๊ฐ ์๋์ผ๋ก ๊ฒํ ํด์คฌ๋๋ผ๋ฉด,,์ผ๋ง๋ ์์ ํ์๊น!)
์ด๋ฐ ๊ฒฝ์ฐ๋ค์ ๋๋นํ๊ธฐ ์ํด์ builder๋ ๊ผญ ํ์ํ ๊ฒ ๊ฐ๋ค. ๋ฌผ๋ก , ๋ง๊ตฌ์ก์ด๋ก merge ํ๊ธฐ ์ด์ ์ ๋ด ๋ธ๋์น๋ก develop์ ๋ฐ์์์ build๊ฐ ๋๋์ง ํ๋ฒ ๋ ํ ์คํธํด๋ณด๋ฉด์ ์์ ํ๊ฒ mergeํ๋ ์ต๊ด์ด ๋ ํ์ํ๋ค. ํ์ง๋ง ์ด๊ฒ์ ์๋์ผ๋ก ํ๋ฒ ๋ ๊ฒ์ฆํด์ฃผ๋ ๊ฒ์ ์ข์๊ฑฐ๋๊น??? ๊ทธ๋๊น ๋น๋ ์ ์ฉ ๊ฐ๋ณด์๊ณ - ๐ฅ
๐ฃ builder.yml ํ์ผ ์์ฑ
์ฐ์ , ์ด์ ์ ์์ฑํ๋ lint action๊ณผ ๋์ผํ๊ฒ ์๋ ํ์ผ ๊ฒฝ๋ก์๋ค๊ฐ .yml ํ์ผ์ ์์ฑํด์ค๋ค.
.github/workflows/
๐ builder.yml ํ์ผ ๋ด์ฉ
name: DongSik-e Swift-Builder
on:
push:
branches: [ develop, main ]
pull_request:
branches: [ develop, release, hotfix ]
# workflow์ ์คํ์ ํ๋ ์ด์์ job์ผ๋ก ๊ตฌ์ฑ
# ์ง๊ธ ์ด workflow๋ build๋ผ๋ single job์ผ๋ก ๊ตฌ์ฑ
jobs:
build:
# job์ด ์คํ๋ ํ๊ฒฝ: macos - ๊ฐ์ฅ ์ต์ ๋ฒ์
runs-on: macos-latest
# step์ job์ ์ผ๋ถ, ์คํ๋ task๋ฅผ ์๋ฏธ
steps:
# uses ํค์๋๋ฅผ ํตํด์ action์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ ์ก์
์ ์ฌ์ฉํ๋๋ก ํจ
- name: ๐ปCheckout Source Code๐ป
uses: actions/checkout@v2
- name: ๐ Start DongSik-e build ๐
run: |
xcodebuild clean test -project ./DongSik-e/DongSik-e.xcodeproj -scheme DongSik-e -destination "platform=iOS Simulator,OS=16.0,name=iPhone 14 Pro"
xcpretty --color --simple
๐ฌ ์ค๋ช ์ ์กฐ๊ธ ๋ง๋ถ์ฌ๋ณผ๊ฒ์ . (์ฃผ์์ ์ ์ด๋๊ธดํจ..)
์ฐ์ ์ด์ฏค๋๋ฉด ymlํ์ผ์ ๋ํ ์ค๋ช ์ด ๋ ๋๋ ์์ธํ๊ฒ ํ์ํ ๊ฒ ๊ฐ๋ค. ใ ใ ใ ใ ใ ์ผ๋จ builder ๋ด๋ถ ์ฝ๋์ ๋ํ ์ค๋ช ๋ง ์กฐ๊ธ ํ์๋ฉด,
1๏ธโฃ name / on
name: DongSik-e Swift-Builder
on:
push:
branches: [ develop, main ]
pull_request:
branches: [ develop, release, hotfix ]
- ํด๋น workflow ์ ์ด๋ฆ์ ์ ํด์ฃผ์๋ค.
- on ๋ถ๋ถ์๋, ์ด๋ค ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์๋ ํด๋น builderํ์ผ์ ๋๋ ค์ค ๊ฒ์ธ์ง ์ ํด์ค์์๋ค. ๋๋ main ๋ธ๋์น์ develop๋ธ๋์น์ push๊ฐ ์ผ์ด๋๋ฉด ํด๋น ๋น๋๋ฅผ ๋๋ ค์ค ๊ฒ์ด๊ณ , develop, release, hotfix ๋ธ๋์น์์ PR์ด ๋ ๋ผ์ค๋ฉด ๋น๋๋ฅผ ๋๋ ค์ค ๊ฒ์ด๋ค.
2๏ธโฃ jobs
workflow์ ์คํ์ ํ๋ ์ด์์ job์ผ๋ก ๊ตฌ์ฑ๋์ด์๋ค. ์ง๊ธ ์ด workflow๋ build๋ผ๋ workflow ํ๋๋ก๋ง ์ด๋ฃจ์ด์ ธ์๋ single job์ผ๋ก ๊ตฌ์ฑ๋์ด์๋ค!
3๏ธโฃ build
jobs:
build:
# job์ด ์คํ๋ ํ๊ฒฝ: macos - ๊ฐ์ฅ ์ต์ ๋ฒ์
runs-on: macos-latest
# step์ job์ ์ผ๋ถ, ์คํ๋ task๋ฅผ ์๋ฏธ
steps:
# uses ํค์๋๋ฅผ ํตํด์ action์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ ์ก์
์ ์ฌ์ฉํ๋๋ก ํจ
- name: ๐ปCheckout Source Code๐ป
uses: actions/checkout@v2
- runs-on : ์ด๋ค ํ๊ฒฝ์์ ์คํ์ํฌ๊ฒ์ธ์ง ์ ํด์ค๋ค. ๋๋ macos ๊ฐ์ฅ ์ต์ ๋ฒ์ ์์ ์คํ์์ผ์ค ๊ฒ์ด๋ค.
- steps: ์ฌ๊ธฐ๋ค๊ฐ github ๋ด๋ถ์ ์๋ action์ ์ฌ์ฉํ ๊ฒ์ด๋ผ๊ณ ์๋ ค์ค๋ค.
- actions/checkout@v2 ๋ ์ด ๋ ํฌ์งํ ๋ฆฌ์ ์ฒดํฌ์์ํ๊ฒ ๋ค๋ ๋ป์ด๋น.
4๏ธโฃ run ๋ถ๋ถ
- name: ๐ Start DongSik-e build ๐
run: |
xcodebuild clean test -project ./DongSik-e/DongSik-e.xcodeproj -scheme DongSik-e -destination "platform=iOS Simulator,OS=16.0,name=iPhone 14 Pro"
xcpretty --color --simple
- ์ฌ๊ธฐ์ ๋น๋ ํ ์คํธ๊ฐ ์์๋๋ค! ๊ฐ์ฅ์ค์ํ๊ฑด, run ๋ด๋ถ์ ์๋ xcodebuild clean test -project ./DongSik-e/DongSik-e.xcodeproj -scheme DongSik-e -destination "platform=iOS Simulator,OS=16.0,name=iPhone 14 Pro" xcpretty --color --simple ์ด์น๊ตฌ๋ค
- xcodebuild clean test -project ./DongSik-e/DongSik-e.xcodeproj
- ํ ์คํธ๋ฅผ ์งํํ xcodeprojํ์ผ์ ๊ฒฝ๋ก๋ฅผ ์๋ ค์ฃผ๋ ๋ถ๋ถ์ด๋ค.
- xcodeprojํ์ผ์ด ์๋ ์์น๋ฅผ ์ ์ ๋ ฅํด์ค๋ค. (๋ง์ฝ cocoapods๋ฅผ ์ด์ฉํด์ workspaceํ์ผ์ ์ด์ฉํ๋ค๋ฉด, workspace ํ์ผ ๊ฒฝ๋ก์ ๋ง๊ฒ ์ ๋ ฅํด์ฃผ์ด์ผํ๋ค! ๐๐ป)
- -scheme DongSik-e
- ์คํค๋ง ๋ถ๋ถ์ด ์ดํด๊ฐ ์ ๋์ง ์์์ง๋ง,,, ๊ฐ๋๋์ ์ค๋ช ์ ์ํ๋ฉด
- ๋น๋๋ฅผ ์งํํ๊ณ ์ถ์ ์คํค๋ง๋ฅผ ์ ๋ ฅํด์ค๋ค.
- -destination "platform=iOS Simulator,OS=16.0,name=iPhone 14 Pro"
- ๋น๋๋ฅผ ์งํํ iOS๊ธฐ๊ธฐ๋ฅผ ์ค์ ํด์ค๋ค.
- ๋ง์ฝ OS์ ๊ฐ์ฅ ์ต์ ๋ฒ์ ์์ test๋ฅผ ํด๋ณด๋ ค๋ฉด, OS=latest ๋ก ์ ๋ ฅํ๋ฉด ๋๋ค. ๋๋ 16.0์์ ํ ์คํธํด๋ณผ ๊ฒ์ด๋ค.
- ํ ์คํธํ ๊ธฐ๊ธฐ๋ iPhone 14 Pro ์ด๋ค!
๐ฃ ์, ์ด์ PR์ ๋ ๋ ค๋ณด์.
ymlํ์ผ์ ์ ์ ํ ๊ฒฝ๋ก์ ๋ง๋ค์ด์ค ๋ค, PR์ ๋ ๋ ค๋ณด์.
์ ๋๊ทผ๋๊ทผ ๋น๋ ๋์๊ฐ๋ ์๋ฆฌ ์ฌ๊ธฐ๊น์ง ๋ค๋ฆฌ๋ค์!
๐จ ๋น๋ ์ ์ฉ 1์ฐจ ์คํจ - ํ๊ฒ์ด ๋ฌธ์ ์ธ๊ฐ?
์ญ์๋ ์คํจํ ์ค ์์๋ค. ์๋๋ฉด!! ํ๋ฒ์ ๋๋ฉด ๊ทธ๊ฒ ๋ ์ด์ํด~!~!~! ~! ํด๊ฒฐํด๋ณด์. ์ ์์ ์๋ฐ๊ฒ ์๊ธด Details๋ฅผ ํด๋ฆญํด์ฃผ์.
์๋ฌ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
๐ซ xcodebuild: error: Unable to find a destination matching the provided destination specifier:
{ platform:iOS Simulator, OS:16.0, name:iPhone 14 Pro }
The requested device could not be found because no available devices matched the request.
๋ญ๊ฐ ํ๊ฒ์ ๋ชป์ฐพ๋๊ฒ ๊ฐ๋ค๊ณ ์๋ ค์ฃผ๋ ๊ฒ ๊ฐ์๋ค. ๋ด๊ฐ ์ง๊ธ ๋ฑ๋กํด์ค destination์ด ์๋ค๋ ๊ฑด๊ฐ? platform=iOS Simulator,OS=16.0,name=iPhone 14 Pro ํ์ฌ ์ด๋ ๊ฒ ์ค์ ๋์ด ์๋๋ฐ, ์ด๋ถ๋ถ์ ๋ฐ๊ฟ๋ณด์.
์๋ฌ์ฝ๋ ๋ฐ๋ก ๋ฐ์ ๋ณด๋ฉด, Available destinations for the DonSik-e scheme ๋ผ๊ณ ์น์ ํ๊ฒ ์๋ ค์ค๋ค. ์ฌ๊ธฐ์ ์๋ ค์ค iOS๊ธฐ๊ธฐ ์ค ํ๋๋ก ๋ฐ๊ฟ์ ๋ค์ ๋๋ ค๋ณด์.
โ ์ฑ๊ณต ์ํ! ๐ซถ
์ด๋ ๊ฒ ํ๊ฒ์ 16.2๋ก ๋ฐ๊ฟ์ ๋ค์ ์ปค๋ฐํด์ฃผ์๋ค. pr์ด ์ด๋ฏธ ์ฌ๋ผ๊ฐ์๋ ์ํ๊ธฐ ๋๋ฌธ์ ์๋์ผ๋ก ๋น๋๊ฐ ๋ค์ ๋์๊ฐ๋ค.
์ค๋ ๋์๊ฐ๋ ๊ฑฐ ๋ณด๋,, ์ฑ๊ณต์๋ฆฌ๊ฐ ์ฌ๊ธฐ๊น์ง ๋ค๋ฆฌ๋ค... ํ
์ฌ๋ !! ๋๋ฒ๋ง์ ์ฑ๊ณตํ๋ค. ๊ทผ๋ฐ,,,,, ์ ... lint๊ฐ ์๋์๊ฐ์ง..? ํ....
โจ ์ด์ ์ค์ค๋ก ์ก์ ์ ์ ์ฉํ ์ ์๊ฒ ๋์๋ค!
ymlํ์ผ์ด ๋คํด์ฃผ๋ github action... CI์ ๋ํ ๊ด์ฌ์ด ์ค๋ฏ์ค๋ฏ ์ฌ๋ผ์ค๋ ์ค์ด๋ค. ๋๋ ํธํ๊ฑธ..?
์ง๊ธ ๊ทผ๋ฐ lint๊ฐ ๋์๊ฐ์ง ์์์, ์ถ๊ฐ์ ์ผ๋ก ๋ ํ
์คํธ๋ฅผ ํด๋ณด๋ฉด์ ๋ญ๊ฐ ๋ฌธ์ ๊ธธ๋ action์ด ๋๊ฐ๊ฐ ๋์ง ์๋์ง ํ์ธํด๋ณด์์ผ๊ฒ ๋ค. ใ
ใ
ใ
์ ์๋๋๊ฑฐ์ผ lint!! ์๋ ๋๊ฐ๊ฐ ๋์์ผ ์ ์์ธ๋ฐ ๋ง์ด๋ค.. (์ด์ ์ lint action ์ ์ฉํ๋ ๋ธ๋ก๊ทธ๊ธ ๋ณด๋ฌ๊ฐ๊ธฐ!) ์์ธ์ ์ฐพ๊ฒ๋๋ค๋ฉด,, ๋ธ๋ก๊ทธ ๊ธ์ ๋ค์ ์
๋ก๋ ํด๋ณด๊ฒ ๋ค!!!
builder๋ ํนํ ์ฌ๋ฌ์ฌ๋๋ค๊ณผ ํ์ ํ ๋ ์ ๋ง ์ค์ํ ๊ธฐ๋ฅ์ผ ๊ฒ ๊ฐ๋ค. ์ง๊ธ์ ํผ์ ์งํํ๋ ๊ฐ์ธ ํ๋ก์ ํธ์ ์ฐ์ต๊ฒธ ์ ์ฉํด๋ณธ action์ธ๋ฐ ์ด์ ๋ค๋ฅธ ํ๋ก์ ํธ์์ ์ ์ฉํด๋ด์ผ๊ฒ ๋ค! ํ์ดํ .
๐ ์ฐธ๊ณ ๋ ํผ๋ฐ์ค
https://github.com/DeveloperAcademy-POSTECH/MacC-Team-EarthValley80/discussions/5
https://github.com/DeveloperAcademy-POSTECH/MC2-Team3-SSAK3/blob/develop/.github/workflows/main.yml