name: CI on: push: branches: [main] paths-ignore: - 'docs/**' - '**/*.md' - '.claude/**' pull_request: branches: [main] paths-ignore: - 'docs/**' - '**/*.md' - '.claude/**' concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: test: runs-on: ubuntu-latest timeout-minutes: 15 steps: - uses: actions/checkout@v6 - name: Set up Python uses: actions/setup-python@v6 with: python-version: "3.11" - name: Install uv run: pip install uv - name: Cache uv packages uses: actions/cache@v4 with: path: ~/.cache/uv key: uv-${{ runner.os }}-${{ hashFiles('pyproject.toml') }} restore-keys: uv-${{ runner.os }}- - name: Install dependencies run: uv pip install -e ".[dev]" --system - name: Run tests run: pytest --cov=src --cov-report=term-missing - name: Run ruff run: ruff check src/ tests/ - name: Run mypy run: mypy src/