name: Tests env: # enable colored output PY_COLORS: 1 on: push: branches: ["main"] paths: - "src/**" - "tests/**" - "uv.lock" - "pyproject.toml" - ".github/workflows/**" # run on all pull requests because these checks are required and will block merges otherwise pull_request: workflow_dispatch: permissions: contents: read jobs: run_tests: name: "Run tests: Python ${{ matrix.python-version }} on ${{ matrix.os }}" runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, windows-latest] python-version: ["3.10"] fail-fast: false timeout-minutes: 10 steps: - uses: actions/checkout@v5 - name: Install uv uses: astral-sh/setup-uv@v7 with: enable-cache: true cache-dependency-glob: "uv.lock" python-version: ${{ matrix.python-version }} - name: Install FastMCP # run with upgrade to always test against the latest compatible versions run: uv sync --upgrade - name: Run tests (excluding integration and client_process) run: | if [ "${{ matrix.os }}" = "windows-latest" ]; then uv run pytest --inline-snapshot=disable tests -m "not integration and not client_process" else uv run pytest --inline-snapshot=disable tests -m "not integration and not client_process" --numprocesses auto --maxprocesses 4 --dist worksteal fi shell: bash - name: Run client process tests separately run: uv run pytest --inline-snapshot=disable tests -m "client_process" -x run_integration_tests: name: "Run integration tests" runs-on: ubuntu-latest timeout-minutes: 10 steps: - uses: actions/checkout@v5 - name: Install uv uses: astral-sh/setup-uv@v7 with: enable-cache: true cache-dependency-glob: "uv.lock" python-version: "3.10" - name: Install FastMCP # run with upgrade to always test against the latest compatible versions run: uv sync --upgrade - name: Run integration tests # use longer per-test timeout than the default 3s run: uv run pytest tests -m "integration" --timeout=15 --numprocesses auto --maxprocesses 2 --dist worksteal env: FASTMCP_GITHUB_TOKEN: ${{ secrets.FASTMCP_GITHUB_TOKEN }} FASTMCP_TEST_AUTH_GITHUB_CLIENT_ID: ${{ secrets.FASTMCP_TEST_AUTH_GITHUB_CLIENT_ID }} FASTMCP_TEST_AUTH_GITHUB_CLIENT_SECRET: ${{ secrets.FASTMCP_TEST_AUTH_GITHUB_CLIENT_SECRET }}