Ruby x RailsのmatrixでGitHub Actions設定したい
下調べ
Appraisal
READMEにGitHub Actionsの記述ない (2020-05-04時点)
Rails
5.2まではtravisで6.0からはBuildkite
Gemfile.lock
最近のbundle gemだと含めるが古いbundle gemだと含めない
含める場合は各Railsのバージョンに合わせて含めていく形になるのかな...
まあ考えるとしんどそうなのでキャッシュしないようにする
余談ですが最近の bundle gem だと Gemfile.lock をコミットするようになってますが、dependabotでバージョンアップするコストもあるので僕はgemだと常に依存gemの最新版を常にCIで使うようにしてます。(もしそれで問題ある場合はgemspecやGemfileで制御する)
gemのバージョン指定
通常だと多分Railsのバージョンごとに Gemfile を作って gem "rails", "~> 6.0.0" のように指定すると思う
がGemfile.lock使わないかつ依存が少ないならもう少しサボって gem install rails -v '~> 6.0.0' && bundle install --local を叩いて入れてもいいかもしれない
面倒なので gemfiles ディレクトリを作って Gemfile-rails-5.2 Gemfile-rails-6.0 のような感じで置いて
code:ruby
# Specify your gem's dependencies in top_n_loader.gemspec
gemspec path: ".."
gem "activerecord", "~> 5.2.0"
こうしておき環境変数の BUNDLE_GEMFILE 指定するなり --gemfile オプション指定するなりしたほうが楽そう
実装
sqlite3だと libsqlite3-dev がないと bundle install 通らない
code:yml
name: Run test
jobs:
test:
strategy:
fail-fast: false
matrix:
exclude:
- ruby: '2.6'
rails: '5.2'
- ruby: '2.7'
rails: '5.2'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby }}
- run: |
sudo apt-get update
sudo apt-get install -y libsqlite3-dev
- run: bundle install --gemfile gemfiles/Gemfile-rails-${{ matrix.rails }} --jobs 4 --retry 3
- run: bundle exec --gemfile gemfiles/Gemfile-rails-${{ matrix.rails }} rake
もっといいyml
しらべた限りsue445さんのymlが一番充実して整っていそうな雰囲気だったのでパクりたい