背景
SideCIなどPull requestのコード解析をしてチームのコード規約に違反したコードを自動で修正するサービスを利用している方は多いのではないでしょうか。
ほかにもbundle updateも定期的に実行してgemを最新に更新し続ける方針をチームで決めていたりすると思います。
ただ、SideCIは無料枠だとpublic repositoryだけ、bundle updateも当番制だったり、チームの中のある1人が善意でやっている状態になってしまったりということがあると思います。
例えばCircleCIのconfig.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へのアクセス権限をチェックしてトークン発行します。
CircleCIに環境変数を登録
CircleCIでaccessトークンを読み込めるように環境変数に設定します。
[BUILD SETTINGS] -> [Environment Variables] -> [Add Variable]でGITHUB_ACCESS_TOKENをキーにして登録します。
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が自動作成されるようになります。
応用例
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を公開しています。