name: Test on: push: branches: [ master ] pull_request: branches: [ master ] env: CI: "true" jobs: test: runs-on: ubuntu-22.04 services: redis: image: redis options: >- --health-cmd "redis-cli ping" --health-interval 10s --health-timeout 5s --health-retries 5 ports: # Maps port 6379 on service container to the host - 6379:6379 strategy: fail-fast: false matrix: gemfile: ['rails_5.2', 'rails_6.0', 'rails_6.1', 'rails_7.0', 'rails_7.1', 'rails_7.2'] ruby: ['2.4', '2.5', '2.6', '2.7', '3.0', '3.1', '3.2', '3.3'] exclude: # Rails 5.2 requires Ruby < 3.0 # https://github.com/rails/rails/issues/40938 - ruby: '3.0' gemfile: 'rails_5.2' - ruby: '3.1' gemfile: 'rails_5.2' - ruby: '3.2' gemfile: 'rails_5.2' - ruby: '3.3' gemfile: 'rails_5.2' # Rails >= 6 requires Ruby >= 2.5 - ruby: '2.4' gemfile: 'rails_6.0' - ruby: '2.4' gemfile: 'rails_6.1' # Rails >= 7 requires Ruby >= 2.7 - ruby: '2.4' gemfile: 'rails_7.0' - ruby: '2.5' gemfile: 'rails_7.0' - ruby: '2.6' gemfile: 'rails_7.0' - ruby: '2.4' gemfile: 'rails_7.1' - ruby: '2.5' gemfile: 'rails_7.1' - ruby: '2.6' gemfile: 'rails_7.1' - ruby: '2.4' gemfile: 'rails_7.2' - ruby: '2.5' gemfile: 'rails_7.2' - ruby: '2.6' gemfile: 'rails_7.2' - ruby: '2.7' gemfile: 'rails_7.2' - ruby: '3.0' gemfile: 'rails_7.2' env: # $BUNDLE_GEMFILE must be set at the job level, so it is set for all steps BUNDLE_GEMFILE: gemfiles/${{ matrix.gemfile }}.gemfile steps: - uses: actions/checkout@v4 - name: Set up Ruby uses: ruby/setup-ruby@v1 with: ruby-version: ${{ matrix.ruby }} bundler-cache: true # runs 'bundle install' and caches installed gems automatically - name: Run tests run: bundle exec rake tests: runs-on: ubuntu-latest needs: test if: always() steps: - name: All tests ok if: ${{ !(contains(needs.*.result, 'failure')) }} run: exit 0 - name: Some tests failed if: ${{ contains(needs.*.result, 'failure') }} run: exit 1