537文字
3分
編集

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

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

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

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

これは次と等価。

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

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

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

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

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

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

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

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

これは次と等価。

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

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

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

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

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

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

#PR の作成頻度を調整する

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

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

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

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

json
{
  "prConcurrentLimit": 2
}

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

編集