Renovate 溜め込まない
tl:dr
CIで挙動を確認できたら自動的にマージしてくれるコンフィグを作成しました。
とりあえず試してみたい人は利用してみてください!
{
"extends": ["github>HikaruEgashira/renovate"]
}
はじめに
dependabotやRenovateがよく渋滞を起こします。
GitHubにはせっかくAutoMerge機能があるので自動化しましょう。といった内容です。
目次
renovate.jsonについて
Renovateはプロジェクトの依存(パッケージ)を管理してくれるBotです。
GitHub上でリアルタイムに依存(パッケージ)の更新を監視してくれます。
通常では最新のパッケージが公開されるとそのたびにプルリクエスト(PR)を出してくれるようになっているのですが、
それが仇となってあまり管理できていないプロジェクトなどでは渋滞を引き起こします。
このようなさまざまな自動化設定はrenovate.json
で設定できるようになっています。
詳細は以下を参考にしてください。
今回は 「プルリクエストの頻度の調整」 と 「AutoMergeの自動有効化」 をしていきます。
renovate.jsonの共通化
プロジェクト毎にカスタマイズしてもよいのですが、共通化したほうがスッキリすると思います。
Renovateのプリセット機能を利用することで、簡単に独自のプリセットを公開できます。
記事の最後に自分のプリセットも公開しているので、それも利用してみてください!
AutoMergeの利用
automergeをtrueに設定することで、GitHubのautomergeが有効になります。
{
"automerge": true,
}
またパッケージの種類などで細かく設定するときは、入れ子の中にautomerge
プロパティを付与するような記述も可能です。
{
"packageRules": [
{
"matchUpdateTypes": ["minor", "patch", "pin", "digest"],
"automerge": true
}
]
}
完成したもの
自分が設定しているものはこれです。
スケジュール設定やラベル付けなども行っています。
{
"$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"
}
]
}
この設定はプリセットとして公開しているので以下ですぐに試すこともできます。
自分はこれをベースにプロジェクトごとにカスタマイズをしたりして利用しています。
{
"extends": ["github>HikaruEgashira/renovate"]
}
最後に
auto mergeは便利な反面、CIをうまく作っておかないとえらーが発生する状態をマージしてしまう可能性があります。
このコンフィグを使うにあたって、CIもきちんと整えましょう!!
Discussion
(renovateの仕様が変わった可能性もありますが)
matchUpdateTypes と rangeStrategy は同時指定できないようです。
ご参考までに〜
umamichiさん。
コメントありがとうございます!執筆時とドキュメントの内容が少し変わっているようです。このあたり少し手を加えて行きます🙏