
Dependabot pull requests for grouped version updates で特定の依存関係をグループから独立したプルリクエストに分離する
こんにちは、製造ビジネステクノロジー部の若槻です。
Dependabot pull requests for grouped version updates(Dependabot プルリクエストのグループ化されたバージョンアップデート) を活用すると、Dependabot が生成するプルリクエストを指定のアップデートタイプ(Semver)や依存関係名のパターンで依存関係をグループ化し、単一のプルリクエストにまとめることができます。これにより Dependabot により自動作成されるプルリクエストの数を減らし、管理の負担や CI のコストを軽減することが可能となります。
今回は、Dependabot pull requests for grouped version updates で特定の依存関係をグループから独立したプルリクエストに分離したいケースがあったので、その方法を確認してみました。
一部の依存関係のアップデートが原因で Dependabot のプルリクエストの CI が失敗する
下記のように npm パッケージの minor および patch バージョンのアップデートをグループ化して、単一のプルリクエストにまとめる Depenabot のグループ化設定を行っていました。
version: 2
updates:
- package-ecosystem: npm
directory: /
schedule:
# MEMO: daily だとアクティブに開発をしていない期間に PR の作成頻度が過剰となるため、weekly を指定している。
interval: weekly
groups:
# MEMO: 多数のプルリクエストを管理せずに済むように、メジャーバージョン以外のパッケージバージョンアップデートを単一の PR にまとめる。
minor-and-patch:
patterns:
- "*"
update-types:
- minor
- patch
上記設定により、minor および patch バージョンのアップデートがグループ化されたプルリクエストと、単一のパッケージのメジャーバージョンアップデートのプルリクエストが作成されています。
前者のプルリクエストでは複数の依存関係のアップデートが含まれています。
しかし、aws-cdk-lib
の minor バージョンアップデートが原因でそのプルリクエストの CI(CDK スナップショットテスト)が失敗してしまいました。
一部の依存関係だけ独立したプルリクエストにする
前述のように CI 失敗の原因となる依存関係のアップデートがある場合、Dependabot のグループ化設定を下記のように変更して、その依存関係だけを独立したプルリクエストにすることができます。
設定としては、グループ化設定の exclude-patterns
で特定の依存関係を除外し、さらにその除外した依存関係を独立したグループとして定義します。
version: 2
updates:
- package-ecosystem: npm
directory: /
schedule:
# MEMO: daily だとアクティブに開発をしていない期間に PR の作成頻度が過剰となるため、weekly を指定している。
interval: weekly
groups:
# MEMO: 多数のプルリクエストを管理せずに済むように、メジャーバージョン以外のパッケージバージョンアップデートを単一の PR にまとめる。
minor-and-patch:
patterns:
- "*"
update-types:
- minor
- patch
exclude-patterns:
# CI エラーの原因となる aws-cdk-lib のバージョンアップデートを一時的にグループから除外する。
- "aws-cdk-lib"
# MEMO: CI エラーの原因となる aws-cdk-lib のバージョンアップデートを一時的に単独の PR として管理する。
temp-aws-cdk-lib:
patterns:
- "aws-cdk-lib"
update-types:
- minor
- patch
Dependabot の設定をリポジトリに反映させるために、上記をデフォルトブランチにコミットします。
すると元々あったすべての依存関係の minor および patch バージョンアップデートをグループ化したプルリクエストはクローズされました。
そして、新しいグループ化されたバージョンアップデートのプルリクエストに加え、aws-cdk-lib
の minor および patch バージョンアップデートを含む独立したプルリクエストが作成されました。
前者のプルリクエストでは、aws-cdk-lib
のアップデートが除外されていることが確認できます。
そして、後者のプルリクエストでは、aws-cdk-lib
のアップデートのみが含まれています。
期待通りの挙動が確認できました。除外したパッケージに起因したエラーが解決できたら、Dependabot の設定を忘れずに元に戻すようにしましょう。
上手くいかなかったパターン
次のように既存のグループ化設定の exclude-patterns
で特定の依存関係を除外するだけの設定を行った場合は、期待通りの挙動になりませんでした。
version: 2
updates:
- package-ecosystem: npm
directory: /
schedule:
# MEMO: daily だとアクティブに開発をしていない期間に PR の作成頻度が過剰となるため、weekly を指定している。
interval: weekly
groups:
# MEMO: 多数のプルリクエストを管理せずに済むように、メジャーバージョン以外のパッケージバージョンアップデートを単一の PR にまとめる。
minor-and-patch:
patterns:
- "*"
update-types:
- minor
- patch
exclude-patterns:
# CI エラーが解決できるまで一時的にグループから除外する
- "aws-cdk-lib"
下記のようにグループ化されたバージョンアップデートのプルリクエストは作成され、aws-cdk-lib
のアップデートはそこから除外されていますが、aws-cdk-lib
のアップデートを含む独立したプルリクエストは作成されませんでした。
よって明示的に除外した依存関係を独立したグループとして定義する必要があるようですね。
おわりに
Dependabot pull requests for grouped version updates で特定の依存関係をグループから独立したプルリクエストに分離する方法を確認しました。
今回の対応により、例えばエラーの原因を調査している間に他の依存関係のアップデートを滞留させたくない場合などに役に立つと思います。
以上