RenovateのHandlebarsテンプレート用の`lowercase`ヘルパーを追加した

RenovateとHandlebarsのテンプレート

Renovateでは様々な設定オプション正規表現を用いるregex managerHandlebarsのテンプレートを使用できる箇所があります。

例えばPRのdescriptionの内容を追加できるprBodyNotesなどがありますが、RenovateがPRを作る際のブランチ名を決めるbranchNameもデフォルト値は次のようなテンプレートになっています。

"{{{branchPrefix}}}{{{additionalBranchPrefix}}}{{{branchTopic}}}"

次のリンクはテンプレート中で使えるフィールド(変数)のドキュメントです。

repology datasourceと大文字小文字

さて、最近regex managerと組み合わせてrepology datasourceを使いたいことがありました。repology datasourceの中で使われているRepologyのSingle project API*1 https://repology.org/api/v1/project/$project の問い合わせでは、プロジェクト名が全て小文字である必要があります。

https://repology.org/api/v1/project/firefox なら結果が得られますが、https://repology.org/api/v1/project/Firefox だと結果は空になってしまいます。

正規表現で何かしらのファイルからキャプチャできるライブラリーの名称に大文字が含まれていると、そのままではrepology datasourceで問い合わせることができません。またRenovateが組み込みで提供するHandlebarsのヘルパー(テンプレート内で使える関数のようなもの)は当時、次の6つでした。

  • stringToPrettyJSON
  • encodeURIComponent
  • replace
  • containsString
  • and
  • or

replaceを複数回使って個々のライブラリーを列挙するわけにもいかないので、lowercaseヘルパーを追加しようと思い立ちました。まずIssueを立てて方針に問題がないかを確認してから、自分で実装まで行いました。

実装自体はJavaScripttoLowerCase()を呼んでヘルパーとして登録するだけで至極簡単ですね。

まとめ

これで packageNameTemplate: "{{{lowercase depName}}}" のようにして、キャプチャしたライブラリー名を小文字に変換してRepologyへの問い合わせに使えるようになりました。めでたしめでたし。

regex managerとrepology datasourceの組み合わせについては、後日また実用例の紹介をする予定です。乞うご期待(自分へのプレッシャー)。