結論
たとえば、こんなci.yml
だったとき、実行されるジョブはmatrix
下のそれぞれのリストの直積となります。つまり、(ubuntu-latest, 3.7)
, (ubuntu-latest, 3.8)
, (ubuntu-latest, 3.9)
, (macos-latest, 3.8)
…
1 | jobs: |
この場合だと2*3=6
個のジョブが走るため、無料枠の2000分を使い切ってしまいそうです。実際にはCIで動作確認する組み合わせはもっと少なくしたいので、jobs.<job_id>.strategy.matrix.include
やjobs.<job_id>.strategy.matrix.exclude
を使って必要なケースだけにすることもできます(次の例は特に意味はありません)。しかし、exclude
が多くなるにつれて行数が多くなり、しかもexclude
は直感的ではないので設定しづらいです。ましてやmatrix
下のリストの数が増えたりしたら非常に面倒です。
1 | jobs: |
そこで次のように解決することができます。jobs.<job_id>.matrix.<var>
のリストの要素にはオブジェクトも入れることができるので次のようにすることが可能です(config
は任意の名前です)。あくまでもmatrix
の下のリストの直積なので、この場合はリストが一つ、つまりその直積は「このリストの各要素を唯一の要素とするタプル」の集合です。
1 | jobs: |
こっちのほうが明らかにわかりやすいですね。使うときには$
のようにします。
参考
- [Supported software - Specifications for GitHub-hosted runners] https://docs.github.com/en/free-pro-team@latest/actions/reference/specifications-for-github-hosted-runners#supported-software
- [GitHub Actionsのワークフロー構文] https://docs.github.com/ja/free-pro-team@latest/actions/reference/workflow-syntax-for-github-actions