RenovateでGitHub Actionsで使っているHugoを更新する
GitHub ActionsとHugoを使用して静的サイト生成を行う場合、peaceiris/actions-hugo を使用するか、自分で適当にHugoをインストールするかのいずれかが一般的だと思います。このブログでは、セットアップ当初はpeaceiris/actions-hugoを使っていたのですが、最近debパッケージを自分でインストールする方式に切り替えました。 gohugoio/hugoのreleases から直接debパッケージを持ってきているので、peaceiris/actions-hugoとは違いlatest指定をする事ができず、Hugoの更新を手動で行う必要があり、ちょっと面倒だな〜と感じていました(しかもHugoは結構開発が活発で、更新もはやいんですよね)。 仕事のリポジトリでは最近renovateがどんどん導入されているので、これを機にrenovateを導入することにしました。 HugoのバージョンはGitHub ActionsのWorkflowファイル内にenvで指定されていて 、もちろん標準状態のrenovateはこれを検知・更新してくれません。これに対応するには、regexManagers を使用します。 regexManagersは正規表現でバージョン番号を引っかけて更新してくれるmanager で、fileMatchとmatchStringsという二つの正規表現を書くことで使う事ができます。 fileMatchはその名の通り、どのファイルを監視するかを指定する正規表現で、今回はGitHub Actionsの設定ファイルを監視して欲しいので、デフォルトのgithub-actions managerが監視する正規表現をそのままコピーしてきて使用しました。 1 2 3 4 "fileMatch": [ "^(workflow-templates|\.github\/workflows)\/[^/]+\.ya?ml$", "(^|\/)action\.ya?ml$" ] matchStringsはバージョンを引っかけるための正規表現で、datasource、depName、currentValueの三つの値をキャプチャするか、datasourceTemplate、depNameTemplate、currentValueTemplateで値を指定する必要があります。datasource(datasourceTemplate)とdepName(depNameTemplate)はバージョンを比較するためのデータソースと依存の名称で、今回はGitHub上にあるgohugoio/hugoリポジトリのリリースと比較をしたいため、datasourceTemplateにgithub-releasesを、depNameTemplateにgohugoio/hugoを指定しました。currentValue(currentValueTemplate)は現在のバージョン番号を表す値で、これはGitHub Actionsの設定ファイルに書かれている値なので、matchStringsで引っかけてキャプチャします。 1 2 3 4 5 "matchStrings": [ "HUGO_VERSION: (?<currentValue>.*)" ], "datasourceTemplate": "github-releases", "depNameTemplate": "gohugoio/hugo" 設定ファイル全体としては次の様になります: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 { "$schema": "https://docs.renovatebot.com/renovate-schema.json", "extends": [ "config:base" ], "regexManagers": [ { "fileMatch": [ "^(workflow-templates|\.github\/workflows)\/[^/]+\.ya?ml$", "(^|\/)action\.ya?ml$" ], "matchStrings": [ "HUGO_VERSION: (?<currentValue>.*)" ], "datasourceTemplate": "github-releases", "depNameTemplate": "gohugoio/hugo" } ] } これで無事renovateがHugoのバージョンをチェックしてくれる 様になりました。めでたしめでたし。 ...