name: Ruby CI

on:
  pull_request:
  push:
    branches: [main]
  workflow_dispatch:

jobs:
  lint:
    name: Lint
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4

      - uses: ruby/setup-ruby@v1
        with:
          ruby-version: '3.3'
          rubygems: latest
          bundler: 2
          bundler-cache: true

      - run: bundle exec standardrb

  required-ubuntu:
    name: Ruby ${{ matrix.ruby }} - ${{ matrix.os }}

    strategy:
      fail-fast: false
      matrix:
        os:
          - ubuntu-20.04
          - ubuntu-22.04
          - ubuntu-24.04
        ruby:
          - '3.1'
          - '3.2'
          - '3.3'
          - truffleruby
        include:
          - ruby: jruby
            continue-on-error: true


    runs-on: ${{ matrix.os }}
    continue-on-error: ${{ matrix.continue-on-error || false }}

    steps:
      - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
      - uses: ruby/setup-ruby@v1
        with:
          ruby-version: ${{ matrix.ruby }}
          rubygems: latest
          bundler: 2
          bundler-cache: true

      - run: bundle exec ruby -S rake test --trace

  required-macos:
    name: Ruby ${{ matrix.ruby }} - ${{ matrix.os }}

    strategy:
      fail-fast: false
      matrix:
        os:
          - macos-12
          - macos-13
          - macos-14
        ruby:
          - '3.1'
          - '3.2'
          - '3.3'

    runs-on: ${{ matrix.os }}

    steps:
      - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
      - uses: ruby/setup-ruby@v1
        with:
          ruby-version: ${{ matrix.ruby }}
          rubygems: latest
          bundler: 2
          bundler-cache: true

      - run: bundle exec ruby -S rake test --trace

  required-windows:
    name: Ruby ${{ matrix.ruby }} - ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os:
          - windows-2019
          - windows-2022
        ruby:
          - '3.1'
          - '3.2'
          - '3.3'
          - mswin
          - ucrt
        include:
          - ruby: mingw
            os: windows-2022

    runs-on: ${{ matrix.os }}

    steps:
      - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
      - uses: ruby/setup-ruby@v1
        with:
          ruby-version: ${{ matrix.ruby }}
          rubygems: latest
          bundler: 2
          bundler-cache: true

      - run: bundle exec ruby -S rake test --trace

  ruby-head-optional:
    name: Ruby ${{ matrix.ruby }} - ${{ matrix.os }} (optional)

    strategy:
      fail-fast: false

      matrix:
        ruby:
          - head
        os:
          - macos-latest
          - ubuntu-latest
          - windows-latest

    continue-on-error: true
    runs-on: ${{ matrix.os }}

    steps:
      - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
      - uses: ruby/setup-ruby@v1
        with:
          ruby-version: ${{ matrix.ruby }}
          rubygems: latest
          bundler: 2
          bundler-cache: true

      - run: bundle exec ruby -S rake test --trace
