dependabot の更新グループ化(Grouped version updates)機能がパブリックベータになりました。
AWS SDK for Go v2の更新設定をしてみたのでメモ。
設定内容
グループ化したい依存をgroups
に設定します。
AWS SDK for Go v2関連のバージョンアップを、aws-sdk
という名前でプルリクエストを出すよう設定しました。
updates:
- package-ecosystem: gomod
directory: "/"
schedule:
interval: daily
groups:
# AWS SDK for Go v2 関連のバージョンアップをまとめる
aws-sdk:
patterns:
- github.com/aws/aws-sdk-go-v2 # `*` が空文字にマッチするのかよく分からなかったので・・・
- github.com/aws/aws-sdk-go-v2/*
AWS SDK for Go v2 アップデートの困りごと
AWS ではたくさんのサービスが公開されているので、毎日のようにサービスのアップデートが入り、 それに合わせて AWS SDK の更新が入ります。 dependabot のような自動アップデートの仕組みを入れておくと、本当に毎日のようにプルリクエストが来るのでとても大変です。 しかし、実際使う AWS のサービスなんて、全体に比べればほんの一部です。 ほとんどが自分の使っているサービスとは無関係な更新で、dependabot が送ってくるプルリクエストのほとんどはムダなものです。
AWS SDK for Go は v2 からマルチモジュール構成になり、サービス毎に go.mod
が設定されるようになりました。
これにより、依存しているサービスを go.mod
に明記できるので、
実際に依存しているサービスをもとに AWS SDK のアップデートを行えるようになりました。
問題はサービス間にも依存関係があり、毎回複数のモジュールを更新するハメになること! たとえば「feature/s3/manager を使って S3 にファイルをアップロードしたい」といった機能を実装する場合、 以下のモジュールが必要です。
- github.com/aws/aws-sdk-go-v2/feature/s3/manager
- github.com/aws/aws-sdk-go-v2/service/s3
- github.com/aws/aws-sdk-go-v2/config
- github.com/aws/aws-sdk-go-v2
dependabot は各モジュール 1 つずつプルリクエストを作るので、最大で 4 つのプルリクエストが押し寄せてきます。 しかも一個マージすると、十中八九他のプルリクエストとコンフリクト →dependabot の rebase を待つ → テストが通るのを待つ、というフローが発生します。 まあ自分はただ待ってるだけなんですが・・・rebase 前のテストの結果は結局捨てるので、CI の時間もったいないですよね。
そういうわけで、AWS SDK for Go v2 関連のプルリクエストが 1 つにまとまってくれると、見るべきプルリクエストの個数が減ってうれしいわけです。
まとめ
AWS SDK for Go v2関連のバージョンアップを、aws-sdk
という名前でプルリクエストを出すよう設定しました。
まだアップデート来てないので本当に動くのかよくわかってないですが・・・動くといいな。
グループ化機能、renovate では昔からある機能なので、さっさと移行しておけばよかった説はある。 でも設定ファイル書くの大変そうだな・・・(ref. はてなで使用している Renovate の設定プリセットを公開しました)と食わず嫌いをしている状態。 結局 dependabot でも設定ファイルの調整は必要で、どうしようか、と迷っている感じです。