🔄️

Renovate を Mend-hosted から Self-Hosting with GitHub Actions に変更した

2024/02/15に公開

はじめに

今関わっているプロジェクトで、依存パッケージの更新ツールにRenovateを採用しており、元々Renovateが提供しているMend-hosted GitHub Appを使用していたが、GitHub ActionsによるSelf-Hostingに移行した。
理由は、Mend-hosted GitHub Appは30分のタイムアウトが設定[1]されており、その時間内に処理しきることができなかったのと、GoのPrivate Packageの更新がMend-hosted GitHub Appではできなかったから。
Self-Hostingへの移行の際、つまずきポイントがいくつかあり、そこそこの時間を要してしまったため、同じことになる人が1人でも減ればと思い、記事にするにした。

つまずきポイントとその対応

1. branchPrefixとbranchPrefixOldを変更する

今回、Mend-hosted GitHub Appの稼働と並行してSelf-Hostingの動作検証をしていた関係で、移行前のRenovateのPRと動作検証のPRが同時に立つことになった。この時、Renovateは同じ内容のPRが立っている場合、以下の挙動をする性質がある。

  • PRが新しく立てず、既存のPRを更新する
  • もしPRが他のユーザーに更新されていた場合、何もしない

ここで、Mend-hosted GitHub AppとGitHub ActionsによるSelf-Hostingはユーザーが異なるため、後者の何もしないという動きをする。これを防ぎ、新たにPRを立てるためには、branchPrefixbranchPrefixOldを変更すれば良い。これにより、ブランチが異なる為、「同じ内容」と判定されず、新規にPRを立てるようになる。

2. requireConfig: "ignored"を設定する

Renovateの設定項目は、Repository configと、Self-hosted configに分かれる。そして、設定の仕方は、Global configと、repository config fileに分かれる。それぞれの対応は、以下の通り。

Repository config Self-hosted config
Global config 設定可能 設定可能
Repository config file 設定可能 設定不可

Renovateの実行主体が、複数のリポジトリを実行対象とするなら、Global configとRepository config fileに分けることになるが、今回は対象のリポジトリ内でGithub Actionsを回して、そのリポジトリでのみRenovateを実行するので、Global configのみとした。
この場合、Repository config fileは不要となるが、RenovateはデフォルトではRepository config fileが必須となるので、これを無視するために、requireConfigignoredに設定する必要がある。

3. ignorePresetsを設定する

Renovateには設定のpresetが数多く存在するので、これをうまく活用し、個別設定が必要な部分のみを追加で設定する、というのが基本になる。ここで、presetで設定されるものは、追加で設定したものでオーバーライドされるというのが期待される挙動ではないだろうか。
実際、Mend-hosted GitHub Appでは想定通りの挙動だった。が、GitHub ActionsによるSelf-Hostingでは何故かオーバーライドされないという挙動をした。Renovateのバージョンは合わせていたので何故こうなるのかは今でも不明。
しかし解決策は用意されていて、無視したいpresetはignorePresetsを指定すれば良い。

最後に

今回紹介したつまずきポイントは、いずれもDebugログを注意深く読めば解決できる内容だった。しかし、数万行にも及ぶDebugログから必要な情報を探すのはなかなか骨の折れる作業だった。この記事が1人にでも役に立つと嬉しい。

脚注
  1. https://github.com/renovatebot/renovate/discussions/26589 ↩︎

GitHubで編集を提案

Discussion