name: Ruby tests

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

jobs:
  test:
    name: Ruby tests
    runs-on: ${{ matrix.os }}

    strategy:
      matrix:
        ruby-version: ['2.3', '2.4', '2.5', '2.6', '2.7', '3.0', '3.1', '3.2', '3.3']
        channel: ['stable']
        os: ['ubuntu-latest']

        include:
          # Test legacy Ruby versions on ubuntu-20.04 to avoid segmentation
          # faults and errors with `Marshal`. Ref: ruby/setup-ruby#496
          - ruby-version: '1.9.3'
            channel: 'stable'
            os: 'ubuntu-20.04'
          - ruby-version: '2.0'
            channel: 'stable'
            os: 'ubuntu-20.04'
          - ruby-version: '2.1'
            channel: 'stable'
            os: 'ubuntu-20.04'
          - ruby-version: '2.2'
            channel: 'stable'
            os: 'ubuntu-20.04'

          - ruby-version: 'head'
            channel: 'experimental'
            os: 'ubuntu-latest'

    continue-on-error: ${{ matrix.channel != 'stable' }}

    steps:
    - uses: actions/checkout@v4
    - name: Set up Ruby
      uses: ruby/setup-ruby@v1
      with:
        ruby-version: ${{ matrix.ruby-version }}
        bundler-cache: true
    - name: Run tests
      run: bundle exec rake
