Skip to main content

Swift ๋นŒ๋“œ ๋ฐ ํ…Œ์ŠคํŠธ

CI(์—ฐ์† ํ†ตํ•ฉ) ์›Œํฌํ”Œ๋กœ๋ฅผ ๋งŒ๋“ค์–ด Swift ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์„ธ์š”.

์†Œ๊ฐœ

์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” Swift ํŒจํ‚ค์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค.

GitHub ํ˜ธ์ŠคํŠธ ์‹คํ–‰๊ธฐ์—๋Š” ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์‚ฌ์ „ ์„ค์น˜๋œ ๋„๊ตฌ ์บ์‹œ๊ฐ€ ์žˆ์œผ๋ฉฐ, Ubuntu ๋ฐ macOS ์‹คํ–‰๊ธฐ์—๋Š” Swift ํŒจํ‚ค์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•œ ์ข…์†์„ฑ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ์‹  ์†Œํ”„ํŠธ์›จ์–ด ๋ฐ ์‚ฌ์ „ ์„ค์น˜๋œ ๋ฒ„์ „์˜ Swift์™€ Xcode์— ๋Œ€ํ•œ ์ „์ฒด ๋ชฉ๋ก์€ GitHub ํ˜ธ์ŠคํŒ… ์‹คํ–‰๊ธฐ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

ํ•„์ˆ˜ ์กฐ๊ฑด

YAML ๊ตฌ๋ฌธ๊ณผ ์ด๋ฅผ GitHub Actions์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ž˜ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ GitHub Actions์— ๋Œ€ํ•œ ์›Œํฌํ”Œ๋กœ ๊ตฌ๋ฌธ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

Swift ํŒจํ‚ค์ง€๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Apple ๊ฐœ๋ฐœ์ž ์„ค๋ช…์„œ์˜ Swift ํŒจํ‚ค์ง€๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Swift ์›Œํฌํ”Œ๋กœ ํ…œํ”Œ๋ฆฟ ์‚ฌ์šฉ

๋น ๋ฅด๊ฒŒ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ์›Œํฌํ”Œ๋กœ ํ…œํ”Œ๋ฆฟ์„ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ .github/workflows ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

GitHub์€(๋Š”) ๋Œ€๋ถ€๋ถ„์˜ Swift ํ”„๋กœ์ ํŠธ์—์„œ ์ž‘๋™ํ•˜๋Š” Swift ์›Œํฌํ”Œ๋กœ ํ…œํ”Œ๋ฆฟ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ์˜ ํ›„์† ์„น์…˜์—์„œ๋Š” ์ด ์›Œํฌํ”Œ๋กœ ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉ์ž ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์˜ˆ์‹œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  1. GitHub์—์„œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ๊ธฐ๋ณธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

  2. ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ด๋ฆ„ ์•„๋ž˜์—์„œ ์ž‘์—…์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    "github/docs" ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ํƒญ ์Šคํฌ๋ฆฐ์ƒท. "์ž‘์—…" ํƒญ์€ ์ฃผํ™ฉ์ƒ‰ ์œค๊ณฝ์„ ์œผ๋กœ ๊ฐ•์กฐ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  3. ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์›Œํฌํ”Œ๋กœ๊ฐ€ ์ด๋ฏธ ์žˆ๋Š” ๊ฒฝ์šฐ ์ƒˆ ์›Œํฌํ”Œ๋กœ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  4. "์›Œํฌํ”Œ๋กœ ์„ ํƒ" ํŽ˜์ด์ง€์—๋Š” ๊ถŒ์žฅ๋˜๋Š” ์›Œํฌํ”Œ๋กœ ํ…œํ”Œ๋ฆฟ์˜ ์„ ํƒ ํ•ญ๋ชฉ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. "swift"๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

  5. ์ง€์†์  ํ†ตํ•ฉ์„ ํด๋ฆญํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ ์„ ํƒ์„ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.

  6. "Swift" ์›Œํฌํ”Œ๋กœ์—์„œ ๊ตฌ์„ฑ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  7. ํ•„์š”์— ๋”ฐ๋ผ ์›Œํฌํ”Œ๋กœ๋ฅผ ํŽธ์ง‘ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์›Œํฌํ”Œ๋กœ๊ฐ€ ์‹คํ–‰๋  ๋ถ„๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

  8. ๋ณ€๊ฒฝ ๋‚ด์šฉ ์ปค๋ฐ‹์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

