Renovate 自動マージ・承認 メモ

Tech

実現したいこと

self-hosted renovateで依存更新PRを出したい
PRは手動承認を挟みたい
PRはCIテストを必須としたい

キー種別による挙動

  • PAT
    動作: PATに紐づくgithubアカウントでPRを作成することとなる
    問題: 同一githubアカウントで手動承認はできないので、手動承認の要件を満たせない
    解決方法: renovatebot用にgithubアカウントをもう1つ作成するか、後述のGitHub-Appを利用する *メモ: Renovateの手動承認不要だけど、ブランチ保護は残したい場合のやり方

    • 組織配下のリポジトリでのみ利用できる設定のAllow bypassing required pull requestsで管理者ロールは、PRの承認をbypassする。
    • on.workflow_run.completedでCI終了トリガーで、承認ボットrenovate-approve-botを走らせて即時承認する。
      cronトリガーでもできるがタイミングの安定性に欠けるのでNG
  • GitHub App
    動作: GitHub-AppがPRを作成することとなるため、自分のgithubアカウントでそれを承認できる

GitHub App の種類

自動マージ設定

  • Renovate側 (automerge: true)
    Renovate cloudの場合は、直感通りに動くはずだが
    Self-hosted Renovateの場合は、CIなしの場合は即時マージされるが、CIアリの場合はRenovate側でマージはできず、GitHub側のauto-mergeに依存
  • GitHub 側 (Allow auto-merge)
    動作: 後述のブランチ保護設定を正しくすることで、GitHub側でCI確認後にマージされる

ブランチ保護・ステータスチェック

  • Require status checks
    true: CIが通らないとマージ不可(GitHub auto-merge使用時は必須)
    false: CIに関係なくマージ可能(安全性低下)
  • Require pull request before merging
    true: 承認必須でPR経由でのマージ(ブランチ保護と合わせて安全性確保)
    false: 直接push可能(承認設定不可)

最終構成

  • Renovate 実行環境

    • Self-hosted Renovate を GitHub Actions 上で実行
    • 使用する認証は自作GitHub-Appの鍵とApp-ID
  • GitHub 設定

    • Require status checks = true(CI 必須)
    • Require pull request before merging = true(承認必須)
    • GitHub auto-merge を有効にして、CI 通過後にマージ
  • PR 承認フロー

    • PR 作成者は GitHub App(botアカウント)
    • 自分の個人アカウントで手動承認可能
    • CIと承認が通ったら GitHub auto-merge によりマージ