name: CI

on:
  pull_request:

  push:
    branches: [ main, 1.x, 0.1x ]

env:
  GIT_COMMIT_SHA: ${{ github.sha }}
  GIT_BRANCH: ${{ github.ref }}
  COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}

permissions:
  contents: read # to fetch code (actions/checkout)

jobs:
  linting:
    runs-on: ubuntu-latest
    env:
      BUNDLE_WITH: lint
      BUNDLE_WITHOUT: development:test

    steps:
      - uses: actions/checkout@v6

      - name: Setup Ruby 3.x
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: 3
          bundler-cache: true

      - name: Rubocop
        run: bundle exec rubocop --format progress

      - name: Yard-Junk
        run: bundle exec yard-junk --path lib

  build:
    needs: [ linting ]
    runs-on: ubuntu-latest
    name: build ${{ matrix.ruby }}
    strategy:
      fail-fast: false
      matrix:
        ruby: [ '3.0', '3.1', '3.2', '3.3', '3.4' ]
        experimental: [false]
        include:
          - ruby: head
            experimental: true
          - ruby: truffleruby-head
            experimental: true

    steps:
      - uses: actions/checkout@v6
      - uses: ruby/setup-ruby@v1
        with:
          ruby-version: ${{ matrix.ruby }}
          bundler-cache: true

      - name: RSpec
        continue-on-error: ${{ matrix.experimental }}
        run: bundle exec rake

      - name: Test External Adapters
        continue-on-error: ${{ matrix.experimental }}
        run: bundle exec bake test:external


