@vividmuimui
2018/09/05 社内LT
レビューbot用のツール
jsとrubyで提供されている
# PRタイトルにWIPついてたら、コメント
warn("PR is classed as Work in Progress") if github.pr_title.include? "[WIP]"
# PRの変更行数が500以上だったら、コメント
warn("Big PR") if git.lines_of_code > 500
# 普通にrubyスクリプトなので、 やりたい放題
fail("fdescribe left in tests") if `grep -r fdescribe specs/ `.length > 1
fail("fit left in tests") if `grep -r fit specs/ `.length > 1
# rubocopなどよく使うやつはpluginがある
rubocop.lint inline_comment: true
xxx.ja.html
を編集したけど
xxx.zh-TW.html
を編集してなければ警告など
注意: ruby, Github, CircleCIでの話です。雰囲気で読み取ってください。
# PRにコメント
message "foo bar"
# markdownとしてコメント
markdown ":alert:"
# CI を落とす
fail "This build didn't pass tests"
# :alert: マークつく
warn "Big PR"
# file changedにコメントもできる
warn("xxxxxx", file: "Dangerfile", line: 10)
git.added_files
git.modified_files
git.deleted_files
git.lines_of_code
# コミットメッセージ
warn("") if git.commits.any? { |c| c.message =~ /^Merge branch 'master'/ }
# diff
diff = git.diff_for_file("Gemfile.lock")
message("") if diff && diff.patch =~ "nokogiri"
github.pr_title
github.pr_body
github.pr_labels
github.branch_for_base
# review
github.review.start
github.review.fail(message)
github.review.warn(message)
github.review.submit
gemとしてpluginを追加する以外にも色んな方法で追加できる
# githubのファイル直指定
device_grid = "https://raw.githubusercontent.com/fastlane/fastlane/master/danger-device_grid/lib/device_grid/plugin.rb"
danger.import_plugin(device_grid)
# local file
danger.import_plugin("danger/plugins/watch_plugin.rb")
danger.import_plugin("danger/plugins/*.rb")
danger.import_dangerfile(path: "path/to/Dangerfile")
# gem
danger.import_dangerfile(gem: "ruby-grape-danger")
# github, gitlab
danger.import_dangerfile(gitlab: "ruby-grape/danger")
danger.import_dangerfile(
github: "ruby-grape/danger",
branch: "custom",
path: "path/to/Dangerfile"
)
Dangerfile
を用意DANGER_GITHUB_API_TOKEN
を設定bundle exec danger --verbose
とかでdangerを実行だけ!
danger pr --verbose
ただ、対象にするPRが、そのブランチで一番最近マージされたPRを対象にしているっぽい(たぶん)
GithubでオープンになっているPRを対象に実行したりはできなそう(未確認)