Reusable workflow に必要な aqua.yaml を埋め込む方法
Reusable Workflow に必要なツールを aqua で管理している場合、
一番自然なのは Reusable Workflow を使うリポジトリに aqua.yaml をおいてそこで必要なツールを管理するという方式。
しかし、これには幾つか課題がある
- Reusable workflow に dependency が生じてしまう
- aqua.yaml が必要でかつ必要な package をそこに追加しないといけないのが面倒。できれば隠蔽したい
- Reusable Workflow と依存ツールのバージョンの互換性
- Reusable workflow が依存するツールが変わるたびに aqua.yaml も追従しないといけない
- できれば隠蔽したい
- 隠蔽できると reusable workflow を major update しなくても済むようになる
一方で、 Reusable Workflow が依存するツールをローカルでも使いたい場合、隠蔽すると都合が悪い。
その場合は Reusable Workflow を使うリポジトリに aqua.yaml をおいて管理するのが良い。
幾つか方法が考えられる
- Reusable workflow 内でどっかから aqua.yaml を download してくる
- Reusable workflow に無理やり aqua.yaml を埋め込む <= メンテしづらい。 update の自動化に一工夫必要
- composite action で aqua.yaml を管理し、 reusable workflow から composite action を呼び出す <= composite action のバージョンニングについて考える必要がある
- reusable workflow ではなく composite action にしてしまう <= 複数 job をまとめたりできなくなるが、場合によってはあり
composite action で aqua.yaml を管理し、 reusable workflow から composite action を呼び出す
reusable workflow とは別のリポジトリで composite action を管理し、バージョニングする。
更新する際は composite action をリリースしたあと、 reusable workflow 内の composite action を upadte して reusable workflow をリリースする。
態々 composite action ようにリポジトリを作らないといけないのと、リリースの手間が増えるのが難点。
composite action を reusable workflow と同じリポジトリで管理する場合、 composite action のバージョニングをどうするか。 reusable workflow とは別に versioning する場合、適当な prefix をつけてバージョニングするのが考えられるが、手間ではある。
バージョニングを揃える場合、 reusable workflow をリリースする際に reusable workflow 内の composite action のバージョンを更新する必要がある。
また API で tag を生成すると sign するのが難しいので、 tag 生成はローカルやるのが望ましい。
ローカルでリリース用の task を用意するのが良い。
task にバージョンを渡して実行
- reusable workflow 内の composite action のバージョンを更新
- PR を作成, merge <= このとき、 reusable workflow は一時的に動かなくなってしまう
- tag を作成、 push, release の生成