name: CI
on:
  push:
  pull_request:
  schedule:
    - cron: '0 6 * * 6'
defaults:
  run:
    shell: bash
jobs:
  test:
    strategy:
      fail-fast: false
      matrix:
        include:
          - python: '^3.12'
            os: ubuntu-latest
          - python: '3.12'
            os: macos-latest
          - python: '3.11'
            os: windows-latest
          - python: '3.10'
            os: ubuntu-latest
          - python: '3.9'
            os: macos-latest
          - python: '3.8'
            os: windows-latest
          - python: '3.8'
            os: ubuntu-latest
            versions: minimal
    runs-on: ${{matrix.os}}
    steps:
      - name: Download source
        uses: actions/checkout@v4
      - name: Install Python
        uses: actions/setup-python@v5
        with:
          python-version: ${{matrix.python}}
      - name: Pin to lowest versions
        if: matrix.versions == 'minimal'
        run: |
          sed -i -E 's/#min //; s/\b >=([0-9])/ ==\1/' pyproject.toml
      - name: Install Hatch
        run: |
          pip install hatch
      - name: Install dependencies
        run: |
          hatch run test:pip freeze
      - name: Run tests
        run: |
          hatch run test:test
  style:
    runs-on: ubuntu-latest
    steps:
      - name: Download source
        uses: actions/checkout@v4
      - name: Install Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.12'
      - name: Install Hatch
        run: |
          pip install hatch
      - name: Install dependencies
        run: |
          hatch run style:pip freeze
          hatch run types:pip freeze
      - name: Check style
        if: always()
        run: |
          hatch run style:check
      - name: Check types
        if: always()
        run: |
          hatch run types:check
