name: CI - Ruby

on:
  workflow_call:
  workflow_dispatch:

jobs:
  build:
    name: Build
    uses: ./.github/workflows/bazel.yml
    with:
      name: Build
      cache-key: rb-build
      run: bazel build //rb:selenium-devtools //rb:selenium-webdriver

  docs:
    name: Documentation
    needs: build
    uses: ./.github/workflows/bazel.yml
    with:
      name: Documentation
      cache-key: rb-docs
      run: bazel run //rb:docs

  lint:
    name: Lint
    needs: build
    uses: ./.github/workflows/bazel.yml
    with:
      name: Lint
      cache-key: rb-lint
      run: bazel test //rb:lint

  unit-tests:
    name: Unit Tests
    needs: build
    uses: ./.github/workflows/bazel.yml
    strategy:
      fail-fast: false
      matrix:
        include:
          - ruby-version: 3.1.6
            os: ubuntu
          - ruby-version: 3.1.6
            os: windows
          - ruby-version: 3.1.6
            os: macos
          - ruby-version: 3.3.5
            os: ubuntu
          - ruby-version: jruby-9.4.8.0
            os: ubuntu
          - ruby-version: truffleruby-24.1.1
            os: ubuntu
    with:
      name: Unit Tests (${{ matrix.ruby-version }}, ${{ matrix.os }})
      cache-key: rb-unit-test-${{ matrix.ruby-version }}
      os: ${{ matrix.os }}
      ruby-version: ${{ matrix.ruby-version }}
      run: >
        bazel test
        --build_tests_only
        --test_size_filters small
        //rb/spec/...

  integration-tests-local:
    name: Local Tests
    needs: build
    uses: ./.github/workflows/bazel.yml
    strategy:
      fail-fast: false
      matrix:
        browser:
          - chrome
          - edge
          - firefox
        os:
          - windows
          - macos
        exclude:
          - browser: edge
            os: macos
    with:
      name: Local Tests (${{ matrix.browser }}, ${{ matrix.os }})
      browser: ${{ matrix.browser }}
      cache-key: rb-${{ matrix.browser }}-test
      os: ${{ matrix.os }}
      run: >
        bazel test
        --build_tests_only
        --flaky_test_attempts 3
        --local_test_jobs 1
        --test_size_filters large
        --test_tag_filters ${{ matrix.browser }}
        ${{ matrix.os != 'windows' && '--pin_browsers' || '' }}
        //rb/spec/...

  integration-tests-remote:
    name: Remote Tests
    needs: build
    uses: ./.github/workflows/bazel.yml
    strategy:
      fail-fast: false
      matrix:
        include:
          - browser: edge
            os: windows
    with:
      name: Remote Tests (${{ matrix.browser }}, ${{ matrix.os }})
      browser: ${{ matrix.browser }}
      cache-key: rb-remote-${{ matrix.browser }}-test
      os: ${{ matrix.os }}
      java-version: 11
      run: >
        bazel test
        --build_tests_only
        --flaky_test_attempts 3
        --local_test_jobs 1
        --test_size_filters large
        --test_tag_filters ${{ matrix.browser }}-remote
        ${{ matrix.os != 'windows' && '--pin_browsers' || '' }}
        //rb/spec/...
