Search
Duplicate

(Swift) Swift formatter! Github action 적용시키기!

간단소개
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
Swift
Scrap
태그
9 more properties
멘토님에게 협업 프로젝트를 진행할 때, 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이 작동하는 것을 볼 수 있었다!!