Help us understand the problem. What is going on with this article?

DangerでCheckstyleの結果を指摘する

More than 1 year has passed since last update.

CircleCI 2.0でAndroidのアプリをビルドしつつ、コードレビューBOTも動かす - Qiita で、Androidアプリの自動レビューでRubyが使えるようになりました。

その最後で書いてましたが、gradleのタスクを実行しないDangerプラグインを自分で作ったので、それの利用方法などを紹介しようと思います。

主にAndroidのアプリを想定していますが、Checkstyle formatのXMLが用意できれば、同じように自動レビューさせることが出来ると思います。

作ったもの

RubyGems : danger-checkstyle_format
GitHub : danger-checkstyle_format

出来ること

Checkstyle formatのXMLファイルを用意して、Danger経由で danger-checkstyle_format を実行すると、差分に対してwarningをコメントしてくれる。

イメージとしては、こんな感じ。

https://github.com/noboru-i/SlideViewer/pull/76

image.png

導入手順

基本的には、 CircleCI 2.0でAndroidのアプリをビルドしつつ、コードレビューBOTも動かす - Qiita で記載した内容のうち、Saddlerに関する部分を、Dangerに書き換えるイメージ。

利用するGemのインストール

Gemfileに、下記の依存関係を追加します。

gem 'danger'
gem 'danger-checkstyle_format', '~> 0.0.1'

bundle install を実行し、Gemfile.lockを更新しておきます。

Dangerfileを作成する

https://github.com/noboru-i/SlideViewer/blob/0680f790273785adfea8c3d5184f59a96b3a8e42/Dangerfile こんな感じのDangerfileを作成する。
最低限必要なのは、下記の3行です。

github.dismiss_out_of_range_messages

checkstyle_format.base_path = Dir.pwd
checkstyle_format.report 'app/build/reports/checkstyle/checkstyle.xml'

github.dismiss_out_of_range_messages については、 https://techblog.recruitjobs.net/development/danger_driven_development を参照してください。

checkstyle_format.report の引数は、利用するCheckstyle formatのXMLファイルです。
ただ、基本的にはfileタグのname属性は絶対パスになるようです。
inlineでレビューするときには、リポジトリルートからの相対パスが必要になるため、それを打ち消すために base_path の指定が必要となります。
https://github.com/noboru-i/danger-checkstyle_format/blob/03de2616687fe7e8c8d93afbb2f72e087e2f1fc3/lib/checkstyle_format/plugin.rb#L36 こんな感じで、置換しています。)

CircleCIの設定を行う

.circleci/config.yml を下記のように修正します。
参考: https://github.com/noboru-i/SlideViewer/pull/75/files#diff-1d37e48f9ceff6d8030570cd36286a61

jobs:
  build:
    <<: *defaults
    steps:
      - run:
          name: Check lint
          command: ./gradlew :app:check -x test
      - persist_to_workspace:
          root: ~/code
          paths:
            - .
  check:
    working_directory: ~/code
    docker:
      - image: circleci/ruby:2.4.1
    steps:
      - attach_workspace:
          at: ~/code
... 
      - run:
          name: Run danger
          command: bundle exec danger

いろいろ書いてありますが、メインはRubyのコンテナで bundle exec danger をやっている点です。
あとは、その前で ./gradlew :app:check をすることで、 app/build/reports/checkstyle/checkstyle.xml が出力しておき、それを attache_workspace などを利用して引き継いでいます。

最後に

初めてのDangerプラグインでした。
もし、使ってバグなど発見されましたら、issueやPRしていただけるとうれしいです。 :bowing_man:

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away