notebook

都内でWEB系エンジニアやってます。

GitHubActionsでmatrixの値を動的に扱う

実際使うかと言うとどうなんだろうという気もするが、できるの知らなかったので残しておく

いきなりサンプルコードだがこれだけで理解はできると思う

  • .github/workflows/dynamic-matrix.yml
name: dynamic matrix

on: [push]

jobs:
  set-matrix:
    runs-on: ubuntu-latest
    outputs:
      something: ${{ steps.set-matrix.outputs.value }}
    steps:
      - name: make values
        id: set-matrix
        run: |
          echo '["hoge","fuga"]' | jq -c
          list=$(echo '["hoge","fuga"]' | jq -c)
          echo "::set-output name=value::${list}"

  execute:
    needs: set-matrix
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        hoge: ${{fromJson(needs.set-matrix.outputs.something)}}
    steps:
      - run: echo ${{ matrix.hoge }}

set-matrixのjobでhoge,fugaを配列としてJSON形式でoutputに格納している

後続のexecuteではstrategy.matrix.hogefromJsonを使って値を取得している

実行結果はこんな感じ

f:id:swfz:20210629195237p:plain

今回の例ではArray<string>だがset-matrixArray<Object>となるような値を生成しても同様に参照させればOK

サンプルでは固定値だがシェルスクリプトでよしなに指定することも可能なのでさまざまな場面に対応できる

参考 How to make a Dynamic Matrix in GitHub Actions | Tomas Votruba