139 lines
4.8 KiB
YAML
139 lines
4.8 KiB
YAML
name: 'Neo4j-GraphRAG Scheduled E2E Tests'
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
schedule:
|
|
- cron: '0 6 * * 1,4' # Mon, Thu
|
|
push:
|
|
branches:
|
|
- main
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref_name }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
e2e-tests:
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
python-version: [ '3.10', '3.11', '3.12', '3.13', '3.14']
|
|
neo4j-tag:
|
|
- 'community'
|
|
- 'enterprise'
|
|
- 'latest'
|
|
steps:
|
|
- name: Check out repository code
|
|
uses: actions/checkout@v4
|
|
- name: Free up disk space (ubuntu-latest)
|
|
run: |
|
|
sudo rm -rf /usr/local/lib/android \
|
|
/usr/share/dotnet \
|
|
/opt/ghc \
|
|
/opt/hostedtoolcache
|
|
docker system prune -af || true
|
|
docker volume prune -f || true
|
|
docker builder prune -af || true
|
|
sudo apt-get clean || true
|
|
df -h
|
|
- name: Create Docker network
|
|
run: docker network create test-network
|
|
- name: Start t2v-transformers
|
|
run: |
|
|
for i in 1 2 3; do
|
|
docker pull cr.weaviate.io/semitechnologies/transformers-inference:sentence-transformers-all-MiniLM-L6-v2 \
|
|
&& break || sleep $((30 + RANDOM % 30))
|
|
done
|
|
docker run -d --name t2v-transformers \
|
|
--network test-network \
|
|
-e ENABLE_CUDA=0 \
|
|
cr.weaviate.io/semitechnologies/transformers-inference:sentence-transformers-all-MiniLM-L6-v2
|
|
- name: Start Weaviate
|
|
run: |
|
|
for i in 1 2 3; do
|
|
docker pull cr.weaviate.io/semitechnologies/weaviate:1.27.0 \
|
|
&& break || sleep $((30 + RANDOM % 30))
|
|
done
|
|
docker run -d --name weaviate \
|
|
--network test-network \
|
|
-p 8080:8080 -p 50051:50051 \
|
|
-e TRANSFORMERS_INFERENCE_API='http://t2v-transformers:8080' \
|
|
-e AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED='true' \
|
|
-e DEFAULT_VECTORIZER_MODULE='text2vec-transformers' \
|
|
-e ENABLE_MODULES='text2vec-transformers' \
|
|
-e CLUSTER_HOSTNAME='node1' \
|
|
cr.weaviate.io/semitechnologies/weaviate:1.27.0
|
|
- name: Start Neo4j
|
|
run: |
|
|
for i in 1 2 3; do
|
|
docker pull neo4j:${{ matrix.neo4j-tag }} \
|
|
&& break || sleep $((30 + RANDOM % 30))
|
|
done
|
|
docker run -d --name neo4j \
|
|
--network test-network \
|
|
-p 7687:7687 -p 7474:7474 \
|
|
-e NEO4J_AUTH=neo4j/password \
|
|
-e NEO4J_ACCEPT_LICENSE_AGREEMENT=eval \
|
|
-e NEO4J_PLUGINS='["apoc"]' \
|
|
neo4j:${{ matrix.neo4j-tag }}
|
|
- name: Start Qdrant
|
|
run: |
|
|
for i in 1 2 3; do
|
|
docker pull qdrant/qdrant \
|
|
&& break || sleep $((30 + RANDOM % 30))
|
|
done
|
|
docker run -d --name qdrant \
|
|
--network test-network \
|
|
-p 6333:6333 \
|
|
qdrant/qdrant
|
|
- name: Set up Python ${{ matrix.python-version }}
|
|
uses: actions/setup-python@v5
|
|
with:
|
|
python-version: ${{ matrix.python-version }}
|
|
- name: Set up uv
|
|
uses: astral-sh/setup-uv@v3
|
|
- name: Load cached venv
|
|
id: cached-venv
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: .venv
|
|
key: ${{ runner.os }}-venv-${{ matrix.python-version }}-${{ hashFiles('**/uv.lock') }}
|
|
- name: Install dependencies
|
|
if: steps.cached-venv.outputs.cache-hit != 'true'
|
|
run: uv sync --frozen --all-extras --group dev
|
|
- name: Show disk usage after dependency installation
|
|
run: |
|
|
df -h
|
|
- name: Wait for Weaviate to start
|
|
shell: bash
|
|
run: |
|
|
set +e
|
|
count=0; until curl -s --fail localhost:8080/v1/.well-known/ready; do ((count++)); [ $count -ge 10 ] && echo "Reached maximum retry limit" && exit 1; sleep 15; done
|
|
- name: Wait for Neo4j to be ready
|
|
shell: bash
|
|
run: |
|
|
echo "Waiting for Neo4j to be ready..."
|
|
count=0
|
|
until curl -s --fail http://localhost:7474 > /dev/null 2>&1; do
|
|
((count++))
|
|
if [ $count -ge 30 ]; then
|
|
echo "Neo4j failed to start within timeout"
|
|
docker logs neo4j
|
|
exit 1
|
|
fi
|
|
echo "Waiting for Neo4j... (attempt $count/30)"
|
|
sleep 5
|
|
done
|
|
echo "Neo4j is ready!"
|
|
- name: Run tests
|
|
shell: bash
|
|
run: |
|
|
if [[ "${{ matrix.neo4j-tag }}" == "latest" || "${{ matrix.neo4j-tag }}" == "community" ]]; then
|
|
uv run pytest -m 'not enterprise_only' ./tests/e2e
|
|
else
|
|
uv run pytest ./tests/e2e
|
|
fi
|
|
- name: Prune uv cache
|
|
if: always()
|
|
run: uv cache prune --ci
|