Slide 1

Slide 1 text

Danger × Android wasabeef Potatotips #44

Slide 2

Slide 2 text

About me 降矢 大地 (Daichi Furiya) Google Developer Expert @wasabeef_jp wasabeef

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

コードレビューの自動化をCI上で行う Android Lint, Swift Lint, ESLint, 
 HLint, CheckStyle Format....... Danger

Slide 5

Slide 5 text

General

Slide 6

Slide 6 text

Kotlin lint (Ktlint)

Slide 7

Slide 7 text

Android Lint

Slide 8

Slide 8 text

Android Lint

Slide 9

Slide 9 text

Plugins

Slide 10

Slide 10 text

Plugins

Slide 11

Slide 11 text

How to Set Up

Slide 12

Slide 12 text

Gemfile / Dangerfile の用意 bundle install Bundle exec danger Danger

Slide 13

Slide 13 text

Gemfile

Slide 14

Slide 14 text

Gemfile gem "danger" gem "danger-android_lint" gem "danger-findbugs" gem "danger-checkstyle_format"

Slide 15

Slide 15 text

Dangerfile

Slide 16

Slide 16 text

Dangerfile for PR # WIP warn("Work in Progress") if github.pr_title.include? “WIP" # BIG PR warn("Big PR > 1000") if git.lines_of_code > 1000 # NO ASSIGN has_assignee = github.pr_json[assignee] != nil warn("No Assign", sticky: false) unless has_assignee

Slide 17

Slide 17 text

Dangerfile for Android Lint # Android Lint android_lint.gradle_task = "app:lint" android_lint.report_file = “path/lint-results.xml” android_lint.filtering = true android_lint.lint(inline_mode: true)

Slide 18

Slide 18 text

Dangerfile for ktlint # checkstyle for ktlint github.dismiss_out_of_range_messages checkstyle_format.base_path = Dir.pwd checkstyle_format.report “path/ktlint-report.xml”

Slide 19

Slide 19 text

Gradle for configurations { ktlint } dependencies { ktlint 'com.github.shyiko:ktlint:0.10.0' } task ktlint(type: Exec) { commandLine 'java', '-cp', configurations.ktlint.join(System.getProperty('path.separator')), 'com.github.shyiko.ktlint.Main', '--reporter=checkstyle', 'src/**/*.kt' def outputDirectory = "$buildDir/reports" def outputFile = "${outputDirectory}/ktlint-report.xml" ignoreExitValue = true doFirst { new File(outputDirectory).mkdirs() standardOutput = new FileOutputStream(outputFile) } } https://ktlint.github.io/

Slide 20

Slide 20 text

Execution

Slide 21

Slide 21 text

Execution // Single bundle exec danger // Multiple bundle exec danger --dangerfile="app/Dangerfile" --danger_id=1 bundle exec danger --dangerfile="tv/Dangerfile" --danger_id=2

Slide 22

Slide 22 text

Conclusion

Slide 23

Slide 23 text

Thank you. twitter.com/wasabeef_jp wasabeef.jp github.com/wasabeef