GitHub Dependabot でメジャーバージョンを更新する Pull Request 自動作成を抑制してみた

2023.08.13

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

GitHub Dependabot 使うと、リポジトリにある依存関係をアップデートする Pull Request を自動作成してくれるので、依存関係のメンテナンスを効率化することができます。

しかし、セマンティックバージョニング(semver)のうち後方互換性が失われ破壊的変更が起こりうるメジャーバージョンアップデートは、Pull Request の自動作成の対象から外す運用としたい場合もあると思います。

そこで今回は、Dependabot でメジャーバージョンの Pull Request 作成を抑制するオプションを試してみました。

仕様確認

dependabot.ymlファイルではignoreオプションを指定することにより、更新する依存関係を無視することによりカスタマイズすることができます。その際に次の3つのオプションを指定してさらに細かく制御することが可能です。

オプション 説明
dependency-name 無視する依存関係名を指定。ワイルドカード*を使用可能。
versions 無視するする特定のバージョンまたはバージョン範囲を^1.0.0のように指定。
update-types 無視する semver の種類をversion-update:semver-majorversion-update:semver-minorまたはversion-update:semver-patchで指定。

このうちupdate-typesを使えば、メジャーバージョンを更新する Pull Request の自動作成のみを抑制することができそうです。

試してみた

dependabot.yml ファイル

ignore.update-typesversion-update:semver-majorを指定します。

dependabot.yml

version: 2
updates:
  - package-ecosystem: 'npm'
    directory: '/'
    schedule:
      interval: 'daily'
    ignore:
      - dependency-name: '*'
        update-types:
          - version-update:semver-major

動作確認

最新でないメジャーバージョンのパッケージを依存関係に追加します。Prettier は2.8.7の上位のバージョンに2.8.83.0.0および3.0.1を持っています。

package.json

{
  "devDependencies": {
    "prettier": "2.8.7"
  }
}

コミットを push して少し待つと、Dependabot により Pull Request が自動作成されました。3.Xへのメジャーバージョンアップデートは無視され、2.8.8へのパッチバージョンアップデートのみが行われています。

マイナーおよびパッチを無視した場合、メジャーバージョンはアップデートされるのか?

update-typesversion-update:semver-minorおよびversion-update:semver-patchを指定した場合、メジャーバージョンアップデートのみを無視する設定となるのか気になったので確認してみます。

ignore.update-typesを次のように指定します。

version: 2
updates:
  - package-ecosystem: 'npm'
    directory: '/'
    schedule:
      interval: 'daily'
    ignore:
      - dependency-name: '*'
        update-types:
          - version-update:semver-minor
          - version-update:semver-patch

最新でないメジャーバージョンのパッケージを依存関係に追加します。@classmethod/athena-query0.3.3の上位のバージョンに0.3.41.0.01.0.1および1.1.0を持っています。

package.json

{
  "dependencies": {
    "@classmethod/athena-query": "0.3.3",
  }
}

少し待つと最新のメジャーバージョンである1.1.0へアップデートを行う Pull Request が作成されました。

メジャーバージョンアップデートを抑制したい場合は、update-typesversion-update:semver-majorを明示的に指定する必要があるようです。

Pull Request の自動作成はするが、自動マージはしたくない場合

メジャーバージョンアップデートであっても Pull Request を作成したい場合もあると思います。

下記では、GitHub Actions と組み合わせて、Pull Request の作成はすべてのバージョンタイプで行い、マージはメジャーバージョンアップデートのみ抑制する方法を紹介しています。

ポリシーに合わせて適した方を選択してください。

おわりに

GitHub Dependabot でメジャーバージョンを更新する Pull Request 自動作成を抑制してみました。

依存関係ごとのアップデートのされ方を細かく制御できるのは便利ですね。是非試してみてください。

以上