はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Actions】matrixでmax-parallelを1にした場合はジョブの実行順序が一意に決定されるかどうか

はじめに

以下のようなコードを書いた際に、果たして順序は常に同じになるでしょうか。

name: test
on:
  workflow_dispatch:

jobs:
  test-matrix:
    runs-on: ubuntu-latest
    # 実行される順番は常に 1 -> 2 -> 3 かどうか
    strategy:
      matrix:
        value: [1, 2, 3]
      max-parallel: 1
    steps:
      - name: Dump
        run: |
          echo "Value: ${{ matrix.value }}"
実際に利用している例

結論一意に定まるのですが、備忘録もかねて参照先を残しておきます。

概要

まずはマトリックスの変数の順序によりジョブが作成される順序が決まるという旨が公式ドキュメントに記述されています。

# ジョブの作成順序は 1 -> 2 -> 3
strategy:
  matrix:
    value: [1, 2, 3]

GitHub の既定では、ランナーの可用性に応じて並列実行されるジョブの数が最大化されます。 マトリックス内の変数の順序によって、ジョブが作成される順序が決まります。 定義する最初の変数は、ワークフローの実行で最初に作成されるジョブになります。

ワークフローでのジョブのバリエーションの実行 - GitHub Docs

max-parallel1に設定することで、同時に実行できるジョブの最大数を1つにすることができます。ジョブの作成順序が一意に定まることを考慮すると、必ずジョブの順番が一意で直列に実行できることが分かります。

実験

冒頭のサンプルを実行してみたところ、確かに1 -> 2 -> 3で実行されていました。

name: test
on:
  workflow_dispatch:

jobs:
  test-matrix:
    runs-on: ubuntu-latest
    # 実行される順番は常に 1 -> 2 -> 3 かどうか
    strategy:
      matrix:
        value: [1, 2, 3]
      max-parallel: 1
    steps:
      - name: Dump
        run: |
          echo "Value: ${{ matrix.value }}"