From 0590d597a3bb07160be3254e255c6bcf4504e5d9 Mon Sep 17 00:00:00 2001 From: nesquena-hermes Date: Fri, 8 May 2026 20:26:11 +0000 Subject: [PATCH] ci: install mcp + pytest-asyncio in CI; importorskip in test_mcp_server.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CI failed on stage-323 because: 1. mcp_server.py imports the 'mcp' package (optional runtime dep) — only users who actually run the MCP integration install it. CI runs with stdlib-only deps (pyyaml + pytest + pytest-timeout). 2. tests/test_mcp_server.py uses pytest.mark.asyncio which requires pytest-asyncio — not installed in CI. Fix: - Add pytest-asyncio to CI install line. - Try-install mcp; if it fails (Python 3.13 wheel issues, etc.) the test module uses pytest.importorskip and skips cleanly without breaking the matrix. - tests/test_mcp_server.py: add module-level importorskip for both 'mcp' and 'pytest_asyncio' as a safety net. Local: 4947/4947 still pass after change. --- .github/workflows/tests.yml | 9 ++++++++- tests/test_mcp_server.py | 11 +++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index b16b1d57..c7649620 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -24,7 +24,14 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip - pip install pyyaml>=6.0 pytest pytest-timeout + pip install pyyaml>=6.0 pytest pytest-timeout pytest-asyncio + # Install the `mcp` package so tests/test_mcp_server.py runs in CI. + # The package is an optional runtime dep of mcp_server.py — users + # who run the MCP integration install it themselves; CI installs + # it so test coverage exists. If mcp install fails (Python 3.13 + # wheel not yet available, etc.), tests/test_mcp_server.py uses + # importorskip and the matrix stays green. + pip install mcp || echo "mcp install failed — test_mcp_server.py will importorskip" - name: Run tests run: pytest tests/ -v --timeout=60 diff --git a/tests/test_mcp_server.py b/tests/test_mcp_server.py index 291a1d01..98e2a0b2 100644 --- a/tests/test_mcp_server.py +++ b/tests/test_mcp_server.py @@ -17,6 +17,17 @@ from pathlib import Path import pytest +# Skip the entire module when the optional `mcp` package isn't installed. +# CI runs with stdlib-only deps (pyyaml + pytest + pytest-timeout), and the +# `mcp` package is only required for users who actually run the MCP server. +# Locally with `pip install mcp pytest-asyncio` these tests run; on CI they +# skip cleanly without breaking the matrix. +pytest.importorskip("mcp", reason="mcp package not installed (optional MCP server dep)") + +# pytest-asyncio is also optional but always installed alongside mcp tests +# in our local runs. If absent, importorskip the asyncio plugin gracefully. +pytest.importorskip("pytest_asyncio", reason="pytest-asyncio required for MCP server tests") + pytestmark = pytest.mark.asyncio # ── Ensure repo root on path ──────────────────────────────────────────────