From 6a3dce5fd0dc553b650efb345b86c24b4d0fdecd Mon Sep 17 00:00:00 2001 From: Daniel Chalef <131175+danielchalef@users.noreply.github.com> Date: Sat, 11 Oct 2025 19:05:15 -0700 Subject: [PATCH] Separate database tests from API integration tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Restructured the workflow into three distinct jobs: 1. unit-tests: Runs on all PRs, no external dependencies (93 tests) - No API keys required - No database connections required - Fast execution 2. database-integration-tests: Runs on all PRs with databases (NEW) - Requires Neo4j and FalkorDB services - No API keys required - Tests database operations without external API calls - Includes: test_graphiti_mock.py, test_falkordb_driver.py, and utils/maintenance tests 3. api-integration-tests: Runs only for internal contributors - Requires API keys (OPENAI_API_KEY, ANTHROPIC_API_KEY, etc.) - Conditional execution for same-repo PRs only - Tests that make actual API calls to LLM providers This ensures external contributor PRs can run both unit tests and database integration tests successfully, while API integration tests requiring secrets only run for internal contributors. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .github/workflows/unit_tests.yml | 83 +++++++++++++++++++++++--------- 1 file changed, 61 insertions(+), 22 deletions(-) diff --git a/.github/workflows/unit_tests.yml b/.github/workflows/unit_tests.yml index 86e3bea9..8c70ee74 100644 --- a/.github/workflows/unit_tests.yml +++ b/.github/workflows/unit_tests.yml @@ -24,7 +24,7 @@ jobs: version: "latest" - name: Install dependencies run: uv sync --all-extras - - name: Run unit tests (no API keys required) + - name: Run unit tests (no external dependencies) env: PYTHONPATH: ${{ github.workspace }} DISABLE_NEPTUNE: 1 @@ -44,9 +44,67 @@ jobs: --ignore=tests/cross_encoder/test_bge_reranker_client_int.py \ --ignore=tests/evals/ - integration-tests: + database-integration-tests: runs-on: depot-ubuntu-22.04 - # Only run integration tests for internal contributors (push to main or PRs from same repo) + services: + falkordb: + image: falkordb/falkordb:latest + ports: + - 6379:6379 + options: --health-cmd "redis-cli ping" --health-interval 10s --health-timeout 5s --health-retries 5 + neo4j: + image: neo4j:5.26-community + ports: + - 7687:7687 + - 7474:7474 + env: + NEO4J_AUTH: neo4j/testpass + NEO4J_PLUGINS: '["apoc"]' + options: --health-cmd "cypher-shell -u neo4j -p testpass 'RETURN 1'" --health-interval 10s --health-timeout 5s --health-retries 10 + 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 redis-cli for FalkorDB health check + run: sudo apt-get update && sudo apt-get install -y redis-tools + - name: Install dependencies + run: uv sync --all-extras + - name: Wait for FalkorDB + run: | + timeout 60 bash -c 'until redis-cli -h localhost -p 6379 ping; do sleep 1; done' + - name: Wait for Neo4j + run: | + timeout 60 bash -c 'until wget -O /dev/null http://localhost:7474 >/dev/null 2>&1; do sleep 1; done' + - name: Run FalkorDB driver tests + env: + PYTHONPATH: ${{ github.workspace }} + FALKORDB_HOST: localhost + FALKORDB_PORT: 6379 + DISABLE_NEO4J: 1 + DISABLE_NEPTUNE: 1 + run: | + uv run pytest tests/driver/test_falkordb_driver.py + - name: Run database integration tests + 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 + + api-integration-tests: + runs-on: depot-ubuntu-22.04 + # Only run API 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 @@ -85,25 +143,6 @@ jobs: - name: Wait for Neo4j run: | timeout 60 bash -c 'until wget -O /dev/null http://localhost:7474 >/dev/null 2>&1; do sleep 1; done' - - name: Run FalkorDB integration tests - env: - PYTHONPATH: ${{ github.workspace }} - FALKORDB_HOST: localhost - FALKORDB_PORT: 6379 - DISABLE_NEO4J: 1 - run: | - uv run pytest tests/driver/test_falkordb_driver.py - - 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 }}