From 8a6b72a909b848e33c5068822ae444ff68b2337c Mon Sep 17 00:00:00 2001 From: Daniel Chalef <131175+danielchalef@users.noreply.github.com> Date: Sat, 11 Oct 2025 16:43:29 -0700 Subject: [PATCH] Separate unit and integration tests to allow external contributors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This change addresses the issue where external contributor PRs fail unit tests because GitHub secrets (API keys) are unavailable to external PRs for security reasons. Changes: - Split GitHub Actions workflow into two jobs: - unit-tests: Runs without API keys or database connections (all PRs) - integration-tests: Runs only for internal contributors with API keys - Renamed test_bge_reranker_client.py to test_bge_reranker_client_int.py to follow naming convention for integration tests - Unit tests now skip all tests requiring databases or API keys - Integration tests properly separated into: - Database integration tests (no API keys) - API integration tests (requires OPENAI_API_KEY, etc.) The unit-tests job now: - Runs for all PRs (internal and external) - Requires no GitHub secrets - Disables all database drivers - Excludes all integration test files - Passes 93 tests successfully The integration-tests job: - Only runs for internal contributors (same repo PRs or pushes to main) - Has access to GitHub secrets - Tests database operations and API integrations - Uses conditional: github.event.pull_request.head.repo.full_name == github.repository 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .github/workflows/unit_tests.yml | 64 +++++++++++++++---- ...ent.py => test_bge_reranker_client_int.py} | 0 2 files changed, 52 insertions(+), 12 deletions(-) rename tests/cross_encoder/{test_bge_reranker_client.py => test_bge_reranker_client_int.py} (100%) diff --git a/.github/workflows/unit_tests.yml b/.github/workflows/unit_tests.yml index cf1053a1..86e3bea9 100644 --- a/.github/workflows/unit_tests.yml +++ b/.github/workflows/unit_tests.yml @@ -10,8 +10,44 @@ permissions: contents: read jobs: - test: + unit-tests: runs-on: depot-ubuntu-22.04 + steps: + - uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.10" + - name: Install uv + uses: astral-sh/setup-uv@v3 + with: + version: "latest" + - name: Install dependencies + run: uv sync --all-extras + - name: Run unit tests (no API keys required) + env: + PYTHONPATH: ${{ github.workspace }} + DISABLE_NEPTUNE: 1 + DISABLE_NEO4J: 1 + DISABLE_FALKORDB: 1 + DISABLE_KUZU: 1 + run: | + uv run pytest tests/ -m "not integration" \ + --ignore=tests/test_graphiti_int.py \ + --ignore=tests/test_graphiti_mock.py \ + --ignore=tests/test_node_int.py \ + --ignore=tests/test_edge_int.py \ + --ignore=tests/test_entity_exclusion_int.py \ + --ignore=tests/driver/ \ + --ignore=tests/llm_client/test_anthropic_client_int.py \ + --ignore=tests/utils/maintenance/ \ + --ignore=tests/cross_encoder/test_bge_reranker_client_int.py \ + --ignore=tests/evals/ + + integration-tests: + runs-on: depot-ubuntu-22.04 + # Only run integration tests for internal contributors (push to main or PRs from same repo) + if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository environment: name: development services: @@ -43,15 +79,6 @@ jobs: run: sudo apt-get update && sudo apt-get install -y redis-tools - name: Install dependencies run: uv sync --all-extras - - name: Run non-integration tests - env: - PYTHONPATH: ${{ github.workspace }} - NEO4J_URI: bolt://localhost:7687 - NEO4J_USER: neo4j - NEO4J_PASSWORD: testpass - DISABLE_NEPTUNE: 1 - run: | - uv run pytest -m "not integration" - name: Wait for FalkorDB run: | timeout 60 bash -c 'until redis-cli -h localhost -p 6379 ping; do sleep 1; done' @@ -66,7 +93,18 @@ jobs: DISABLE_NEO4J: 1 run: | uv run pytest tests/driver/test_falkordb_driver.py - - name: Run Neo4j integration tests + - name: Run database integration tests (no API keys required) + env: + PYTHONPATH: ${{ github.workspace }} + NEO4J_URI: bolt://localhost:7687 + NEO4J_USER: neo4j + NEO4J_PASSWORD: testpass + FALKORDB_HOST: localhost + FALKORDB_PORT: 6379 + DISABLE_NEPTUNE: 1 + run: | + uv run pytest tests/test_graphiti_mock.py tests/utils/maintenance/test_bulk_utils.py tests/utils/maintenance/test_edge_operations.py tests/utils/maintenance/test_node_operations.py + - name: Run API integration tests (requires API keys) env: PYTHONPATH: ${{ github.workspace }} NEO4J_URI: bolt://localhost:7687 @@ -75,5 +113,7 @@ jobs: FALKORDB_HOST: localhost FALKORDB_PORT: 6379 OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} + ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} + GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }} run: | - uv run pytest tests/test_*_int.py -k "neo4j" + uv run pytest tests/test_*_int.py tests/llm_client/test_anthropic_client_int.py tests/utils/maintenance/test_temporal_operations_int.py tests/cross_encoder/test_bge_reranker_client_int.py diff --git a/tests/cross_encoder/test_bge_reranker_client.py b/tests/cross_encoder/test_bge_reranker_client_int.py similarity index 100% rename from tests/cross_encoder/test_bge_reranker_client.py rename to tests/cross_encoder/test_bge_reranker_client_int.py