Dangerのプラグインを作ってもう一歩自動化を進める

 Dangerのプラグインを作ってもう一歩自動化を進める

Dangerで効率よくPR駆動開発
https://goo.gl/tYdWpT
Dangerを使ってPRを自動的にチェックする
https://goo.gl/pibwsW
メルカリ カウルの開発気になる?なら話そう!
https://goo.gl/bczDXd
Creating your first plugin
https://goo.gl/NWZ7ZF
Danger for Android
https://speakerdeck.com/wasabeef/danger-for-android

danger-auto_label
https://github.com/kaelaela/danger-auto_label
danger-plugin-template
https://github.com/danger/danger-plugin-template
danger.system(GitLab repo)
https://goo.gl/ME96Fz

A967476c5855d593710a9a580f6b2aed?s=128

Yuichi Maekawa

October 27, 2017
Tweet

Transcript

  1. 9.

    danger-auto_label • set_wip : PRのタイトルをみて[WIP]がついているとラベルをつける • set:[kotlin]がついてるとkotlinラベルを作成してつけてくれる if github.pr_title.include? "[WIP]"

    auto_label.set_wip(github.pr_json["number"]) end if github.pr_title.include? "[kotlin]" auto_label.set(github.pr_json["number"], “kotlin”, “6fa8dc”) end
  2. 10.

    前提 • Ruby関連(Rake, RSpec, gem, ) • Github API •

    Octokit.rb (Github APIのクライアント実装)
  3. 12.

    Dangerのプラグインの構成 danger-your_plugin ├── .travis.yml ├── Gemfile ├── Guardfile ├── LICENSE.txt

    ├── README.md ├── Rakefile ├── danger-your_plugin.gemspec ├── lib │ ├── danger_your_plugin.rb │ ├── danger_plugin.rb │ └── your_plugin │ ├── gem_version.rb │ └── plugin.rb └─ spec ├── your_plugin_spec.rb └── spec_helper.rb
  4. 13.

    Dangerのプラグインの構成 danger-your_plugin ├── .travis.yml ├── Gemfile ├── Guardfile ├── LICENSE.txt

    ├── README.md ├── Rakefile ├── danger-your_plugin.gemspec ├── lib │ ├── danger_your_plugin.rb │ ├── danger_plugin.rb │ └── your_plugin │ ├── gem_version.rb │ └── plugin.rb └─ spec ├── your_plugin_spec.rb └── spec_helper.rb
  5. 14.

    Dangerのプラグインの構成 danger-your_plugin ├── .travis.yml ├── Gemfile ├── Guardfile ├── LICENSE.txt

    ├── README.md ├── Rakefile ├── danger-your_plugin.gemspec ├── lib │ ├── danger_your_plugin.rb │ ├── danger_plugin.rb │ └── your_plugin │ ├── gem_version.rb │ └── plugin.rb └─ spec ├── your_plugin_spec.rb └── spec_helper.rb ライセンスとか表向きの情報系
  6. 15.

    Dangerのプラグインの構成 danger-your_plugin ├── .travis.yml ├── Gemfile ├── Guardfile ├── LICENSE.txt

    ├── README.md ├── Rakefile ├── danger-your_plugin.gemspec ├── lib │ ├── danger_your_plugin.rb │ ├── danger_plugin.rb │ └── your_plugin │ ├── gem_version.rb │ └── plugin.rb └─ spec ├── your_plugin_spec.rb └── spec_helper.rb gemの開発者公開情報(メアドとか)
  7. 16.

    Dangerのプラグインの構成 danger-your_plugin ├── .travis.yml ├── Gemfile ├── Guardfile ├── LICENSE.txt

    ├── README.md ├── Rakefile ├── danger-your_plugin.gemspec ├── lib │ ├── danger_your_plugin.rb │ ├── danger_plugin.rb │ └── your_plugin │ ├── gem_version.rb │ └── plugin.rb └─ spec ├── your_plugin_spec.rb └── spec_helper.rb ライブラリの中身
  8. 17.

    Dangerのプラグインの構成 danger-your_plugin ├── .travis.yml ├── Gemfile ├── Guardfile ├── LICENSE.txt

    ├── README.md ├── Rakefile ├── danger-your_plugin.gemspec ├── lib │ ├── danger_your_plugin.rb │ ├── danger_plugin.rb │ └── your_plugin │ ├── gem_version.rb │ └── plugin.rb └─ spec ├── your_plugin_spec.rb └── spec_helper.rb テスト
  9. 19.

    実装の紹介 • ラベルの追加 • Githubの情報 # Add new label to

    repo. Use octolit api. def add_label(name, color='fef2c0') github.api.add_label(repo, name, color) end def labels @labels ||= github.api.labels(repo) end def repo @repository ||= github.pr_json[:base][:repo][:full_name] end
  10. 20.

    実装の紹介 • ラベルの追加 • Githubの情報 # Add new label to

    repo. Use octolit api. def add_label(name, color='fef2c0') github.api.add_label(repo, name, color) end def labels @labels ||= github.api.labels(repo) end def repo @repository ||= github.pr_json[:base][:repo][:full_name] end octokitのインスタンスを得る
  11. 21.

    実装の紹介 • ラベルの追加 • Githubの情報 # Add new label to

    repo. Use octolit api. def add_label(name, color='fef2c0') github.api.add_label(repo, name, color) end def labels @labels ||= github.api.labels(repo) end def repo @repository ||= github.pr_json[:base][:repo][:full_name] end Pull requestのjsonが返る
  12. 22.

    実際のPRに実行 • 対象のrepoをクローンし、Dangerの実行環境を作る • Gemfileにローカルパスを通す • Gemfileの依存解決 • 対象のPRに実行 $

    bundle install --path vendor/bundle source "https://rubygems.org" gem 'danger' gem 'danger-plugin_name', :path => 'path/to/danger-plugin_name' $ bundle exec danger pr https://github.com/your_repo/pull/2049
  13. 23.

    公開に向けて • README.mdの自動生成 • 最低限のドキュメントが書かれているかチェック • Gemの公開 • 公式webに載せる :

    https://goo.gl/ME96Fz ここにPRでおk $ bundle exec danger plugins lint $ bundle exec danger plugins readme $ rake release
  14. 24.