name: Run tests

on: [push, pull_request]

jobs:
  ruby-versions:
    uses: ruby/actions/.github/workflows/ruby_versions.yml@master
    with:
      engine: cruby
      min_version: 3.1

  build:
    needs: ruby-versions
    permissions:
      contents: read
      checks: write
    name: build (${{ matrix.ruby }} / ${{ matrix.os }})
    strategy:
      matrix:
        ruby: ${{ fromJson(needs.ruby-versions.outputs.versions) }}
        os: [ ubuntu-latest, macos-latest, windows-latest ]
        experimental: [false]
        include:
          - { ruby: truffleruby-head, os: ubuntu-latest,  experimental: true }
    runs-on: ${{ matrix.os }}
    continue-on-error: ${{ matrix.experimental }}
    timeout-minutes: 15
    steps:
    - uses: actions/checkout@v5
    - name: Set up Ruby
      uses: ruby/setup-ruby@v1
      with:
        ruby-version: ${{ matrix.ruby }}
        bundler-cache: true
        rubygems: 3.5.14
    - name: Run test
      run: bundle exec rake test
      timeout-minutes: 5 # _should_ finish in under a minute

    - uses: joshmfrankel/simplecov-check-action@main
      if: ${{ matrix.os == 'ubuntu-latest' && github.event_name != 'pull_request' &&
        !startsWith(matrix.ruby, 'truffleruby') && !startsWith(matrix.ruby, 'jruby') }}
      with:
        check_job_name: "SimpleCov - ${{ matrix.ruby }}"
        minimum_suite_coverage: 90
        minimum_file_coverage: 40 # TODO: increase this after switching to SASL::AuthenticationExchange
        github_token: ${{ secrets.GITHUB_TOKEN }}
