【Github Actions】Dynamic Matrix を使って常に最新の Ruby バージョンでテストをする試み
2022/05/29
新しいバージョンが出る度にワークフローファイルを更新するのは面倒だなと思ったので試してみた
jobs:
versions:
name: Get versions
runs-on: ubuntu-latest
steps:
- id: set-matrix
name: Set Matrix
run: |
versions=$(
curl -s https://raw.githubusercontent.com/ruby/setup-ruby/master/ruby-builder-versions.json |
jq -c '[.ruby[]
| select(test("preview|rc|debug") | not)
| if test("^[a-z]") then . else .[0:3] end
| select(. >= "2.5")]
| unique'
)
echo "::set-output name=matrix::${versions}"
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
build:
needs: versions
runs-on: ubuntu-latest
strategy:
matrix:
ruby: ${{ fromJson(needs.versions.outputs.matrix) }}
name: Ruby ${{ matrix.ruby }}
steps:
- uses: actions/checkout@v2
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby }}
bundler-cache: true
- name: Run the default task
run: |
bundle exec rake
https://github.com/ytkg/ruby-dynamic-matrix-testing/actions/runs/1799057068
解説
versions というジョブで Ruby のバージョンのリストを生成している
GitHub Actions で使える Ruby のバージョンを ruby/setup-ruby リポジトリにある ruby-builder-versions.json から取得して、jq で絞り込みと加工をしている
$ curl -s https://raw.githubusercontent.com/ruby/setup-ruby/master/ruby-builder-versions.json |
jq -c '[.ruby[]
| select(test("preview|rc|debug") | not)
| if test("^[a-z]") then . else .[0:3] end
| select(. >= "2.5")]
| unique'
["2.5","2.6","2.7","3.0","3.1","head"]
所感
一応動いたけど、jsonファイルのフォーマットが変わったり、そもそも無くなったりする可能性もあるので、いつまで機能するかわからない
管理しているリポジトリがそんなに多くなければ、ベタ書きで都度更新の方が良さそう