💬

Dependabot を使ってGitHubのGemfileのアップデートのPRを作る

2021/09/24に公開

目的

RailsプロジェクトのGemfileを最新に保つべく、Dependabotを使う

手順

/.github/dependabot.yml をdefault branchにcommitするだけです。

documentは下記です。

https://docs.github.com/en/code-security/supply-chain-security/keeping-your-dependencies-updated-automatically/configuration-options-for-dependency-updates

自分の設定

以下自分が使っている設定です。

version: 2
updates:
  - package-ecosystem: "bundler"
    directory: "/"
    target-branch: "develop"
    schedule:
      interval: "weekly"
      day: "friday"
      time: "00:32"
      timezone: "Asia/Tokyo"
    versioning-strategy: "lockfile-only"
    open-pull-requests-limit: 2
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"
      day: "friday"
      time: "00:32"
      timezone: "Asia/Tokyo"
    versioning-strategy: "lockfile-only"
    open-pull-requests-limit: 2

説明

version

The file must start with version: 2

versionは2にしてくださいとのことなので 2です。

package-ecosystem

https://docs.github.com/en/code-security/supply-chain-security/keeping-your-dependencies-updated-automatically/configuration-options-for-dependency-updates#package-ecosystem

アップデートを管理したいパッケージマネージャを指定します。

  • bundlerであれば bundler
  • npmであれば npm

です。
他のライブラリについては上記のリンクから参照してください。

directory

https://docs.github.com/en/code-security/supply-chain-security/keeping-your-dependencies-updated-automatically/configuration-options-for-dependency-updates#directory

パッケージマネージャの設定ファイルがあるフォルダです。
多くのプロジェクトですと / で良いかと思います。

複数のアプリを1つのリポジトリで管理している場合は、アプリ毎のフォルダを指定してください。

target-branch

https://docs.github.com/en/code-security/supply-chain-security/keeping-your-dependencies-updated-automatically/configuration-options-for-dependency-updates#target-branch

アップデートを検知するブランチです。開発を行っているブランチを指定すると良いかと思います。今回はdevelopで開発をしているという過程で、 develop としました。

こうすることで、ライブラリのバージョンアップのpull requestは 以下のように developブランチに対して行われます。

schedule

https://docs.github.com/en/code-security/supply-chain-security/keeping-your-dependencies-updated-automatically/configuration-options-for-dependency-updates#scheduleday

timezone

これを指定しない場合は時間はすべてUTCです。
"Asia/Tokyo" をしておけば、日本時間で記述できるので便利です。

time

Dependabotが動く時間を指定します。

interval

weeklyだと毎週です。dailyだと毎日です。
weeklyの場合は曜日を指定できます。

versioning-strategy

https://docs.github.com/en/code-security/supply-chain-security/keeping-your-dependencies-updated-automatically/configuration-options-for-dependency-updates#versioning-strategy

lockfile-only としておけば、Gemfileの範囲内でライブラリをアップデートしてくれます。
Gemfile.lockがアップデートされます。

Gemfileの記述は何らかの意味があってなされているのでそちらには手をつけません。

open-pull-requests-limit

一度に作成するPR数の最大値です。

defult各パッケージマネージャ毎に5個です。

今回のyml例では、2にしています。これは、一度に5つあったとしても結局スプリントないで対処できないので、少なめにしました。

動作例

上述のymlをmasterにcommitした結果いかのPull requestがさくせいされました。
bunlderから2個
npmから2個
のPRが作られていることがわかります。

このPRはcloseする事ができます。ただし、次versionアップまではDependabotからの通知が行われなくなりますバージョンアップに気づけなくなるというこことになってしまうので、すこし慎重にcloseの判断をしてください。

Discussion