Open6

Renovateってなぁに

takamin55takamin55

Renovate概要

https://docs.renovatebot.com/

対象のリポジトリ内で依存関係を検出し、新しいバージョンがないかを確認してくれるツール。PRを生成してくれたり、なんなら自動マージまで行うことも可能。

要は以下の問題を解決してくれる。

  • ライブラリのバージョンが固定され、古くなりがちだ
    • セキュリティ事故のリスクあり
    • パフォーマンスが低いまま
    • バグがあるまま
  • ライブラリのバージョンを定期的に確認するのはつらい
  • とはいえライブラリをlatestで運用するわけにはいかない

Renovateが使えるプラットフォーム

  • Github
  • GitLab
  • Bitbucket
  • Azure DevOps
  • AWS CodeCommit
    • まじか。
  • Gitea
    • 名前しか知らねぇ。

競合ツール

  • dependabot
  • snyk
takamin55takamin55

どんな感じで更新する?

  1. リポジトリをスキャンし、パッケージファイル(package.jsonとかgo.modとか)を見つけ出す
  2. 書かれた依存関係で新しいバージョンがあるかをチェックする
  3. あったらPRを上げる

あら便利。

※もしlockfileがあったらどうする?

lockfileについての簡単なスクラップ
https://zenn.dev/takamin55/scraps/6ba608bfcb72bb

例えばnpmの場合、package.jsonをもとにpackage-lock.jsonが生まれ流ので、どちらか片方だけ変更するというのはおかしな話になる。

なので、Renovateは頑張る。

  1. package.jsonを変更する
  2. npm installを走らせて、package-lock.jsonを更新する
  3. 両方ともPRに含める

※npmの話になったが、他のパッケージマネージャーでも同じことが起こっているのだろう。

IaCのバージョン情報更新

TerraformやDocker、KubernetesといったIaCファイルも見てくれる。

例えば、Dockerfileのタグのバージョンが古ければ新しいやつでPRを上げてくれる。

takamin55takamin55

じゃあ使ってみよう

というわけで、早速設定してみる。

最近、趣味で楽しくVueを書いてみているので、そこに入れてみる。

Renovateのインストール

  1. GitHub Appからインストール
    https://github.com/apps/renovate

GitHub Appからインストールする。
GitHub Appって何者なんだろうね。なんとなくわかるしなんとなく使っているけど。

GitHub Appとは

あとでかく

  1. リポジトリで有効化する
    Renovate曰く、全てのリポジトリで有効化したらいいよとのことだが、
    なんか怖いしお試しなので、とりあえず1リポジトリだけで有効化する。

  2. PRをマージする
    有効化したリポジトリで、以下のようなPRが生成される。
    中身を確認後にマージする。


最初に作成されるPRの中身はこんな感じ。

  • Renovateが発見したパッケージファイルはこれです
    • circleci/config.yml.github/workflows/deploy-s3.yamlpackage.jsonを見つけた模様。
    • ※余談だが、CircleCIからGitHub Actionsに移行しようとしていたのでCI系ファイルが2ついる。
  • 今の状況だったらこの辺のパッケージのバージョン更新PRを作るつもりです
  • renovate.json作ったので、設定したければこのファイルをいじってね


マージした。
すると予告通りにPRが作られていき始めた。すごい。

なお、デフォルト設定では2PR / hらしい。

PRいっぱい作られると嫌でしょ、CIリソースも限られているし(PR駆動で動いちゃうから。)、プロジェクトの進行を圧迫しないように気を使っているよ、とのこと。優しいね。

takamin55takamin55

じゃあコンフィグいじってみる

せっかくなので設定を少し変えてみよう。

https://docs.renovatebot.com/configuration-options/

Renovateのスケジュールを設定

https://docs.renovatebot.com/configuration-options/#schedule

Renovateが走る時間を設定できます。
個人プロジェクトですし、そんなにパッケージの最新化に努めるつもりもないので、週末にくらいに走ればよしとしましょうか。

こんな感じですかね?

"schedule": [ "every weekend" ]

PR単位を設定

https://docs.renovatebot.com/configuration-options/#groupname

デフォルトだとパッケージごとにPRを作成するようです。
どうせ小規模なアプリですし、面倒なので全部まとめてしまいましょう。

"groupName": "All"

PR作成制限

https://docs.renovatebot.com/configuration-options/#prhourlylimit
デフォルトだと1時間あたり2個までしか作成しないのですが、別に何個作ってくれても構わないので設定しましょう。

"prHourlyLimit": 0
takamin55takamin55

どうやって手動実行する?

きちんと動くかを確かめたいのだが、、どうやって手動実行するのだろうか。

なんか調べた感じ記事が出てこない。
定期実行以外に手段はないのか。

takamin55takamin55

RenovateのGitHub App以外の選択肢について

Self-Hostingの仕組みがある。

https://github.com/renovatebot/renovate/blob/main/docs/usage/getting-started/running.md#self-hosting-renovate

  1. cliツールをインストールする方法
  2. 公式が用意したDockerイメージを使う方法

そのあたりのREADMEを詳しく読んでみる。

https://github.com/renovatebot/renovate/blob/main/docs/usage/getting-started/running.md#self-hosting-renovate

Self-Hosting Renovateを使うには以下の責任が伴う

  • Renovateが走るインフラを用意する
  • Renovateのグローバルコンフィグを用意する
  • 定期的にRenovateが走るようにする
  • Renovate自体の更新の面倒をみる

Renovateのディストリビューション

  1. npm package (cli)
  2. Docker Image
  3. GitHub Action
  4. Mend Renovate On-Premises

立ててみるぞ

1. npm package

https://www.npmjs.com/package/renovate

npm init
npm i renovate

ですぐにインストールできる。

renovateを使うにはconfigが必要なので用意する。
https://docs.renovatebot.com/examples/self-hosting/#usage

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リポジトリに対してやってみる。

別のエラーが出た。。。