Renovateってなぁに

Renovate概要
対象のリポジトリ内で依存関係を検出し、新しいバージョンがないかを確認してくれるツール。PRを生成してくれたり、なんなら自動マージまで行うことも可能。
要は以下の問題を解決してくれる。
- ライブラリのバージョンが固定され、古くなりがちだ
- セキュリティ事故のリスクあり
- パフォーマンスが低いまま
- バグがあるまま
- ライブラリのバージョンを定期的に確認するのはつらい
- とはいえライブラリを
latest
で運用するわけにはいかない
Renovateが使えるプラットフォーム
- Github
- GitLab
- Bitbucket
- Azure DevOps
- AWS CodeCommit
- まじか。
- Gitea
- 名前しか知らねぇ。
競合ツール
- dependabot
- snyk

どんな感じで更新する?
- リポジトリをスキャンし、パッケージファイル(
package.json
とかgo.mod
とか)を見つけ出す - 書かれた依存関係で新しいバージョンがあるかをチェックする
- あったらPRを上げる
あら便利。
lockfile
があったらどうする?
※もしlockfileについての簡単なスクラップ
例えばnpmの場合、package.json
をもとにpackage-lock.json
が生まれ流ので、どちらか片方だけ変更するというのはおかしな話になる。
なので、Renovateは頑張る。
-
package.json
を変更する -
npm install
を走らせて、package-lock.json
を更新する - 両方ともPRに含める
※npmの話になったが、他のパッケージマネージャーでも同じことが起こっているのだろう。
IaCのバージョン情報更新
TerraformやDocker、KubernetesといったIaCファイルも見てくれる。
例えば、Dockerfile
のタグのバージョンが古ければ新しいやつでPRを上げてくれる。

じゃあ使ってみよう
というわけで、早速設定してみる。
最近、趣味で楽しくVueを書いてみているので、そこに入れてみる。
Renovateのインストール
- GitHub Appからインストール
https://github.com/apps/renovate
GitHub Appからインストールする。
GitHub Appって何者なんだろうね。なんとなくわかるしなんとなく使っているけど。
GitHub Appとは
あとでかく
-
リポジトリで有効化する
Renovate曰く、全てのリポジトリで有効化したらいいよとのことだが、
なんか怖いしお試しなので、とりあえず1リポジトリだけで有効化する。 -
PRをマージする
有効化したリポジトリで、以下のようなPRが生成される。
中身を確認後にマージする。
最初に作成されるPRの中身はこんな感じ。
- Renovateが発見したパッケージファイルはこれです
-
circleci/config.yml
と.github/workflows/deploy-s3.yaml
とpackage.json
を見つけた模様。 - ※余談だが、
CircleCI
からGitHub Actions
に移行しようとしていたのでCI系ファイルが2ついる。
-
- 今の状況だったらこの辺のパッケージのバージョン更新PRを作るつもりです
-
renovate.json
作ったので、設定したければこのファイルをいじってね
マージした。
すると予告通りにPRが作られていき始めた。すごい。
なお、デフォルト設定では2PR / h
らしい。
PRいっぱい作られると嫌でしょ、CIリソースも限られているし(PR駆動で動いちゃうから。)、プロジェクトの進行を圧迫しないように気を使っているよ、とのこと。優しいね。

じゃあコンフィグいじってみる
せっかくなので設定を少し変えてみよう。
Renovateのスケジュールを設定
Renovateが走る時間を設定できます。
個人プロジェクトですし、そんなにパッケージの最新化に努めるつもりもないので、週末にくらいに走ればよしとしましょうか。
こんな感じですかね?
"schedule": [ "every weekend" ]
PR単位を設定
デフォルトだとパッケージごとにPRを作成するようです。
どうせ小規模なアプリですし、面倒なので全部まとめてしまいましょう。
"groupName": "All"
PR作成制限
デフォルトだと1時間あたり2個までしか作成しないのですが、別に何個作ってくれても構わないので設定しましょう。
"prHourlyLimit": 0

どうやって手動実行する?
きちんと動くかを確かめたいのだが、、どうやって手動実行するのだろうか。
なんか調べた感じ記事が出てこない。
定期実行以外に手段はないのか。

RenovateのGitHub App以外の選択肢について
Self-Hostingの仕組みがある。
- cliツールをインストールする方法
- 公式が用意したDockerイメージを使う方法
そのあたりのREADMEを詳しく読んでみる。
Self-Hosting Renovateを使うには以下の責任が伴う
- Renovateが走るインフラを用意する
- Renovateのグローバルコンフィグを用意する
- 定期的にRenovateが走るようにする
- Renovate自体の更新の面倒をみる
Renovateのディストリビューション
- npm package (cli)
- Docker Image
- GitHub Action
- Mend Renovate On-Premises
立ててみるぞ
1. npm package
npm init
npm i renovate
ですぐにインストールできる。
renovateを使うにはconfig
が必要なので用意する。
vim config.js
中身は上記ドキュメント。
tokenが必要なので、GitHubでPAT(fine-graded)を発行した。
実行
npm run renovate --token $PAT
エラー
"msg": "Fine-grained Personal Access Tokens do not support the GitHub GraphQL API and cannot be used with Renovate.
Fine-Grainedじゃなければいいのか?
classic-tokenでやってみたらエラーが出たが、private-repositoryへのアクセスができなくて出ていたので、とりあえずpublicリポジトリに対してやってみる。
別のエラーが出た。。。