RenovateのHandlebarsテンプレート用の`lowercase`ヘルパーを追加した
RenovateとHandlebarsのテンプレート
Renovateでは様々な設定オプションや正規表現を用いるregex managerでHandlebarsのテンプレートを使用できる箇所があります。
例えば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つでした。
stringToPrettyJSONencodeURIComponentreplacecontainsStringandor
replaceを複数回使って個々のライブラリーを列挙するわけにもいかないので、lowercaseヘルパーを追加しようと思い立ちました。まずIssueを立てて方針に問題がないかを確認してから、自分で実装まで行いました。
実装自体はJavaScriptのtoLowerCase()を呼んでヘルパーとして登録するだけで至極簡単ですね。
まとめ
これで packageNameTemplate: "{{{lowercase depName}}}" のようにして、キャプチャしたライブラリー名を小文字に変換してRepologyへの問い合わせに使えるようになりました。めでたしめでたし。
regex managerとrepology datasourceの組み合わせについては、後日また実用例の紹介をする予定です。乞うご期待(自分へのプレッシャー)。