高木のブログ

【GitHub Actions】複数のRubyバージョンとGemfileの組み合わせでテストを実行する

2022/03/05

GitHub Actionsで複数のRubyバージョンでテストを実行する」に複数の Gemfile を加えた版

手順

gemfiles ディレクトリに Gemfile を用意する

$ tree gemfiles
gemfiles
├── rails_5.0.gemfile
├── rails_5.1.gemfile
├── rails_5.2.gemfile
└── rails_6.0.gemfile

Rubyバージョンの時と同じように、matrix に gemfile を指定する
環境変数 BUNDLE_GEMFILE で使用する Gemfile を指定することができるみたい
name は任意

.github/workflows/ruby.yml
name: Ruby

on: [push, pull_request]

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        ruby: ['2.4', '2.5', '2.6', '2.7', '3.0']
+       gemfile: ['gemfiles/rails_5.0.gemfile', 'gemfiles/rails_5.1.gemfile', 'gemfiles/rails_5.2.gemfile', 'gemfiles/rails_6.0.gemfile']
+   env:
+     BUNDLE_GEMFILE: ${{ matrix.gemfile }}
+   name: Ruby ${{ matrix.ruby }}, ${{ matrix.gemfile }}
    steps:
    - uses: actions/[email protected]
    - name: Set up Ruby
      uses: ruby/[email protected]
      with:
        ruby-version: ${{ matrix.ruby }}
        bundler-cache: true
    - name: Run tests
      run: bundle exec rake

テストをスキップしたい組み合わせがある場合

exclude で除外したい組み合わせを指定することができる

.github/workflows/ruby.yml
name: Ruby

on: [push, pull_request]

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        ruby: ['2.4', '2.5', '2.6', '2.7', '3.0']
        gemfile: ['gemfiles/rails_5.0.gemfile', 'gemfiles/rails_5.1.gemfile', 'gemfiles/rails_5.2.gemfile', 'gemfiles/rails_6.0.gemfile']
+       exclude:
+         - ruby: '2.4'
+           gemfile: 'gemfiles/rails_6.0.gemfile'
+         - ruby: '3.0'
+           gemfile: 'gemfiles/rails_5.0.gemfile'
+         - ruby: '3.0'
+           gemfile: 'gemfiles/rails_5.1.gemfile'
+         - ruby: '3.0'
+           gemfile: 'gemfiles/rails_5.2.gemfile'
   env:
     BUNDLE_GEMFILE: ${{ matrix.gemfile }}
   name: Ruby ${{ matrix.ruby }}, ${{ matrix.gemfile }}
    steps:
    - uses: actions/[email protected]
    - name: Set up Ruby
      uses: ruby/[email protected]
      with:
        ruby-version: ${{ matrix.ruby }}
        bundler-cache: true
    - name: Run tests
      run: bundle exec rake

ytkg

Written by ytkg, Twitter, GitHub