Resolves TOO-201 Documentation PR for this is here: https://github.com/ArcadeAI/docs/pull/626 <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > Changes how environment variables/secrets are discovered and loaded, which can subtly alter runtime behavior depending on directory structure and existing env vars; bounded traversal and added tests reduce but don’t eliminate this risk. > > **Overview** > **Improves `.env` discovery across the MCP server and CLI.** Adds `find_env_file()` (bounded by the nearest `pyproject.toml` by default) and switches settings loading, `arcade deploy`, `arcade configure` stdio env injection, and provider API-key resolution to use it. > > Updates dev reload to also watch the discovered `.env` even when it lives outside the current working directory, adjusts `deploy --secrets all` to only run when a `.env` was found, and moves the minimal scaffold’s `.env.example` to the project root with updated tests/integration checks. Version bumps align examples and top-level deps with `arcade-mcp-server` `1.17.4` and `arcade-mcp` `1.11.2`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 40cff1738c14674ce01f09fd325ece9c874cd072. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
63 lines
1.7 KiB
Python
63 lines
1.7 KiB
Python
"""Global test configuration for all tests.
|
|
|
|
This conftest.py is at the root of the tests directory and applies to all test modules.
|
|
"""
|
|
|
|
import os
|
|
|
|
import pytest
|
|
|
|
# Check if eval dependencies are available
|
|
try:
|
|
import anthropic # noqa: F401
|
|
import openai # noqa: F401
|
|
|
|
EVALS_DEPS_AVAILABLE = True
|
|
except ImportError:
|
|
EVALS_DEPS_AVAILABLE = False
|
|
|
|
|
|
def pytest_configure(config):
|
|
"""Register custom markers."""
|
|
config.addinivalue_line(
|
|
"markers", "evals: marks tests that require eval dependencies (openai, anthropic, mcp)"
|
|
)
|
|
|
|
|
|
def pytest_collection_modifyitems(config, items):
|
|
"""Auto-skip evals tests if dependencies not available.
|
|
|
|
Tests are detected as evals tests if they have the @pytest.mark.evals marker.
|
|
|
|
"""
|
|
skip_evals = pytest.mark.skip(
|
|
reason="Evals dependencies not installed. Install with: uv tool install 'arcade-mcp[evals]'"
|
|
)
|
|
|
|
for item in items:
|
|
# Check if test has the @pytest.mark.evals marker
|
|
if item.get_closest_marker("evals") and not EVALS_DEPS_AVAILABLE:
|
|
item.add_marker(skip_evals)
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def isolate_environment():
|
|
"""Isolate environment variables for each test.
|
|
|
|
This fixture captures the entire environment before a test and restores it
|
|
after. This ensures that environment variables set by load_dotenv() or any
|
|
other mechanism during tests don't leak into subsequent tests.
|
|
|
|
This also disables CLI usage tracking to prevent test runs from sending
|
|
analytics events to PostHog.
|
|
"""
|
|
original_env = os.environ.copy()
|
|
|
|
# Disable tracking
|
|
os.environ["ARCADE_USAGE_TRACKING"] = "0"
|
|
|
|
yield
|
|
|
|
# Restore the original environment
|
|
os.environ.clear()
|
|
os.environ.update(original_env)
|