O hirunewani blog

RenovateのPR数を削減するパターン

Created at

Renovateが作成するPR数を削減しレビュー負荷を軽減する設定パターンをいくつか紹介する

パッチアップデートの自動化

次は全てのパッケージのpatchアップデートを自動化する例。これに加えて、Renovateが自動マージできるようにするGithub Actionを導入するか、ブランチプロテクションでRenovateがバイパス出来るようにすることで自動マージが可能になる。

{
  "packageRules": [
    {
      "matchUpdateTypes": [ "patch"],
      "automerge": true
    }
  ]
}

これは次と等価。

{
  "extends": [
    ":automergePatch",
  ]
}

信頼できるパッケージアップデートの自動化

次はpackage.jsonのdevDependenciesに記載されたパッケージのminorとpatchアップデートの自動マージを有効化する例。 これはdevDependenciesとdependenciesの運用が健全に行われていることを前提にしている。

{
  "packageRules": [
    {
      "matchUpdateTypes": ["minor", "patch"],
      "matchDepTypes": ["devDependencies"],
      "automerge": true,
    }
  ]
}

テストが十分に行われていることを前提に、全てのアップデートの更新を自動化する運用をしているチームも存在する。

{
  "packageRules": [
    {
      "matchUpdateTypes": ["minor", "patch", "pin", "digest"],
      "automerge": true
    }
  ]
}

MinorとPatchアップデートをまとめる

{
  "extends": [
    "group:allNonMajor"
  ]
}

これは次と等価。

{
  "packageRules": [
    {
      "groupName": "all minor and patch updates",
      "matchPackageNames": ["*"],
      "matchUpdateTypes": ["minor", "patch"]
    }
  ]
}

同時に上げた方が良いパッケージをまとめる

次の例では、ESLint本体とconfigやpluginパッケージがまとめて投げられる。

{
 "packageRules": [
    {
      "groupName": "ESLint packages",
      "matchPackagePatterns": [
        "^eslint",
        "eslint-config-.*",
        "eslint-plugin-.*"
      ]
    }
  ]
}

AWS SDK for Goはv2でパッケージが大量に分割された。次のようにすることでPRをまとめられる。

{
  "packageRules": [
    {
      "groupName": "aws-sdk-go-v2",
      "matchPackageNames":[
        "/^github.com/aws/aws-sdk-go-v2/"
      ]
    }
  ]
}

PRの作成頻度を調整する

日常業務の支障にならない時間帯に作成することで体感量を軽減できる可能性がある。 次は平日の夜間と週末に作成する例。

{
  "timezone": "Asia/Tokyo",
  "timezone": "Asia/Tokyo",
  "schedule": [
    "after 10pm and before 5am on weekdays",
    "every weekend"
  ]
}

一度に作成されるPR数を制限する

次の設定ではRenovateが作成できるPR数が最大2つに制限される。

{
  "prConcurrentLimit": 2
}

この設定を厳しめに掛ける場合、RenovateのPRが放置されることで、オートマージが可能な更新も含む全ての更新が停止するため注意が必要。