
GitHub Dependabot でメジャーバージョンを更新する Pull Request 自動作成を抑制してみた
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、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-major、version-update:semver-minorまたはversion-update:semver-patchで指定。 | 
このうちupdate-typesを使えば、メジャーバージョンを更新する Pull Request の自動作成のみを抑制することができそうです。
試してみた
dependabot.yml ファイル
ignore.update-typesでversion-update:semver-majorを指定します。
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.8、3.0.0および3.0.1を持っています。
{
  "devDependencies": {
    "prettier": "2.8.7"
  }
}
コミットを push して少し待つと、Dependabot により Pull Request が自動作成されました。3.Xへのメジャーバージョンアップデートは無視され、2.8.8へのパッチバージョンアップデートのみが行われています。

マイナーおよびパッチを無視した場合、メジャーバージョンはアップデートされるのか?
update-typesでversion-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-queryは0.3.3の上位のバージョンに0.3.4、1.0.0、1.0.1および1.1.0を持っています。
{
  "dependencies": {
    "@classmethod/athena-query": "0.3.3",
  }
}
少し待つと最新のメジャーバージョンである1.1.0へアップデートを行う Pull Request が作成されました。

メジャーバージョンアップデートを抑制したい場合は、update-typesでversion-update:semver-majorを明示的に指定する必要があるようです。
Pull Request の自動作成はするが、自動マージはしたくない場合
メジャーバージョンアップデートであっても Pull Request を作成したい場合もあると思います。
下記では、GitHub Actions と組み合わせて、Pull Request の作成はすべてのバージョンタイプで行い、マージはメジャーバージョンアップデートのみ抑制する方法を紹介しています。
ポリシーに合わせて適した方を選択してください。
おわりに
GitHub Dependabot でメジャーバージョンを更新する Pull Request 自動作成を抑制してみました。
依存関係ごとのアップデートのされ方を細かく制御できるのは便利ですね。是非試してみてください。
以上











