量産型エンジニアの憂鬱

きっと僕は何物にもなれない。

Dangerを使ってみる

Danger

What is Danger?

CI上で、バージョン管理ホスティングサービス の Pull Request / Merge Request の内容を解析して、コメントすることができるツール。
設定ファイルは Ruby DSL で記述するので、様々なチェックができる。

サポート状況

サポート状況などは公式を確認してください。

使い方

プロジェクト

Gemfileに danger を追加

gem 'danger'

Dangerfileを作成

message('PRいただきました')

CI環境で実行

bundle install
bundle exec danger

Dangerによるコメント

Dangerによるコメントは、デフォルトでは最初に行われたコメントを更新する。
実行時に --new-comment オプションを指定することで新しいコメントとして表示される。

bundle exec danger --new-comment

Dangerで取得できる情報

githubGitHubの場合)で各種情報が取得できる。
http://danger.systems/reference.html

github.apiOctokit::Client が取得できるので、追加でトークンなど指定せずにGitHubAPIを介して情報を取得することができる。

必要な環境変数

環境変数 DANGER_GITHUB_API_TOKENが必要。

DANGER_GITHUB_API_TOKEN="xxxxxx"

Dangerfile

DSL

コメント用の拡張構文として、 messagewarnfail などが用意されているがHTMLのテーブルでコメントしてくれる。
フォーマットが気に入らない場合は markdown が用意されている。

アウトプット(テーブルとして表示)

  • message
  • warn
  • fail(ビルドが失敗する)

アウトプット(テーブルの下に表示)

diffにコメント

warn("Please add your name", file: "CHANGELOG.md", line: 4)

プラグイン

共通の処理などをプラグインとして提供しておくと、使い回しも効きそう。
プラグインの作成方法は 公式

運用

OSSプロジェクトなどではビルド毎に danger を実行してチェックしている
dangerは Pull Request 以外のビルドは自動的にスキップする

ローカルで確認する方法

Dangerfileを変更して確認したい場合、 commit -> push -> hook だと効率が悪いし、PRなどを汚してしまう。
ローカルでPRを指定して確認する方法も用意されている。

http://danger.systems/guides/troubleshooting.html#i-want-to-work-locally-on-my-dangerfile

bundle exec danger pr https://github.com/danger/danger/pull/662