CI でパラメタライズドなテストを実行するときに、マトリックスを組むことがあると思います。
GitHub Actions でも strategy.matrix でマトリックスを組めます。
例えば、上記公式ドキュメントのサンプルの
strategy:
matrix:
node: [10, 12, 14]
steps:
# Configures the node version used on GitHub-hosted runners
- uses: actions/setup-node@v2
with:
# The Node.js version to configure
node-version: ${{ matrix.node }}↑こちらは node-version が 10,12,14 のステップがそれぞれ実行されます。合計で 3 回です。
さらに、因子を追加して例えば
strategy:
matrix:
node: [10, 12, 14]
expect: [ "dubnium", "erbium", "fermium" ]
とすると、以下のような組み合わせになります。
| 10 | 12 | 14 | |
|---|---|---|---|
| dubnium | 10,dubnium | 12,dubnium | 14,dubnium |
| erbium | 10,erbium | 12,erbium | 14,erbium |
| fermium | 10,fermium | 12,fermium | 14,fermium |
node と expect の因子の直行になります。合計は 3x3 の 9 回です。
ただ、このような組み合わせではなく、ペアな因子1つを作りたい場合もあります。
上の例では [10, dubnium], [12, erbium], [14, fermium] という組み合わせにしたいです。
その場合は、以下のように include を使って書くとスマートそうです。
strategy:
matrix:
include:
- node: 10
expect: dubnium
- node: 12
expect: erbium
- node: 14
expect: fermium
strategy:
matrix:
node: [10]
expect: ["dubnium"]
include:
- node: 12
expect: erbium
- node: 14
expect: fermium
前者は include のみで記述、後者は matrix に include で組み合わせを追加しています。
この例では前者のほうがきれいに見えますが、一部の組み合わせだけ値が異なる場合は後者の方法で書いたほうがきれい書けける場合もあります。
実例
今まで1つの値に複数の値をもたせたりしてたのですが、とてもきれいに書き直せました。
https://github.com/srz-zumix/ci-yaml/blob/e1e1d6d15bb75f9682bc05304e7ec61162de094b/.github/workflows/search.yml
こちらはサンプルの後者と同じ方法で、 path が "" の場合は matrix で、空白以外の場合は include で組み合わせを追加しています。
今回は以上です。では。


0 件のコメント:
コメントを投稿