name: "🧪 Test"

on:
  push:
    branches:
      - "main"
  pull_request: null
  # build weekly at 4:00 AM UTC
  schedule:
    - cron: '0 4 * * 1'

jobs:
  test:
    name: "${{ matrix.name }}"
    strategy:
      fail-fast: false
      matrix:
        # The `include` array below will match against these names
        # and add additional keys and values to the JSON object.
        name:
          - "Linux"
          - "macOS"
          - "Windows"
          - "Quality"

        # The `include` array below will also inherit these values,
        # which are critical for effective cache-busting.
        # The nested list syntax ensures that the full array of values is inherited.
        cache-key-hash-files:
          -
            - "requirements/*/*.txt"
            - "pyproject.toml"
            - "toxfile.py"

        include:
          - name: "Linux"
            runner: "ubuntu-latest"
            cpythons:
              - "3.9"
              - "3.10"
              - "3.11"
              - "3.12"
              - "3.13"
              - "3.14"
            tox-post-environments:
              - "py3.9-mindeps"
              - "py3.11-sphinxext"
              - "coverage_report"

          - name: "macOS"
            runner: "macos-latest"
            cpythons:
              - "3.11"
            tox-post-environments:
              - "py3.11-sphinxext"
              - "coverage_report"

          - name: "Windows"
            runner: "windows-latest"
            cpythons:
              - "3.9"
              - "3.11"
            tox-post-environments:
              - "py3.9-mindeps"
              - "py3.11-sphinxext"
              - "coverage_report"

          - name: "Quality"
            runner: "ubuntu-latest"
            cpythons:
              - "3.9"
              - "3.14"
            tox-environments:
              - "check-min-python-is-tested"
              - "mypy-py3.14"
              - "mypy-py3.9"
              - "mypy-test"
              - "poetry-check"
              - "pylint"
              - "test-lazy-imports"
              - "twine-check"
            # TODO: revisit caching strategy for '.mypy_cache'
            # we believe a bad cache can be restored when the package changes,
            # tricking 'mypy-test' into seeing an old version of the SDK
            #
            # cache-paths:
            #   - ".mypy_cache/"

    uses: "globus/workflows/.github/workflows/tox.yaml@9cb0a9d3c117062037aefaaa816116e9db1f241f" # v1.4
    with:
      config: "${{ toJSON(matrix) }}"
