詩と創作・思索のひろば

ドキドキギュンギュンダイアリーです!!!

mod_perlのDockerイメージをghcr.ioに上げた

趣味で mod_perl の Docker イメージを作っています。

Docker Hub の無料版における autobuild が終了となり、GitHub Packages Container Registry に移行することにした。

https://github.com/motemen/docker-mod_perl/pkgs/container/mod_perl

{perl_version}-{httpd_version}-{mod_perl_version} て感じのタグ付けです。httpd ベースなので OS のバージョンは勝手に上がる(!)

リポジトリでは、Perl のバージョンごとにディレクトリを掘っている。これを Autobuild するにはウェブからポチポチするのが必要で、バージョンを増やすたびに一つひとつ追加するのが面倒だったんだけど、GHCR なら GitHub Actions でいい感じに自動化できるんじゃね、ということで試してみた。

設定画面がこんな感じだったのでまあまあメンテが大変だったわけです。あと削除ボタンが confirm なしに消してくれるもんで一度イチから作り直したこともあった。。

f:id:motemen:20210728211700p:plain
Perlのバージョンをひとつ増やしたら3行増える様子

GitHub Actions で複数の成果物を作る場合は matrix が使えるが、この matrix を動的に生成することで、リポジトリの内容をベースに作るイメージを複数設定できる。具体的には、Dockerfile ファイルがあるディレクトリそれぞれについて、その名前のタグでビルドしたい。

fromJson() を使うと、別のジョブの output から matrix を動的に生成できる。そのために JSON 形式でディレクトリ名を一覧したい。ということで、このようなスクリプトを実行している。

find */Dockerfile -exec sh -c 'basename $(dirname \{})' \; | sort | jq -nRc '{perl_version: [inputs]}'

標準入力の一行一行を JSON の配列にするには jq -nR '[inputs]' (--null-input --raw-input) したらいいらしい。jq ベンリダナー。

あと現在の mod_perl 2.0.11 では最新の Perl 5.34.0 に対してビルドできない……ので最新版をのんびり待っているところ。

はてなで一緒に働きませんか?