GitHub Actionsを使って、定期的にBundle updateのプルリクエストを自動で作成する。
Yarn upgradeの方法も合わせて紹介している。
Bundle updateのワークフロー
.github/workflows
ディレクトリに、bundle-update.yml
を追加する。
name: Bundle update
on:
schedule:
- cron: '0 0 1 * *'
jobs:
createPullRequest:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Get ruby version
id: ruby
run: echo "::set-output name=version::$(cat .ruby-version)"
- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ steps.ruby.outputs.version }}
- name: Update dependencies
run: bundle update
- name: Get current date
id: date
run: echo "::set-output name=current::$(date +'%Y-%m-%d')"
- name: Create pull request
uses: peter-evans/create-pull-request@v3
with:
commit-message: Update dependencies
title: bundle update at ${{ steps.date.outputs.current }}
branch: bundle-update-${{ steps.date.outputs.current }}
labels: |
dependencies
ruby
……以上。便利!!
ワークフローファイルの説明
ワークフローの設定を、ひとつずつ説明していく。
on:
schedule:
- cron: '0 0 1 * *'
ワークフローを実行するイベント。
クーロン構文で、毎月1日に実行されるようにスケジュールを設定している。
https://docs.github.com/ja/actions/using-workflows/events-that-trigger-workflows#schedule
動作確認するときは、on: push
にすればPushしたタイミングでBundle updateのプルリクが作成される。
開発環境でアップデートされるGemがあるかは確認しておこう。
- name: Get ruby version
id: ruby
run: echo "::set-output name=version::$(cat .ruby-version)"
catコマンドを利用して .ruby-version
ファイルの内容を出力パラメータにセットしている。id: ruby
のステップで name=version
としているので、steps.ruby.outputs.version
で参照できる。
https://docs.github.com/ja/actions/using-workflows/workflow-commands-for-github-actions#setting-an-output-parameter
- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ steps.ruby.outputs.version }}
ruby/setup-ruby@v1
は、ruby-version
で指定したRubyのバージョンが使える環境を構築してくれる。
Rubyのバージョンが上がったときに、ruby-version
を更新しないで済むように動的に設定している。
https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
- name: Update dependencies
run: bundle update
Bundle updateを実行している。
- name: Get current date
id: date
run: echo "::set-output name=current::$(date +'%Y-%m-%d')"
プルリクのタイトルとブランチ名に使用するので、現在の日付を出力パラメーターにセットしている。id: date
のステップで name=current
としているので、steps.date.outputs.current
で参照できる。
セットしている日付のフォーマットは、ターミナルで printf $(date +'%Y-%m-%d')
とすれば確認できる。
- name: Create pull request
uses: peter-evans/create-pull-request@v3
with:
commit-message: Update dependencies
title: bundle update at ${{ steps.date.outputs.current }}
branch: bundle-update-${{ steps.date.outputs.current }}
labels: |
dependencies
ruby
peter-evans/create-pull-request@v3
は、GitHub APIを使ってプルリクを作成してくれる。bundle-update-yyyy-mm-dd
というブランチ名でプルリクエストが作成される。
プルリクにラベルが不要であれば、labels
は削除して良い。
https://github.com/marketplace/actions/create-pull-request
Yarn upgradeのワークフロー
.github/workflows
ディレクトリに、yarn-upgrade.yml
を追加する。
name: Yarn upgrade
on:
schedule:
- cron: '0 0 1 * *'
jobs:
createPullRequest:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Upgrade dependencies
run: yarn upgrade --latest
- name: Get current date
id: date
run: echo "::set-output name=current::$(date +'%Y-%m-%d')"
- name: Create pull request
uses: peter-evans/create-pull-request@v3
with:
commit-message: Update dependencies
title: yarn upgrade at ${{ steps.date.outputs.current }}
branch: yarn-upgrade-${{ steps.date.outputs.current }}
labels: |
dependencies
javascript
ほとんどBundle updateと同じ内容となっている。yarn-upgrade-yyyy-mm-dd
というブランチ名でプルリクエストが作成される。
おわりに
今回はGitHub Actionsだけで完結する一番簡単な方法を紹介したが、https://github.com/masutaka/circleci-bundle-update-pr を使えば、プルリクのコメントにアップデートされたGemのチェックリストが表示されるのでより便利かも。
Dependabotを設定すれば、Gemごとにプルリクを作ってくれますが、さすがに数が多すぎるので、月一回まとめて確認するくらいが丁度いいかと。
これで継続的にGemfileをフレッシュに保てるはず…!