name: RSpec CI
on:
  push:
    branches:
      - 'main'
      - '*-maintenance'
      - '*-dev'
      - 'pr-*'
  pull_request:
    branches:
      - '*'

permissions:
  contents: read

concurrency:
  group: ${{ github.workflow }}-${{ github.github.head_ref || github.run_id }}
  cancel-in-progress: true

env:
  RSPEC_CI: true

jobs:
  rubocop:
    name: Rubocop
    runs-on: 'ubuntu-latest'
    steps:
      - uses: actions/checkout@v6
      - uses: ruby/setup-ruby@v1
        with:
          ruby-version: '3.3'
      - run: script/update_rubygems_and_install_bundler
      - run: script/bundle
      - run: script/run_rubocop

  test:
    name: 'Ruby: ${{ matrix.ruby }}, Rails: ${{ matrix.env.RAILS_VERSION }}, RSpec: ${{ matrix.env.RSPEC_VERSION || ''~> 3.13'' }}'
    runs-on: 'ubuntu-latest'
    strategy:
      fail-fast: false
      matrix:
       include:
         # Compatibility check
         - ruby: 3.4
           env:
             RAILS_VERSION: '~> 8.0.0'
             RSPEC_VERSION: '~> 4.0.0.beta1'
             MAINTENANCE_BRANCH: 'main'

         # Rails 8.0 builds >= 3.2
         - ruby: 3.4
           env:
             RAILS_VERSION: '~> 8.0.0'
         - ruby: 3.3
           env:
             RAILS_VERSION: '~> 8.0.0'
         - ruby: 3.2
           env:
             RAILS_VERSION: '~> 8.0.0'

         # Rails 7.2 builds >= 3.1
         - ruby: 3.3
           env:
             RAILS_VERSION: '~> 7.2.0'
         - ruby: 3.2
           env:
             RAILS_VERSION: '~> 7.2.0'
         - ruby: 3.1
           env:
             RAILS_VERSION: '~> 7.2.0'

    env: ${{ matrix.env }}
    steps:
      - uses: actions/checkout@v6
      - uses: ruby/setup-ruby@v1
        with:
          ruby-version: ${{ matrix.ruby }}
      - run: script/update_rubygems_and_install_bundler
      - run: script/clone_all_rspec_repos
      - run: script/bundle
      - run: script/run_build
        continue-on-error: ${{ matrix.allow_failure || false }}
