name: CI on: push: pull_request: schedule: - cron: '0 8 * * 6' jobs: test: env: PIP_DISABLE_PIP_VERSION_CHECK: 1 strategy: fail-fast: false matrix: os: ["ubuntu-20.04", "macos-latest"] python: - "3.7" - "3.8" - "3.9" - "3.10" - "3.11" - "3.12" - "3.13" - "pypy-3.9" - "pypy-3.10" include: - os: "windows-latest" python: "3.8" - os: "windows-latest" python: "3.9" - os: "windows-latest" python: "3.10" - os: "windows-latest" python: "3.11" - os: "windows-latest" python: "3.12" - os: "windows-latest" python: "3.13" exclude: - os: "macos-latest" python: "3.7" runs-on: ${{ matrix.os }} name: "Test: Python ${{ matrix.python }} on ${{ matrix.os }}" steps: - uses: actions/checkout@v4 with: submodules: recursive - uses: actions/setup-python@v5 with: python-version: ${{ matrix.python }} - uses: pypa/hatch@install - run: hatch test -v --cover --include python=$(echo ${{ matrix.python }} | tr -d '-') tests - run: hatch run coverage:xml - uses: codecov/codecov-action@v5 with: fail_ci_if_error: true token: ${{ secrets.CODECOV_TOKEN }} typecheck: name: Type check runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.13" - uses: pypa/hatch@install - run: hatch run types:check fmt: name: Format and lint runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.13" - uses: pypa/hatch@install - run: hatch fmt --check