name: CI

on:
  push:
    branches: [main, 0.x]
    paths-ignore:
      - '**/*.md'
  pull_request:
    paths-ignore:
      - '**/*.md'
  workflow_dispatch:

jobs:
  ruff:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
      - name: Install uv
        uses: astral-sh/setup-uv@cec208311dfd045dd5311c1add060b2062131d57 # v8.0.0
        with:
          enable-cache: true
          cache-dependency-glob: "uv.lock"

      - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
        with:
          python-version: "3.10"

      - name: Install the project
        run: uv sync --all-extras --dev

      - name: Ruff
        run: uv run ruff check --output-format=github .
        continue-on-error: true
        id: ruff-check

      - name: Check format
        run: uv run ruff format --check .
        continue-on-error: true
        id: ruff-format

      - name: Report ruff errors
        if: steps.ruff-check.outcome == 'failure' || steps.ruff-format.outcome == 'failure'
        run: |
          echo "::error::Ruff checks failed. Please run 'make fix' locally to automatically fix formatting and linting issues."
          exit 1

  type-check:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: ["3.10", "3.13"]
        
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
      - name: Install uv
        uses: astral-sh/setup-uv@cec208311dfd045dd5311c1add060b2062131d57 # v8.0.0
        with:
          enable-cache: true
          cache-dependency-glob: "uv.lock"

      - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
        with:
          python-version: ${{ matrix.python-version }}

      - name: Install the project
        run: uv sync --all-extras --dev

      - name: Cache mypy
        uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
        with:
          path: .mypy_cache
          key: mypy-${{ matrix.python-version }}-${{ hashFiles('uv.lock') }}-${{ github.run_id }}
          restore-keys: |
            mypy-${{ matrix.python-version }}-${{ hashFiles('uv.lock') }}-
            mypy-${{ matrix.python-version }}-

      - name: Check Types
        run: uv run python scripts/check_types.py
