The original workflow used -k "neo4j" to filter tests. Kuzu requires downloading FTS extensions from external URLs which fails in CI. Use -k "neo4j or falkordb" to run tests against available databases while skipping Kuzu parametrized tests. This maintains the same test coverage as the original workflow while properly separating unit, database, and API integration tests. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
158 lines
5.7 KiB
YAML
158 lines
5.7 KiB
YAML
name: Unit Tests
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
pull_request:
|
|
branches: [main]
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
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 external dependencies)
|
|
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/
|
|
|
|
database-integration-tests:
|
|
runs-on: depot-ubuntu-22.04
|
|
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 -k "neo4j or falkordb"
|
|
|
|
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
|
|
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 API integration tests (requires API keys)
|
|
env:
|
|
PYTHONPATH: ${{ github.workspace }}
|
|
NEO4J_URI: bolt://localhost:7687
|
|
NEO4J_USER: neo4j
|
|
NEO4J_PASSWORD: testpass
|
|
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 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 -k "neo4j or falkordb"
|