2021년 11월 9일 화요일

Danger (CI 보조툴)

Danger (CI 보조툴)

Danger 란?

Github 등에 코드를 전송하여 CI툴을 연계시에 자주실수하는 기계적인 코드규칙에 대한 검사(LINT)를 수행할수 있도록 도와주는 프로그램이다.
주로 PR(Pull Request)할때에 발생하기 쉬운 문법적오류 등의 검사를 자동으로 해주는 툴이다.

사용법은 Danger가 설치된 로컬 또는 CI상에서 동작하며, danger 프로그램을 설치해야한다.

설치는 간단하다.
gem install danger
gem install danger_checkstyle_format ( 이것은 Danger plugin https://github.com/noboru-i/danger-checkstyle_format)

사용법은
danger --verbose --new-comment -dangerfile=./프로그램소스내에서 별도로 작성한 Danger파일
하면 작동한다.
아래는 예제이다.

  
# プルリクが編集中  
warn("このプルリクが編集中のようです。") if github.pr_title.include? "[WIP]"  
  
# プルリクがでかすぎる  
warn("プルリクの変更箇所が多すぎるので分割しましょう。") if git.lines_of_code > 500  
  
# マージコミットがある  
#has_merge_commit = git.commits.any? { |c| c.message =~ /^Merge branch '#{github.branch_for_base}'/ }  
#fail "マージコミットがあるのでリベースしましょう。" unless has_merge_commit  
  
# マイルストーンが設定されていない  
has_milestone = github.pr_json["milestone"] != nil  
warn("プルリクにマイルストーンが設定されていないようです。", sticky: false) unless has_milestone  
  
# 誰もアサインされていない  
has_assignee = github.pr_json["assignee"] != nil  
warn("誰もアサインされていないようです。", sticky: false) unless has_assignee

Bitrise를 연동한다면, Bitrise에서 script를 추가한후에

gem install danger
gem install danger-checkstyle_format
gem install danger-android_lint

danger --verbose --new-comment --dangerfile=./androidApp/LintDangerFile

을 추가한다.

Bitrise에서 Danger 를 github와 연계하려면 Env var에 DANGER_GITHUB_API_TOKEN 를 추가하여 값에 git token값을 입력하면된다.

danger-checkstyle_format 플러그인을 이용한다면,
1 . Bitrise의 workflow에 Gradle Task추가. ( 예로. :androidApp:check)
2 . Env var에 GRADLEW_PATH = ./gradlew 로 값추가.
3 . Bitrise의 workflow에 script추가하여 위에서 설명한 danger설치등…

checkstyle_format.base_path = Dir.pwd  
checkstyle_format.report "./androidApp/build/reports/ktlint-results.xml"
#(ktlint-results.xml이 필요하니까 Lint다음에 진행하도록한다)
# ktlint 시에 결과파일이 저기에 출력되도록 해둬야한다.
예:
val ktlintCheckANdroid by tasks.creating(JavaExec::class) {
...  
args = listOf(  
    "--reporter=plain",  
    "--reporter=checkstyle,output=${buildDir}/reports/ktlint-results.xml",  
    "src/**/*.kt"  
)...
}

설정이 제대로 되었다면

  1. 사용자가 소스 commit->push->pr작성
  2. Bitrise가 가동
  3. Bitrise의 workflow 가 진행되면서 ktlint->danger 실행됨
  4. github pull request 를 보면 ktlint에서 오류를 잡아낸 것을 danger가 분석해서 github 화면에 라인별로 보여줌.

0 comments:

댓글 쓰기