📜

ランナー OS の matrix を自動生成するアクションを作りました [GitHub Actions]

2022/12/31に公開

作ったもの

https://github.com/snow-actions/list-github-hosted-runners

何ができる?

今までべた書きしていたものを…

test.yml
jobs:
  test:
    strategy:
      fail-fast: false
      matrix:
        runner: [ ubuntu-22.04, ubuntu-20.04, ubuntu-18.04, windows-2022, windows-2019, macos-11, macos-10.15 ]
    runs-on: ${{ matrix.runner }}

動的に生成できるようになりました。

test.yml
jobs:
  runners:
    runs-on: ubuntu-latest
    outputs:
      list: ${{ steps.list.outputs.all }}
    steps:
      - id: list
        uses: snow-actions/list-github-hosted-runners@v1.0.0

  test:
    needs: [ runners ]
    strategy:
      fail-fast: false
      matrix:
        runner: ${{ fromJSON(needs.runners.outputs.list) }}
    runs-on: ${{ matrix.runner }}

何が嬉しいか

最新のランナー OS が自動的に適用されるので、ランナー OS が更新される度にワークフローをメンテナンスする必要がなくなります。

ユースケース

カスタムアクションやツールの各 OS でのテストなど。

どうやって実現しているか

過去に作成したカスタムアクションや Composite アクションのテンプレートのテストをメンテナンスするのをずっと不便に思っていて自動生成する方法はないものかと考えていました。
ドキュメントをスクレイピングしたり actions/runner-images のファイルを ls してみようかと検討していたのですが、ワークフローのバリデーションに使われている JSON Schema にリストがあることに気付きました。
VS Code で使われている JSON Schema は JSON Schema Store で提供されているようなのでそこを参照しています。

実質的なコードはこれだけです。

https://github.com/snow-actions/list-github-hosted-runners/blob/014ab63906e8ea1b18e8008ed726461168f8244a/action.yml#L28-L29

さいごに

カスタムアクションやツールを自作している方はテストの保守が多少楽になるのではないかと思います。
ぜひ使ってみてください。

Discussion