2/18(土) と 2/25(土) に Speee さんのもくもく会に参加して、 gem が出来たので紹介。
speee.connpass.com
bundler_diffgems
bundler_diffgems は bundle update
を支援するための CLI ツールで、GitHub の比較URL を簡単に表示できます。*1
$ gem install bundler_diffgems
でインストールできます。
使い方
いつものように bundle update
をします。
$ bundle update
そのあと、 bundle diffgems
を実行します。
$ bundle diffgems
rake: 11.3.0 => 12.0.0 - https://github.com/ruby/rake/compare/v11.3.0...v12.0.0
rspec: 3.5.0 =>
...
こんな感じで GitHub の比較URL付きでアップデートされた gem の一覧が表示されます。
速度
GitHub API の実行は parallel の gem を使っているので、そこそこ実用的な速度で比較URLが出るんじゃないかなーと思います。
フォーマット
Pull Request で見やすくするために md_table
というフォーマットだけ増やしてます。
bundle update してプルリクを投げるスクリプト
私はこんな感じのスクリプトを bin/update_gems
に保存して、使っています。
set -e
TODO
REPO=owner/repo
BASE_BRANCH=master
if [ -z "${GITHUB_TOKEN}" ]
then
echo 'usage: GITHUB_TOKEN=<your 40 char token> update_gems'
exit 1
fi
bundle update
NOW=$(date +'%Y%m%d%H%M%S')
HEAD_BRANCH="gems/${NOW}"
BODY=$(bundle diffgems --escape-json -f md_table)
git checkout -b ${HEAD_BRANCH}
git add -u
git commit -m "Update gems ${NOW}"
git push origin ${HEAD_BRANCH}
API_URL="https://api.github.com/repos/${REPO}/pulls"
echo '{ "title": "Update gems '"${NOW}"'", "head": "'"${HEAD_BRANCH}"'", "base": "'"${BASE_BRANCH}"'", "body": '${BODY}' }' |
curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST --data-binary @- ${API_URL}
定期的に bundle update をする
CI で上記のスクリプトを実行すると定期的な bundle update
が実現できます。
下記は AWS CodeBuild の buildspec.yml
の例です。*2
version: 0.1
phases:
pre_build:
commands:
- gem install bundler
- gem install bundler_diffgems
- git config user.name bundler_bot
- git config user.email mail@example.com
build:
commands:
- ./bin/update_gems
AWS で定期実行する例
おわり
gem のアップデートを定期実行していない人でも便利に使えると思うので、ぜひお試しください。