[GitHub] Dependabot grouped version updates で semantic version level が利用可能になりました

2023.08.20

こんにちは、CX 事業本部 Delivery 部の若槻です。

以前のエントリで Dependabot の Grouped version updates を紹介しました。

Grouped version updates を利用することにより、Dependabot version updates による Pull Request を任意のグループでまとめて作成することができます。(現在パブリックベータ)

そしてこのたびの Dependabot のアップデートで、セマンティックバージョニング(semver)ごとにグループを作成することができるようになりました。

試してみた

Dependabot の構成

ドキュメントによると、update-typesオプションでminor,patchおよびmajorを指定できるようです。

今回は、次のようにマイナーおよびパッチバージョンを対象としたグループを設定した Dependabot の構成を作成します。

update-types で対象のセマンティックレベルを指定します。

.github/dependabot.yml

version: 2
updates:
  - package-ecosystem: npm
    directory: /
    schedule:
      interval: daily
    groups:
      angular:
        patterns:
          - '*'
        update-types:
          - minor
          - patch

動作確認

古い依存関係を追加

最新バージョンよりメジャー、マイナーおよびパッチバージョンが古い依存関係を package.json に含めます。

package.json

{
  "devDependencies": {
    "@types/node": "20.5.0", // -> 20.5.1
    "vite": "3.2.5", // -> 4.4.9
    "vitest": "0.34.1", // -> 0.34.2
    "luxon": "3.3.0", // -> 3.4.0
  }
}

Pull Request の自動作成

変更を push すると、Dependabot により Pull Request が自動で作成されました。

  • Bump vite from 3.2.5 to 4.4.9
  • Bump the minor-and-patch group with 3 updates

Bump vite from 3.2.5 to 4.4.9では、メジャーバージョンアップが単一の Pull Request として作成されています。

{
  "devDependencies": {
-    "vite": "3.2.5",
+    "vite": "4.4.9",
  }
}

一方で Grouped version updates の Pull Request であるBump the minor-and-patch group with 3 updatesでは、マイナーおよびパッチのバージョンアップのみがグルーピングされています。

package.json

{
  "devDependencies": {
-    "@types/node": "20.5.0",
+    "@types/node": "20.5.1",
-    "vitest": "0.34.1",
+    "vitest": "0.34.2",
-    "luxon": "3.3.0",
+    "luxon": "3.4.0"
  }
}

update-typesオプションの動作を確認することができました。

metadata を確認してみる

ちなみに以前のエントリで試した方法で、GitHub Actions を利用して Dependabot の metadata を取得してみると、Bump the minor-and-patch group with 3 updates をトリガーとしたワークフローでは次のような metadata が取得されました。

{
    "updated-dependencies-json": "[{\"dependencyName\":\"@types/node\",\"dependencyType\":\"direct:development\",\"updateType\":\"version-update:semver-patch\",\"directory\":\"/\",\"packageEcosystem\":\"npm_and_yarn\",\"targetBranch\":\"main\",\"prevVersion\":\"\",\"newVersion\":\"\",\"compatScore\":0,\"maintainerChanges\":false,\"dependencyGroup\":\"minor-and-patch\",\"alertState\":\"\",\"ghsaId\":\"\",\"cvss\":0},{\"dependencyName\":\"vitest\",\"dependencyType\":\"direct:development\",\"updateType\":\"version-update:semver-patch\",\"directory\":\"/\",\"packageEcosystem\":\"npm_and_yarn\",\"targetBranch\":\"main\",\"prevVersion\":\"\",\"newVersion\":\"\",\"compatScore\":0,\"maintainerChanges\":false,\"dependencyGroup\":\"minor-and-patch\",\"alertState\":\"\",\"ghsaId\":\"\",\"cvss\":0},{\"dependencyName\":\"luxon\",\"dependencyType\":\"direct:development\",\"updateType\":\"version-update:semver-minor\",\"directory\":\"/\",\"packageEcosystem\":\"npm_and_yarn\",\"targetBranch\":\"main\",\"prevVersion\":\"\",\"newVersion\":\"\",\"compatScore\":0,\"maintainerChanges\":false,\"dependencyGroup\":\"minor-and-patch\",\"alertState\":\"\",\"ghsaId\":\"\",\"cvss\":0}]",
    "dependency-names": "@types/node, vitest, luxon",
    "dependency-type": "direct:development",
    "update-type": "version-update:semver-minor",
    "directory": "/",
    "package-ecosystem": "npm_and_yarn",
    "target-branch": "main",
    "previous-version": "",
    "new-version": "",
    "compatibility-score": "0",
    "maintainer-changes": "false",
    "dependency-group": "minor-and-patch",
    "alert-state": "",
    "ghsa-id": "",
    "cvss": "0"
}

update-typesオプションを指定した場合でもそれに対応する metadata 情報は特に取得されませんでした。アップデートのセマンティックレベルによりワークフローの分岐を実装したい場合は、アップデート中の最大のセマンティックレベルが入るupdate-typeやグループ名が入るdependency-groupを利用することになりそうです。

おわりに

Dependabot grouped version updates で semantic version level が利用可能になったのでご紹介しました。

パブリックベータであるからか、Grouped version updates はどんどん新しい機能がアップデートで便利になっていっているので、今後も注目していきたいと思います。

以上