일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 상단 탭바
- 스크롤 탭
- 개발자 면접
- base64 변환
- convert base64
- ViewBuilder
- Tuist
- swift #swift keychain #keychain 사용법
- oberve url
- Side Menu
- Swift Package Manager
- SwiftUI
- Android
- scrolling tab
- GeometryReader
- transformation.map
- development language
- DataBinding
- swift
- pod install
- UIPresentationController
- List
- UIViewControllerTransitioningDelegate
- url 추적
- url 관찰
- detect url
- DevelopmentRegion
- notifychanged
- 기존 앱
- ios
- Today
- Total
버그 잡이
iOS - Github Action으로 Swift Lint 적용하기 본문
SwiftLint란?
Lint는 소스코드를 분석해주는 툴로 코드 스타일이나 프로그램의 오류가 발생할 수 있는 부분을 찾는 용도로 활용됩니다.
아래와 같이 강제 언랩핑이나 띄어쓰기 규칙 등을 체크해줄 수 있습니다.
이런 SwiftLint 점검을 Xcode 단에서 할수도 있지만
저는 Xcode에 위처럼 경고 문구가 많이 나오는 것을 원치 않기 때문에 PR을 올렸을때 Lint를 체크하는 방식으로 SwiftLint를 활용하려고 합니다.
Github Action 을 활용하면 이를 가능하게 할 수 있습니다.
Github Action
먼저 "github action swiftlint"로 검색합니다.
그 결과 아래 링크를 쉽게 찾을 수 있습니다.
https://github.com/norio-nomura/action-swiftlint
Pull Request가 생길때 github action에서 스크립트를 실행하여 swiftLint를 체크해주는 방식입니다.
위 스크립트가 정상 동작하면 아래처럼 PR에 린트 점검한 내역이 달리는 것을 볼 수 있습니다.
아래 스크립트를 github action에 설정해두니 잘 실행됩니다.
on:
pull_request:
paths:
- '.github/workflows/swiftlint.yml'
- '.swiftlint.yml'
- '**/*.swift'
jobs:
SwiftLint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: GitHub Action for SwiftLint
uses: norio-nomura/action-swiftlint@3.2.1
- name: GitHub Action for SwiftLint with --strict
uses: norio-nomura/action-swiftlint@3.2.1
with:
args: --strict
그런데 위 스크립트의 경우 변경된 파일에 대해서만 린트 체크를 하는 것이 아니라 모든 소스 파일에 대해서 린트 체크를 합니다.
저는 변경된 파일에 대해서만 체크를 하고 싶은데 말이죠.
특정 파일만 적용하기
위 깃헙을 보니 변경된 파일에만 적용되는 스크립트도 있습니다.
- name: GitHub Action for SwiftLint (Only files changed in the PR)
uses: norio-nomura/action-swiftlint@3.2.1
env:
DIFF_BASE: ${{ github.base_ref }}
그런데...!
위 스크립트로 해도 전체 파일에 대한 린트 체크가 진행됩니다....
관련해서 이슈가 올라왔지만 유지보수가 안 되고 있더라구요 ㅠㅠ
https://github.com/norio-nomura/action-swiftlint/pull/38
비교하는 베이스 브랜치를 선택하는 스크립트 선택하는 로직에 문제가 있는 것 같습니다.
master로 베이스 브랜치가 선택되기 때문에 계속해서 전체 파일 대상으로 린트를 체크하는 것이구요.
위 깃헙의 경우 더이상 유지보수가 되지 않아서 다른 깃헙을 찾아봤습니다.
norio-nomura씨가 만든 action을 개선한 action-swiftlint를 찾을 수 있었습니다.
https://github.com/ezraberch/action-swiftlint
name: SwiftLint
on:
pull_request:
paths:
- '.github/workflows/swiftlint.yml'
- '.swiftlint.yml'
- '**/*.swift'
jobs:
SwiftLint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Fetch base ref
run: |
git fetch --prune --no-tags --depth=1 origin +refs/heads/${{ github.base_ref }}:refs/heads/${{ github.base_ref }}
- name: GitHub Action for SwiftLint (Only files changed in the PR)
uses: ezraberch/action-swiftlint@3.2.3
env:
DIFF_BASE: ${{ github.base_ref }}
DIFF_HEAD: HEAD
위에서 비교 브랜치를 잘못 선택하는 이슈가 해결되어 변경된 파일에 대해서만 Lint체크가 가능하게 되었습니다.
추가적으로 위 github에서는 checkout@v1으로 되어 있는데 이는 이전 버전으로 checkout@v3로 수정해서 쓰면됩니다.
추가 사항
글쓰면서 한번 더 찾아보니 아래 깃헙이 잘 관리되고 있는 것 같네요.
나중에 아래것도 한번 써봐야겠습니다.
https://github.com/sinoru/actions-swiftlint
'Git' 카테고리의 다른 글
Git - Resolve conflicts 버튼 비활성화 시 해결 방법 (0) | 2020.11.23 |
---|---|
Git 삽질 일기 - Repository not found (0) | 2020.08.15 |
[코드스쿼드 git 입문 강의 요약] git 기초 개념 (0) | 2020.04.17 |
삽질 반성 일기0413 - git pull request (2) | 2020.04.13 |