Separate unit and integration tests to allow external contributors

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 <noreply@anthropic.com>
This commit is contained in:
Daniel Chalef 2025-10-11 16:43:29 -07:00
parent 0e2760d1ce
commit 8a6b72a909
2 changed files with 52 additions and 12 deletions

View file

@ -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