name: CI

on:
  push:
    branches: [master]
  pull_request:
    branches: ['**']

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    
    - name: Set up Ruby
      uses: ruby/setup-ruby@v1
      with:
        ruby-version: 2.7.2
        bundler-cache: true
        
    - name: Rubocop
      run: bundle exec rubocop

  tests:
    needs: lint
    services:
      db:
        image: postgres:9.4
        env:
          POSTGRES_HOST_AUTH_METHOD: trust
          POSTGRES_DB: jsonb_accessor
        ports: ['5432:5432']
        options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5

    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        include:
          - gemfile: activerecord_5.0.0
            ruby: 2.4.5

          - gemfile: activerecord_5.1.0
            ruby: 2.4.5

          - gemfile: activerecord_5.0.0
            ruby: 2.5.3

          - gemfile: activerecord_5.1.0
            ruby: 2.5.3

          - gemfile: activerecord_6.1.0
            ruby: 2.5.3

          - gemfile: activerecord_5.0.0
            ruby: 2.6.1

          - gemfile: activerecord_5.1.0
            ruby: 2.6.1

          - gemfile: activerecord_6.1.0
            ruby: 2.6.1

          - gemfile: activerecord_5.0.0
            ruby: 2.7.2

          - gemfile: activerecord_5.1.0
            ruby: 2.7.2

          - gemfile: activerecord_6.1.0
            ruby: 2.7.2

          - gemfile: activerecord_7.0.1
            ruby: 2.7.2

          - gemfile: activerecord_6.1.0
            ruby: 3.0.0

          - gemfile: activerecord_7.0.1
            ruby: 3.0.0

          - gemfile: activerecord_7.0.1
            ruby: 3.1.0

    name: ${{ matrix.gemfile }}, 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: Bundle install
      run: |
        bundle config set gemfile "${GITHUB_WORKSPACE}/gemfiles/${{ matrix.gemfile }}.gemfile"
        bundle install --jobs 4 --retry 3

    - name: Setup DB
      run: |
        bundle exec rake db:create db:schema:load

    - name: Run tests
      run: |
        bundle exec rake spec