動かざることバグの如し

近づきたいよ 君の理想に

Github Actionsで配列に含まれているかで分岐させる方法

Github Actionsで配列を条件式渡して評価したい

thr3a/docker-build-stationで毎日Dockerイメージをビルドしているが、

if: matrix.target == 'cuda11.8-torch' || matrix.target == 'cuda12.1-torch' || matrix.target == 'alma-7b-server' || matrix.target == 'iopaint'

と条件式が長くなってしまった。短くしたい

失敗例

ChatGPTに聞いたらcontains関数が使えるからこれでリファクタリングしろと。

if: contains(['cuda11.8-torch', 'cuda12.1-torch', 'alma-7b-server', 'iopaint'], matrix.target)

が実行するとエラーになる。嘘つきwwwwwwww

The workflow is not valid. .github/workflows/build-x64.yml (Line: 35, Col: 13): Unexpected symbol: '['. Located at position 10 within expression: contains(['cuda11.8-torch', 'cuda12.1-torch', 'alma-7b-server', 'iopaint'], matrix.target)

成功例

contains + fromJson を使う。

if: contains(fromJson('["cuda11.8-torch", "cuda12.1-torch", "alma-7b-server", "iopaint"]'), matrix.target)
  • fromJson: この関数は文字列をJSONオブジェクトに変換します。ここでは、文字列の配列を表すJSON形式の文字列を配列オブジェクトに変換しています。
  • contains: この関数は、第一引数に指定された配列に、第二引数に指定された値が含まれているかどうかをチェックします。
  • matrix.target: これはmatrix戦略の一部で、異なる環境や設定でジョブを実行するために使用される変数です。

したがって、この条件式はmatrix.targetが"cuda11.8-torch", "cuda12.1-torch", "alma-7b-server", または "iopaint"のいずれかを含んでいる場合に真と評価され、条件に基づいてジョブやステップが実行されます。

参考リンク