name: CI on: push: branches: - main - develop pull_request: branches: - main - develop env: UV_CACHE_DIR: /tmp/.uv-cache jobs: lockfile: if: "!startsWith(github.event.head_commit.message, 'chore: release a new version') && !startsWith(github.event.head_commit.message, 'bump:')" runs-on: ubuntu-latest name: Check lockfile steps: - uses: actions/checkout@v4 - name: Install uv uses: astral-sh/setup-uv@v4 - name: Check uv.lock is up to date run: uv lock --check lint: if: "!startsWith(github.event.head_commit.message, 'chore: release a new version') && !startsWith(github.event.head_commit.message, 'bump:')" runs-on: ubuntu-latest name: Lint (ruff) steps: - uses: actions/checkout@v4 - name: Install uv uses: astral-sh/setup-uv@v4 - name: Restore uv cache uses: actions/cache@v4 with: path: /tmp/.uv-cache key: uv-${{ runner.os }}-${{ hashFiles('uv.lock') }} restore-keys: | uv-${{ runner.os }}- - name: Set up Python run: uv python install 3.12 - name: Install dependencies run: uv sync --extra dev - name: Run ruff check run: uv run ruff check . - name: Run ruff format check run: uv run ruff format --check . - name: Minimize uv cache run: uv cache prune --ci typecheck: if: "!startsWith(github.event.head_commit.message, 'chore: release a new version') && !startsWith(github.event.head_commit.message, 'bump:')" runs-on: ubuntu-latest name: Type check (mypy) steps: - uses: actions/checkout@v4 - name: Install uv uses: astral-sh/setup-uv@v4 - name: Restore uv cache uses: actions/cache@v4 with: path: /tmp/.uv-cache key: uv-${{ runner.os }}-${{ hashFiles('uv.lock') }} restore-keys: | uv-${{ runner.os }}- - name: Set up Python run: uv python install 3.12 - name: Install dependencies run: uv sync --extra dev - name: Run mypy run: uv run mypy app.py - name: Minimize uv cache run: uv cache prune --ci test: if: "!startsWith(github.event.head_commit.message, 'chore: release a new version') && !startsWith(github.event.head_commit.message, 'bump:')" runs-on: ubuntu-latest name: Test (pytest) steps: - uses: actions/checkout@v4 - name: Install uv uses: astral-sh/setup-uv@v4 - name: Restore uv cache uses: actions/cache@v4 with: path: /tmp/.uv-cache key: uv-${{ runner.os }}-${{ hashFiles('uv.lock') }} restore-keys: | uv-${{ runner.os }}- - name: Set up Python run: uv python install 3.12 - name: Install dependencies run: uv sync --extra dev - name: Run tests with coverage run: uv run pytest -v --cov=app --cov-report=term-missing - name: Minimize uv cache run: uv cache prune --ci