name: CI - Python

on:
  workflow_call:
  workflow_dispatch:

jobs:
  build:
    name: Build
    uses: ./.github/workflows/bazel.yml
    with:
      name: Build
      cache-key: py-build
      run: bazel build //py:selenium-wheel //py:selenium-sdist

  docs:
    name: Documentation
    needs: build
    runs-on: ubuntu-latest
    steps:
      - name: Checkout source tree
        uses: actions/checkout@v4
      - name: Set up Python 3.9
        uses: actions/setup-python@v4
        with:
          python-version: 3.9
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install tox==4.27.0
      - name: Generate docs
        run: tox -c py/tox.ini
        env:
          TOXENV: docs

  mypy:
    name: Mypy
    needs: build
    runs-on: ubuntu-latest
    steps:
      - name: Checkout source tree
        uses: actions/checkout@v4
      - name: Set up Python 3.9
        uses: actions/setup-python@v4
        with:
          python-version: 3.9
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install tox==4.27.0
      - name: Run type checking
        run: |
          tox -c py/tox.ini || true
        env:
          TOXENV: mypy

  remote-tests:
    name: Remote Tests
    needs: build
    uses: ./.github/workflows/bazel.yml
    strategy:
      fail-fast: false
      matrix:
        include:
          - browser: firefox
    with:
      name: Integration Tests (remote, ${{ matrix.browser }})
      browser: ${{ matrix.browser }}
      cache-key: py-remote-${{ matrix.browser }}
      run: bazel test --local_test_jobs 1 --flaky_test_attempts 3 //py:test-remote

  browser-tests:
    name: Browser Tests
    needs: build
    uses: ./.github/workflows/bazel.yml
    strategy:
      fail-fast: false
      matrix:
        include:
          - browser: chrome
            os: ubuntu
          - browser: edge
            os: ubuntu
          - browser: firefox
            os: ubuntu
    with:
      name: Integration Tests (${{ matrix.browser }}, ${{ matrix.os }})
      browser: ${{ matrix.browser }}
      os: ${{ matrix.os }}
      cache-key: py-browser-${{ matrix.browser }}
      run: |
        bazel test --local_test_jobs 1 --flaky_test_attempts 3 //py:common-${{ matrix.browser }}-bidi
        bazel test --local_test_jobs 1 --flaky_test_attempts 3 //py:test-${{ matrix.browser }}

  safari-tests:
    name: Browser Tests
    needs: build
    uses: ./.github/workflows/bazel.yml
    strategy:
      fail-fast: false
      matrix:
        include:
          - browser: safari
            os: macos
    with:
      name: Integration Tests (${{ matrix.browser }}, ${{ matrix.os }})
      browser: ${{ matrix.browser }}
      os: ${{ matrix.os }}
      cache-key: py-browser-${{ matrix.browser }}
      run: |
        bazel test --local_test_jobs 1 --flaky_test_attempts 3 //py:test-${{ matrix.browser }}
