Blogaomu

WEBアプリケーション開発とその周辺のメモをゆるふわに書いていきます。

Renovateの自動マージを試す

この記事はZOZO Advent Calendar 2023 シリーズ6の6日目の記事です。

以前ZOZOのテックブログでこちらの記事を書きました。

techblog.zozo.com

今回はその後の話の一つとしてRenovateの自動マージを試してみたことについて書いていきます。

Renovateをチームが管理する複数のリポジトリに導入したものの、バージョン更新のプルリクエストの滞留が次第に増えていき課題に感じていました。そこで、自動マージを導入することでプルリクエストの滞留を解消したいと考えました。

自動マージの対象

私が所属するチームではInfrastructure as Code(IaC)、サービス運用に利用するちょっとしたツール、 ビルドパイプラインの設定ファイルなどを管理しており、少なからずこれらが依存するパッケージ(プログラミング言語におけるライブラリやKubernetesにおけるExternal Secrets Operatorのようなコンポーネントなど)が存在します。これらのパッケージで自動的にマージできそうなものはどんな条件を満たしているかを考え、以下に焦点を当てました。

  • ユニットテストなどを実施する自動的なチェック機構があること
  • パッチバージョンの更新であること

お試しのシチュエーションとして、Goで作成しているツールで依存する github.com/aws/aws-sdk-go-v2 のパッチバージョンに更新がある場合に自動マージするように設定しました。

設定

Renovateの自動マージについてドキュメントがありますので、まずはここを見ておくと良さげです。

docs.renovatebot.com

今回設定するものは主に以下の2つです。

まず、Renovateの設定ファイルを見ていきます。今回関連する箇所を抜き出したのが以下です。

{
  "packageRules": [
    {
      "matchPackageNames": ["github.com/aws/aws-sdk-go-v2"],
      "matchUpdateTypes": ["patch"],
      "automerge": true
    }
  ]
}

特定の条件下で自動マージを行うため packageRules の要素に条件および設定項目を追加します。matchPackageNames には対象のパッケージ github.com/aws/aws-sdk-go-v2 を指定し、matchUpdateTypesには patch を指定します。autoMergeはデフォルトでfalseなので明示的に true を指定します。これらにより「パッケージがgithub.com/aws/aws-sdk-go-v2かつパッチバージョンの更新の場合、自動マージを行う」というルールが適用されます。

次にGitHubリポジトリの自動マージ設定を有効にします。RenovateはデフォルトではGitHubやGitLabなどのプラットフォームの自動マージ機構を利用するため、リポジトリの設定を行う必要があります。設定方法は以下のリンク先を参照してください。

docs.github.com

また、リポジトリにおいてはテストが成功していることやn人以上のapprovalなどがプルリクエストのマージ可能条件になっていることがあるかと思います。n人以上のapprovalについて考えると、自動マージする場合はユーザーのapprovalは介在しないためマージ条件を満たせなくなってしまいます。この状況を回避するため、renovateユーザーが作成するプルリクエストのみ、approvalの条件をスキップして(ただしステータスチェックは満たす必要がある)マージするできるよう設定します。リポジトリのブランチプロテクションルールから設定します。

github.blog

設定後

この設定後に作られたRenovateのプルリクエストで自動マージされました。以下のキャプチャではプルリクエスト作成後、Renovateがプルリクエストに対して自動マージを有効化し、その後GitHub Actionが成功したため自動的にマージされたことが時系列で分かります。

おわりに

これまではパッチバージョンの更新でも人のapprovalが必要になっていて労力を要していましたが自動マージで楽になりそうです。また、設定がそれほど難しくないのもありがたいところです。今後は、使いどころを見極めつつ適用範囲を広げていきたいです。