bundler_diffgems という gem を作りました #speee_lounge
2/18(土) と 2/25(土) に Speee さんのもくもく会に参加して、 gem が出来たので紹介。
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
に保存して、使っています。
#!/bin/bash set -e # TODO: You need to edit these variables REPO=owner/repo BASE_BRANCH=master if [ -z "${GITHUB_TOKEN}" ] then echo 'usage: GITHUB_TOKEN=<your 40 char token> update_gems' exit 1 fi # Update gems bundle update # Push a commit 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} # Create a pull request 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 のアップデートを定期実行していない人でも便利に使えると思うので、ぜひお試しください。
*1:compare_linkerに似てる