Ruby
GitHub
Gem
CircleCI

CircleCIから1コマンドでPull requestするgem: pr-daikou

背景

SideCIなどPull requestのコード解析をしてチームのコード規約に違反したコードを自動で修正するサービスを利用している方は多いのではないでしょうか。
ほかにもbundle updateも定期的に実行してgemを最新に更新し続ける方針をチームで決めていたりすると思います。

ただ、SideCIは無料枠だとpublic repositoryだけ、bundle updateも当番制だったり、チームの中のある1人が善意でやっている状態になってしまったりということがあると思います。

例えばCircleCIconfig.ymlを使いこなせばコード解析や、bundle updateを定期実行してPull requestを自動作成することもできますが、設定は思ったより複雑で最初の一歩がなかなか大変です。
ここで紹介するpr-daikouは、その複雑なPull request作成部分を1コマンドでできるようになります。

できるようになること

  • ワンライナーでブランチ作成からターゲットブランチへのPull requestまでできる
  • CircleCIのジョブに仕込めば、定期的にbundle updateや構文解析・補正の結果をPull requestにできる

pr-daikouとは

新しく公開したpr-daikouは、Pull requestの作成を「代行」してくれます。
例えばbundle updateするとGemfile.lockが更新されます。この差分を新しいブランチを作成してpushし、ターゲットに指定したブランチにPull requestします。

使い方

詳しくはREADME.mdに記載してありますが、ここでは日本語で説明したいと思います。

準備

インストール

Railsのプロジェクトに組み込むならGemfileにpr-daikouを追加してください。

gem 'pr-daikou'

CI上でその場限りで使うなら、そのままgem installでもOKです。

gem install pr-daikou

GitHub Personal access tokenの発行

CircleCIから、git pushやPull requestを作成するにはaccessトークンが必要です。
GitHubのPersonal access token設定で、repoへのアクセス権限をチェックしてトークン発行します。

https://gyazo.com/20a65330f014f01ed9c926a1815f811b

CircleCIに環境変数を登録

CircleCIでaccessトークンを読み込めるように環境変数に設定します。
[BUILD SETTINGS] -> [Environment Variables] -> [Add Variable]でGITHUB_ACCESS_TOKENをキーにして登録します。

https://gyazo.com/9a8cd90ac2173966cd583524b763b04b

CircleCIのconfig.ymlを設定

あとは実際にCircleCIが実行されるようにconfig.ymlを設定するだけです。

CircleCI1.0

deployment:
  code_correction:
    branch: develop
    commands:
      - bundle update
      - pr-daikou

CircleCI2.0

version: 2

jobs:
  build:
    docker:
      - image: circleci/ruby:2.5
    steps:
      - checkout
      - run: bundle update
      - run: pr-daikou

CI実行結果

ここまでの設定が完了したらCircleCIでの実行結果から、Pull requestが自動作成されるようになります。

CircleCIの実行画面
https://gyazo.com/bce1ece26eded264da6f4e44b75f2d93

作成されたPull request
https://gyazo.com/4a98ef7d16baf70dc31b45bf513f6967

応用例

Pull requestするときの項目を任意に設定できます。

  • git configに設定するuser設定
  • Pull requestのタイトル
  • コミットメッセージ
  • Pull requestのターゲットブランチ
  • 作成するブランチ名
  • Pull requestのdescriptionにターゲットブランチのPull request URLを追記

コマンドリファレンス

$ pr-daikou --help
Usage: pr-daikou [options]
        --email EMAIL                git committed user email, default: pr_daikou@example.com
        --name NAME                  git committed user name, default: pr_daikou
    -T, --title TITLE                pull request title, default: PR daikou [at Mon Jan 1 12:34:56 UTC 2017]
    -m, --commit MESSAGE             add git commit message, default: :robot: PR daikou
    -b, --base BRANCH                pull request base branch, default: master
    -t, --topic BRANCH               create new branch, default: ci/pr-daikou_[20170101123456.000]
    -u, --pullrequest URL            add new pull request description, default: nil

その他

姉妹gemにrubocop --auto-correctに特化したrubocop-automataを公開しています。