🐙

ついに来た!Dependabotのgroup version update機能の紹介

2023/07/12に公開

Dependabotは主な機能の1つとして、Dependencyを更新するためのPRを自動で作成する機能があります。
しかし、これまでのDependabotでは、PRが1つずつ作成されるため管理が意外と大変だと感じている方も多いのではないでしょうか。
Dependabotには、1つのPRに複数のDependencyの更新をまとめる機能を望む声は多く、長らくIssueで議論がなされていました。

この複数のDependencyの更新を1つのPRにまとめるというアプローチには、Renovateなどを使う方法もありましたが、私はDependabotへ期待し、こうした方法は取っておりませんでした。

そして、ついに先日GitHubからPublic BetaとしてDependabotのGrouped version updates機能が公開されました。
https://github.blog/changelog/2023-06-30-grouped-version-updates-for-dependabot-public-beta/

早速こちらの機能を個人サービスで使ってみたところかなり良かったので紹介したいと思います!

dependabot.ymlにgroupsのoptionを定義する

まず、複数のDependencyを1つのPRにまとめる機能、 Grouped version updates を使うためには、dependabot.ymlにgroupsの定義をする必要があります。

groupsの詳細はこちら。
https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file#groups

私が昔運用していた個人サービスのdependabot.ymlを題材とします。

groupsのoptionをpackage-ecosystemごとに追加します。
最小の変更ではありますが、これだけで十分です。

# dependabot.yml
version: 2
updates:
  - package-ecosystem: "gomod"
    directory: "./api"
    schedule:
      interval: "monthly"
+    groups:
+      dependencies:
+        patterns:
+          - "*"
  - package-ecosystem: "npm"
    directory: "./front"
    schedule:
      interval: "monthly"
    ignore:
      - dependency-name: "sass-loader"
+    groups:
+      dependencies:
+        patterns:
+          - "*"
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "monthly"

今回作成したPRはこちらです。
https://github.com/yuki0920/go-notes/pull/284

Grouped version updatesによって作成されるPR

上記のdependabot.ymlの修正PRをマージすると、まもなくDependabotによってPRが作成されました。
PRのタイトルからも分かる通り、複数のDependencyの更新がされています。

PRを開くと、

  • 更新対象のDependency一覧
  • DependencyごとのRelease notes, Changelog, Commits

が記載されています。

これぞまさに、我々が求めていた機能ではないでしょうか!?

実際に、作成されたPRは下記の2つです。

https://github.com/yuki0920/go-notes/pull/289
https://github.com/yuki0920/go-notes/pull/290

終わりに

Public Betaとはいえ、かなり期待通りの内容です。

今回は、dependabot.ymlの定義について、かなりシンプルな定義のみをしましたが、実際はDependencyの名前ごとに作成するPRを分けるなどのカスタマイズが可能です。詳しくはドキュメントを御覧ください。

参考

Discussion