name: CI on: push: branches: [main] pull_request: branches: [main] jobs: ruff: name: Ruff runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install uv uses: astral-sh/setup-uv@v5 with: version: "0.6.12" enable-cache: true cache-dependency-glob: "uv.lock" - name: Set up Python uses: actions/setup-python@v5 with: python-version-file: ".python-version" - name: Install dependencies run: uv sync --all-extras --dev - name: Lint with Ruff run: uv run ruff check . mypy: name: MyPy runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install uv uses: astral-sh/setup-uv@v5 with: version: "0.6.12" enable-cache: true cache-dependency-glob: "uv.lock" - name: Set up Python uses: actions/setup-python@v5 with: python-version-file: ".python-version" - name: Install dependencies run: uv sync --all-extras --dev - name: Type check with MyPy run: uv run mypy . test: name: Test Python ${{ matrix.python-version }} runs-on: ubuntu-latest strategy: fail-fast: false matrix: python-version: ["3.10", "3.11", "3.12"] steps: - uses: actions/checkout@v4 - name: Install uv uses: astral-sh/setup-uv@v5 with: version: "0.6.12" python-version: ${{ matrix.python-version }} enable-cache: true cache-dependency-glob: "uv.lock" - name: Install dependencies run: uv sync --all-extras --dev - name: Run tests run: uv run pytest --cov=fastapi_mcp --cov-report=xml - name: Upload coverage to Codecov uses: codecov/codecov-action@v5 with: token: ${{ secrets.CODECOV_TOKEN }} fail_ci_if_error: false