😢

Renovate 溜め込まない

2021/11/04に公開
2

tl:dr

CIで挙動を確認できたら自動的にマージしてくれるコンフィグを作成しました。
とりあえず試してみたい人は利用してみてください!

renovate.json
{
    "extends": ["github>HikaruEgashira/renovate"]
}

はじめに

dependabotやRenovateがよく渋滞を起こします。

渋滞.png

GitHubにはせっかくAutoMerge機能があるので自動化しましょう。といった内容です。

目次

renovate.jsonについて

Renovateはプロジェクトの依存(パッケージ)を管理してくれるBotです。
GitHub上でリアルタイムに依存(パッケージ)の更新を監視してくれます。

https://github.com/renovatebot/renovate

通常では最新のパッケージが公開されるとそのたびにプルリクエスト(PR)を出してくれるようになっているのですが、
それが仇となってあまり管理できていないプロジェクトなどでは渋滞を引き起こします。

渋滞.png

このようなさまざまな自動化設定はrenovate.jsonで設定できるようになっています。

詳細は以下を参考にしてください。
https://docs.renovatebot.com/configuration-options/

今回は 「プルリクエストの頻度の調整」「AutoMergeの自動有効化」 をしていきます。

renovate.jsonの共通化

プロジェクト毎にカスタマイズしてもよいのですが、共通化したほうがスッキリすると思います。
Renovateのプリセット機能を利用することで、簡単に独自のプリセットを公開できます。
記事の最後に自分のプリセットも公開しているので、それも利用してみてください!

https://docs.renovatebot.com/config-presets/

AutoMergeの利用

automergeをtrueに設定することで、GitHubのautomergeが有効になります。

renovate.json
{
  "automerge": true,
}

またパッケージの種類などで細かく設定するときは、入れ子の中にautomergeプロパティを付与するような記述も可能です。

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

完成したもの

自分が設定しているものはこれです。
スケジュール設定やラベル付けなども行っています。

renovate.json
{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "extends": ["config:base", ":timezone(Asia/Tokyo)"],
  "labels": ["dependencies"],
  // 頻度を減らすために週末だけにしている。
  // 頻度上げたい人は`["after 10pm and before 5am every weekday", "every weekend"]`
  "schedule": ["after 10pm and before 5am every weekend"],
  "dependencyDashboard": true,
  "automerge": true,
  "packageRules": [
    // devDependenciesをまとめてPRにする
    // update-lockfile戦略で ^1.27 みたいにしておくと細かなやつも自動的に更新される
    {
      "matchDepTypes": ["devDependencies"],
      "groupName": "devDependencies",
      "rangeStrategy": "update-lockfile"
    },
    // dependenciesのminor, patchをまとめてPRにする
    // pin戦略で全て固定バージョンが表示される
    {
      "matchDepTypes": ["dependencies"],
      "matchUpdateTypes": ["minor", "patch"],
      "groupName": "dependencies (non-major)",
      "rangeStrategy": "pin"
    }
  ]
}

この設定はプリセットとして公開しているので以下ですぐに試すこともできます。
自分はこれをベースにプロジェクトごとにカスタマイズをしたりして利用しています。

https://github.com/HikaruEgashira/renovate

renovate.json
{
    "extends": ["github>HikaruEgashira/renovate"]
}

最後に

auto mergeは便利な反面、CIをうまく作っておかないとえらーが発生する状態をマージしてしまう可能性があります。
このコンフィグを使うにあたって、CIもきちんと整えましょう!!

Discussion

umamichiumamichi

(renovateの仕様が変わった可能性もありますが)
matchUpdateTypes と rangeStrategy は同時指定できないようです。
ご参考までに〜

hikaehikae

umamichiさん。
コメントありがとうございます!執筆時とドキュメントの内容が少し変わっているようです。このあたり少し手を加えて行きます🙏