🦁

Renovateの基本的な設定方法など

2022/07/10に公開約4,600字

随時更新するかもしれません。

config:base

config:baseはRenovateが用意しているプリセットです。config:js-appconfig:js-libなどもあります。

Renovate Docs: Full Config Presets

各プリセットの詳細は以下から確認できます。

Renovate Docs: Default Presets

https://github.com/renovatebot/presets/blob/dda2282e5a53982daea09489d622eedc174243e2/packages/renovate-config-config/package.json#L16-L36

Dependency Dashboard

Renovate Docs: Dependency Dashboard

設定ファイルに以下の記述をするとDependency Dashboardというissueが立ち使えるようになります。 config:baseをextendsしている場合は自動的に有効になっています。

{
  "extends": [":dependencyDashboard"]
}

or

{
  "dependencyDashboard": true
}

dependency_dashboard

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はfileMatchmatchStringsです。しかし、正規表現の書き方によってさらにfieldが必要になることもあります。(以下の設定は動きません。)

{ 
    "regexManagers": [
    {
      "fileMatch": ["^Dockerfile$"],
      "matchStrings": ["ENV YARN_VERSION=(?<currentValue>.*?)\\n"],
    }
  ]
}

Renovateが依存関係の更新に必要な情報は以下になります。

  • dependency's name
  • which datasource
  • which version scheme
  • currentValue

datasource

Renovate: Datasources

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が余計に付いてしまいます。

extract_version

対象の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

ログインするとコメントできます