서론
- 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 테스트도 중요하지만, 이런 사소한 코드 포맷을 검증하는 것도 품질을 유지하는데 큰 기여도를 합니다.