멘토님에게 협업 프로젝트를 진행할 때, formatter를 사용하면 좋다는 조언을 듣고 바로 진행해 보았다.
사실 2주전에 처음 시도했을때에는 github action도 잘 모르고 있어서 잠깐 시도해보다가 적용에 실패했었다. 이제 어느정도 github도 익숙해지고, formatter를 적용해보고 싶은 욕심도 생겨서 도전해보게 되었다.
내가 구글링을 잘 못하는 건지..
Swift format을 github action에 적용하는 래퍼런스가 별로 없었다...ㅜㅜ
swift-format-lint
우선 준비물이 필요하다. 바로 github marketplace에 있는 swift-format-lint이다!
프로젝트에 swift-format을 적용시키기 위해서 이 툴을 사용하려고 한다. 간단한 설명을 보면,
This action allows you to run Apple's swift-format as a lint command to verify that code being checked in follows the guidelines you or your team have set.
Apple의 swift-format을 lint 명령으로 실행하여 체크인 중인 코드가 설정한 지침을 따르는지 확인할 수 있다.
이제 이 코드를 가지고 github action을 만들어보자.
Github action 만들기
상단 메뉴의 Action 페이지를 들어간다.
New workflow 버튼을 누르면 아래와 같이 템플릿을 고를 수 있다.
우리는 템플릿은 사용하지 않을 것이기 때문에 그냥 아무 템플릿을 하나 눌러서 생성해 주도록 하자.
이제 이렇게 세팅이 되면 원하는 yml파일 이름을 설정하고 아래 코드부분을 모두 지운다!
기본적으로 세팅된 코드가 아니라 swift-format-lint의 코드를 사용할 것이다.
이름을 쓰는 부분은 원하는 workflow이름을 지정해 주면 된다.
name: Swift
# 이렇게 되어있던 이름을 Swift-format으로 수정하겠다.
YAML
복사
이제 전체 코드를 적용한 후, 풀리퀘스트를 날려서 정상적으로 작동하는지 확인해보자!
name: Swift-format
on: [pull_request]
jobs:
swift-format-lint:
runs-on: ubuntu-latest
name: Swift-Format
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Restore swift build cache
uses: actions/cache@v1
with:
path: .build
key: ${{ runner.os }}-spm-${{ hashFiles('**/Package.resolved') }}
restore-keys: |
${{ runner.os }}-spm-
- name: swift build
run: |
if [ -d ".build" ]; then
if ! [ -x "$(command -v swift-format)" ]; then
sudo cp -f .build/release/swift-format /usr/local/bin/swift-format
fi
else
git clone -b swift-5.2-branch https://github.com/apple/swift-format.git
cd swift-format
swift build --disable-sandbox -c release
mv .build .. && cd ..
sudo cp -f .build/release/swift-format /usr/local/bin/swift-format
fi
- name: Lint
uses: Iron-Ham/swift-format-linter-action@v5
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
# Optional parameters. Note that these are formatted as JSON array strings
# excludes: '["Generated/", "Pods/"]'
# exclude-types: '[".graphql.swift"]'
YAML
복사
결과 확인
아직 사용법이 익숙하진 않지만 정상적으로 github action이 작동하는 것을 볼 수 있었다!!