2021년 11월 16일 화요일

PlantUML 편집을 쉽게하기

PlantUML 편집을 쉽게하기

Android Studio 나 IntelliJ를 설치하여 plantUML plugin 을 설치하면 편집이 세상쉽다.

  1. 구글에서 android studio 를 검색해서 사이트로 가서 안드로이드 스튜디오를 설치한다.

enter image description hereenter image description here

  1. android studio 프로그램을 아무프로젝트나 만들든지 해서 시작하고, Preferences -> Plugins ->MarketPlace탭 에서 plant를 입력하면 [PlantUML integration] 이 나오는데 이를 인스톨하고 재시작한다.enter image description here
  2. 프로그램을 재시작한후에 File->new에 가보면 Plaunt UML 항목이 있다.enter image description here
  3. 생성된 파일을 열어서 이것저것 입력해보면 오른쪽에 미리보기가 나타나고 , 각 항목을 클릭하면 해당 라인에 선택이 된다. @,.@enter image description here
  4. 이런것도 만들수 있고…enter image description here
  5. 오른쪽 버튼을 누르면 저장하기도 된다.enter image description here
  6. 당연히 Git에 올리면 버젼관리도 된다.

2021년 11월 10일 수요일

Jacoco 테스트 커버리지

Jacoco 테스트 커버리지

JaCoCo 테스트 커버리지 평가툴

작업중인 프로젝트의 테스트가 제대로 작성되어 있는지를 검사하여 % 로 결과를 보여주는 툴이다.

프로젝트에 JaCoCo 플러그인 추가

grale.build.kts파일에 다음을 추가한다.

plugins {
  jacoco
}

jacoco {
  toolVersion = "0.8.5"
}

테스트결과 레포팅

테스트에 대한 커버리지 검사결과를 html,xml,csv형태로 만들어서 주기위해서 태스크를 추가한다.

task("jacocoTestReport", JacocoReport::class) {
    dependsOn("testDebugUnitTest")
    reports {
        xml.isEnabled = true
        csv.isEnabled = false
        html.isEnabled = false
    }
    sourceDirectories.setFrom("${projectDir}/src/main/java")
    classDirectories.setFrom("${buildDir}/tmp/kotlin-classes/debug")
    executionData.setFrom(files("${buildDir}/jacoco/testDebugUnitTest.exec"))
}

그밖의 https://qiita.com/beyondseeker/items/907e20a4da7d46c9de57
를 참고.

여러모듈일 경우 모듈별 결과를 merge태스트를 통해서 합할수도있다.
https://subroh0508.net/articles/jacoco-scripts-in-anroid-muitl-module-project-by-kotlin-dsl

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 화면에 라인별로 보여줌.