高木のブログ

【Github Actions】続・Dynamic Matrix を使って常に最新の Ruby バージョンでテストをする試み

2022/06/06

【Github Actions】Dynamic Matrix を使って常に最新の Ruby バージョンでテストをする試み の続き

安定版のバージョンを返すAPI

公式?でAPIが用意された
https://cache.ruby-lang.org/pub/misc/ci_versions/

$ curl https://cache.ruby-lang.org/pub/misc/ci_versions/cruby.json
["2.7","3.0","3.1","head"]

Dynamic Matrix で扱いやすいフォーマットで返されるので、加工なしでそのまま使える

データソースは同じく ruby-builder-versions.json を使っているっぽい
https://github.com/ruby/actions/blob/6d30e4fb0c1a1189be3da336353842873301bd7a/tool/snapshot/update_ci_versions.rb#L9

バージョンを追加する

古いバージョンも使いたい場合はこんな感じ

$ curl -s 'https://cache.ruby-lang.org/pub/misc/ci_versions/cruby.json' | jq -c '. + ["2.6", "2.5", "2.4"]'
["2.7","3.0","3.1","head","2.6","2.5","2.4"]

GitHub Actions のアクション

上記のAPIをラップしたアクションも出来ていた
https://github.com/ybiquitous/dynamic-ruby-versions-action

ruby.yaml
jobs:
  ruby-versions:
    runs-on: ubuntu-latest
    outputs:
      versions: ${{ steps.versions.outputs.versions }}
    steps:
      - id: versions
        uses: ybiquitous/dynamic-ruby-versions-[email protected]

  test:
    needs: ruby-versions
    runs-on: ubuntu-latest
    strategy:
      matrix:
        ruby: ${{ fromJson(needs.ruby-versions.outputs.versions) }}
    steps:
      - uses: actions/[email protected]
      - uses: ruby/setup-[email protected]
        with:
          ruby-version: ${{ matrix.ruby }}
          bundler-cache: true
      - run: bundle exec rake

バージョンを追加する

古いバージョンも使いたい場合はこんな感じ

steps:
  - id: versions
    uses: ybiquitous/dynamic-ruby-versions-[email protected]
    with:
      add: '"2.5", "2.6"'

所感

公式で用意された感じなので、安心して「Dynamic Matrix を使って常に最新の Ruby バージョンでテスト」ができそう
さっそく ruby/net-pop でも使われている(Pull Request #13

自分が公開している Gem でもガンガン使っていきたい

参考

Dynamic Ruby versions matrix on GitHub Actions


ytkg

Written by ytkg, Twitter, GitHub