GitHub Actions로 CI를 구축하여 SwiftFormat 테스트하기

서론

  • CI는 프로젝트를 관리하면서 개발 프로세스를 자동화하고 개선하기 위한 방법론입니다. 테스트가 수행되어 문제점을 조기에 발견하고 해결할 수 있는 아주 좋은 도구입니다.
  • 편행 프로젝트는 SwiftFormat을 이용한 팀원들의 코드 포맷과 Build 테스트 두 가지를 적용하는 CI를 적용했습니다.
  • CI는 GitHub Actions을 이용하여 구현했고, 이번 글은 그 과정을 소개하려고 합니다.

 

YAML 파일 생성

  • 먼저 yaml파일을 생성해야합니다. yaml파일은 프로젝트 레포지토리에 있는 .github/workflows 경로에 생성하면 됩니다.

  • 이 yaml파일은 CI를 실행시킬 조건, 테스팅을 어떻게 진행할지에 대한 총괄하는 파일입니다.
  • 참고로 WorkFlow는 프로세스에서 여러 단계를 거쳐 일련의 작업을 수행하는 일반적인 패턴이나 절차를 의미합니다.

 

YAML 코드 커스텀

  • 이제 yaml파일에 스크립트를 작성하면 됩니다. 스크립트에 대한 DOCS는 여기에서 자세히 확인하실 수 있습니다.
name: iOS CI workflow

on:
  push:
    branches: ['**']
  pull_request:
    branches: ['**']
    types: [labeled, opened, synchronize, reopened]
  • name은 해당 Workflow의 이름을 지칭할 수 있습니다.
  • on은 Workflow가 어떤 이벤트에 의해 트리거가 될지 지정할 수 있습니다. ‘**’은 모든 브랜치에서 Push 또는 PullRequest가 생성되거나 업데이트 될 때 트리거가 되는 것을 의미합니다.

SwiftFormat 테스트

jobs:
  check-swift-format:
    name: Check for Possible Changes with SwiftFormat
    runs-on: macos-latest
    steps:
      - name: Code Checkout
        uses: actions/checkout@v4
      - name: Install Swiftformat
        run: brew install swiftformat
      - name: Run Swiftformat
        run: swiftformat . --config .swiftformat
      - name: Check for changes
        run: |
          git diff
          if [[ `git status --porcelain` ]]; then
            echo "Code was formatted. Failing the job."
            exit 1
          fi
  • jobs는 workFlow에서 수행할 작업들을 정의할 수 있습니다.
  • 우리는 먼저 SwiftFormat을 이용하여 팀원들과 코드 Formatting을 통합하려고 했습니다. 그래서 check-swift-format이라는 작업을 먼저 정의했습니다.
  • runs-on은 작업이 실행될 환경을 지정합니다.
  • steps는 해당 작업에서 실행할 단계들을 정의할 수 있습니다. 단계마다 순차적으로 정의하면 CI는 그것을 따라서 테스트를 진행합니다.
  • 각 Workflow마다 SwiftFormat을 통해 Formatting이 잘 되었는지 확인하고, 만약 그렇지 않을 경우에는 git diff 명령문을 통해서 작업을 실패시킵니다.

 

마무리

name: iOS CI workflow

on:
  push:
    branches: ['**']
  pull_request:
    branches: ['**']
    types: [labeled, opened, synchronize, reopened]

jobs:
  check-swift-format:
    name: Check for Possible Changes with SwiftFormat
    runs-on: macos-latest
    steps:
      - name: Code Checkout
        uses: actions/checkout@v4
      - name: Install Swiftformat
        run: brew install swiftformat
      - name: Run Swiftformat
        run: swiftformat . --config .swiftformat
      - name: Check for changes
        run: |
          git diff
          if [[ `git status --porcelain` ]]; then
            echo "Code was formatted. Failing the job."
            exit 1
          fi
  • 이번 시간에는 CI를 통한 Build 테스트 이외의 SwiftFormat을 통해 팀원들이 해당 툴을 다운로드 하지 않아도 자동으로 Formatting을 검사하는 로직을 만들었습니다.
  • CI는 Build 테스트도 중요하지만, 이런 사소한 코드 포맷을 검증하는 것도 품질을 유지하는데 큰 기여도를 합니다.