Renovateの基本的な設定方法など
随時更新するかもしれません。
- 2023/08/09 更新
renovateのプリセット
renovateが用意してくれているプリセットがあるので、最初はそれをベースに設定するとよいと思います。config:best-practices
やconfig:recommended
あたりを使っておけばよさそうです。
各プリセットの詳細はRenovate Docs: Default Presetsから確認できます。コードベースで確認したい場合はrenovateのリポジトリにあります。
古いプリセット
config:base
はRenovateが用意しているプリセットです。config:js-app
やconfig:js-lib
などもあります。
Renovate Docs: Full Config Presets
各プリセットの詳細は以下から確認できます。
Renovate Docs: Default Presets
Dependency Dashboard
Renovate Docs: Dependency Dashboard
設定ファイルに以下の記述をするとDependency Dashboardというissueが立ち使えるようになります。
{
"extends": [":dependencyDashboard"]
}
or
{
"dependencyDashboard": true
}
Managers
managersという概念があります。managersを使うことによって依存関係を検出できます。
npmやcomposer,cargoなどのよく使われるmanagersはRenovate側で設定してくれています。ほとんどのmanagersはデフォルトで有効になっているためRenovateをセットアップするだけで依存関係の検出が開始されます。
managersが用意されていない場合はregex managerを使うことで柔軟に設定できます。
regex
Custom Manager Support using Regex
正規表現にマッチさせることで依存関係を検出します。正規表現の名前付きキャプチャという機能を使うので知っているとスムーズです。
regexの確認は https://regex101.com/ のようなサイトを利用すると便利です。
regexMangersに必須のfieldはfileMatch
とmatchStrings
です。しかし、正規表現の書き方によってさらにfieldが必要になることもあります。(以下の設定は動きません。)
{
"regexManagers": [
{
"fileMatch": ["^Dockerfile$"],
"matchStrings": ["ENV YARN_VERSION=(?<currentValue>.*?)\\n"],
}
]
}
Renovateが依存関係の更新に必要な情報は以下になります。
- dependency's name
- which datasource
- which version scheme
- currentValue
datasource
datasourceはどこから依存関係などの情報を検索するかを指定します。
たとえば、npmを指定すればnpmからで、packagistを指定するとpackagistから検索をします。
dependency's name
datasourceからどのような名前(パッケージ名)で検索するかを指定します。
たとえばzennのcliを更新対象にしたい場合は、datasourceをnpmとして、dependency's nameをzenn-cliとします。
version scheme
Renovate: supported-versioning
どのような形式でバージョンを指定するかの設定です。デフォルトはsemverです。
currentValue
現在指定しているバージョンです。
ENV DOCKER_VERSION=19.03.1
現在のバージョンの19.03.1
を更新する必要があるかどうかを判定します。
以上をRenovateが解釈できるように設定するのですが、正規表現で抜き出すパターンとテンプレートでfieldとして指定するやり方があります。
matchStringsで抜き出す場合
以下を名前付きキャプチャで抜き出します。(versioningはデフォルトでsemverなので必須ではない。)
- depName
- datasource
- versioning
- currentValue
{
"regexManagers": [
{
"fileMatch": ["^Dockerfile$"],
"matchStrings": [
"datasource=(?<datasource>.*?) depName=(?<depName>.*?)( versioning=(?<versioning>.*?))?\\sENV .*?_VERSION=(?<currentValue>.*)\\s"
]
}
]
}
この設定は以下のようなテキストにマッチします。
# renovate: datasource=docker depName=docker versioning=docker
ENV DOCKER_VERSION=19.03.1
テンプレートで指定する場合
以下のfieldを指定します。
(currentValueは正規表現のみです。)
(versioningはデフォルトでsemverなので必須ではない。)
- depNameTemplate
- datasourceTemplate
- versioningTemplate
{
"regexManagers": [
{
"fileMatch": ["^Dockerfile$"],
"matchStrings": ["zenn-cli@(?<currentValue>.*)"],
"depNameTemplate": "zenn-cli",
"datasourceTemplate": "npm"
}
]
}
matchStringsでdepNameだけ抜き出して、datasourceはテンプレートで指定などの設定も可能です。
depNameとpackageNameの違い
depNameを使ってdatasourceから検索すると書きましたが正確には異なります。
本来はpackageNameを使うのですが、packageNameを指定していない場合はdepNameがpackageNameとして使われます。depNameはPRのタイトルなどに使われるのでパッケージ名が長い場合などに指定するのがよさそうです。
extractVersionTemplate
{
"fileMatch": [
"^initialize$"
],
"matchStrings": [
"PYTHON_VERSION=\"(?<currentValue>.*)\""
],
"depNameTemplate": "python/cpython",
"datasourceTemplate": "github-tags"
}
以上のように設定をすると画像のようにv
が余計に付いてしまいます。
対象のGithubのtagsを見てもらえればわかるのですがプリフィックスにv
が付いています。v
はいらないのでextractVersionTemplateで抜き出します。
{
"fileMatch": [
"^initialize$"
],
"matchStrings": [
"PYTHON_VERSION=\"(?<currentValue>.*)\""
],
"depNameTemplate": "python/cpython",
"datasourceTemplate": "github-tags",
"extractVersionTemplate": "^v(?<version>.*)$"
}
補完
以下を設定ファイルに追記すると補完がある程度効くようになります。(VSCodeだけ?)
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json"
}
Discussion