swift.yml ์›Œํฌํ”Œ๋กœ ํŒŒ์ผ์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ .github/workflows ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

Swift ๋ฒ„์ „ ์ง€์ •

GitHub ํ˜ธ์ŠคํŠธ ์‹คํ–‰๊ธฐ์—์„œ ์‚ฌ์ „ ์„ค์น˜๋œ ํŠน์ • ๋ฒ„์ „์˜ Swift๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด swift-actions/setup-swift ์ž‘์—…์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ด ์ž‘์—…์€ ์‹คํ–‰๊ธฐ์˜ ๋„๊ตฌ ์บ์‹œ์—์„œ ํŠน์ • ๋ฒ„์ „์˜ Swift๋ฅผ ์ฐพ๊ณ  ํ•„์ˆ˜ ์ด์ง„ ํŒŒ์ผ์„ PATH์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ๋‚ด์šฉ์€ ์ž‘์—…์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์— ๋Œ€ํ•ด ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ swift-actions/setup-swift ์ž‘์—…์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ž์ฒด ํ˜ธ์ŠคํŠธ ์‹คํ–‰๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์›ํ•˜๋Š” Swift ๋ฒ„์ „์„ ์„ค์น˜ํ•˜๊ณ  PATH์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜ ์˜ˆ์‹œ์—์„œ๋Š” swift-actions/setup-swift ์ž‘์—…์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ Swift ๋ฒ„์ „ ์‚ฌ์šฉ

ํ–‰๋ ฌ์—์„œ ์—ฌ๋Ÿฌ ๋ฒ„์ „์˜ Swift๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์ž‘์—…์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

YAML

# ์ด ์›Œํฌํ”Œ๋กœ๋Š” GitHub์—์„œ ์ธ์ฆ๋˜์ง€ ์•Š์€ ์ž‘์—…์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
# ์ž‘์—…์€ ํƒ€์‚ฌ์—์„œ ์ œ๊ณตํ•˜๋ฉฐ
# ๋ณ„๋„์˜ ์„œ๋น„์Šค ์•ฝ๊ด€, ๊ฐœ์ธ์ •๋ณด์ฒ˜๋ฆฌ๋ฐฉ์นจ, ์ง€์› ์„ค๋ช…์„œ์—์„œ ๊ทœ์ •๋ฉ๋‹ˆ๋‹ค.
# ์ฐธ์กฐํ•˜์„ธ์š”.

# ์ปค๋ฐ‹ SHA์— ์ž‘์—…์„ ๊ณ ์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
# ์ตœ์‹  ๋ฒ„์ „์„ ์–ป์œผ๋ ค๋ฉด SHA๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
# ํƒœ๊ทธ ๋˜๋Š” ๋ถ„๊ธฐ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๊ฒฝ๊ณ  ์—†์ด ์ž‘์—…์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

name: Swift

on: [push]

jobs:
  build:
    name: Swift ${{ matrix.swift }} on ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest]
        swift: ["5.2", "5.3"]
    runs-on: ${{ matrix.os }}
    steps:
      - uses: swift-actions/setup-swift@65540b95f51493d65f5e59e97dcef9629ddf11bf
        with:
          swift-version: ${{ matrix.swift }}
      - uses: actions/checkout@v4
      - name: Build
        run: swift build
      - name: Run tests
        run: swift test

๋‹จ์ผ ํŠน์ • Swift ๋ฒ„์ „ ์‚ฌ์šฉ

5.3.3๊ณผ ๊ฐ™์€ ํŠน์ • ๋ฒ„์ „์˜ Swift๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์ž‘์—…์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

YAML
steps:
  - uses: swift-actions/setup-swift@65540b95f51493d65f5e59e97dcef9629ddf11bf
    with:
      swift-version: "5.3.3"
  - name: Get swift version
    run: swift --version # Swift 5.3.3

์ฝ”๋“œ ๋นŒ๋“œ ๋ฐ ํ…Œ์ŠคํŠธ

๋กœ์ปฌ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋ช…๋ น์œผ๋กœ Swift๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์˜ˆ์‹œ์—์„œ๋Š” ์ž‘์—…์—์„œ swift build ๋ฐ swift test๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค.

YAML
steps:
  - uses: actions/checkout@v4
  - uses: swift-actions/setup-swift@65540b95f51493d65f5e59e97dcef9629ddf11bf
    with:
      swift-version: "5.3.3"
  - name: Build
    run: swift build
  - name: Run tests
    run: swift test