ruvector/crates/ruvector-postgres/docker/docker-compose.integration.yml
rUv 893c93ab3e feat(ruvector-postgres): Complete v2.0.0 with 148 SQL functions
## Summary
Complete RuVector-Postgres v2 implementation with all major features:
- 148 pg_extern SQL functions across 27 source files
- Docker Hub publication ready with multi-arch builds (PG14-17)
- Full pgvector drop-in compatibility verified

## New Features
- **Hybrid Search** (7 functions): BM25 + vector fusion with RRF/linear/learned
- **Multi-Tenancy** (17 functions): Tenant isolation, RLS, quotas
- **Self-Healing** (23 functions): Problem detection, remediation strategies
- **Integrity Control** (4 functions): Mincut gating, contracted graphs
- **Self-Learning** (10 functions): Query trajectory tracking, optimization

## Infrastructure
- GitHub Actions workflow for Docker Hub publication
- CI workflow for testing PG14-17
- Integration test Docker setup with baseline testing
- Benchmark suite for e2e, hybrid, integrity testing

## Files Changed
- New: src/healing/, src/hybrid/, src/integrity/, src/tenancy/, src/workers/
- New: sql/ruvector--2.0.0.sql (SQL migration)
- New: docker/publish-dockerhub.sh, docker-compose.integration.yml
- Updated: Dockerfile for PG17 default, multi-arch builds
- Updated: HNSW/IVFFlat index access methods with full pgrx AM support

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 23:41:29 +00:00

137 lines
3.7 KiB
YAML

version: '3.8'
# Docker Compose configuration for RuVector Postgres Integration Tests
# Provides isolated environment for comprehensive test execution
services:
# PostgreSQL with RuVector extension
postgres:
build:
context: ../../..
dockerfile: crates/ruvector-postgres/docker/Dockerfile
args:
PG_VERSION: ${PG_VERSION:-17}
container_name: ruvector-postgres-integration
ports:
- "${POSTGRES_PORT:-5433}:5432"
environment:
POSTGRES_USER: ruvector
POSTGRES_PASSWORD: ruvector
POSTGRES_DB: ruvector_test
POSTGRES_INITDB_ARGS: "--data-checksums"
# Performance tuning for tests
POSTGRES_SHARED_BUFFERS: 256MB
POSTGRES_EFFECTIVE_CACHE_SIZE: 512MB
POSTGRES_WORK_MEM: 64MB
POSTGRES_MAINTENANCE_WORK_MEM: 128MB
volumes:
- postgres_data:/var/lib/postgresql/data
- ./init-integration.sql:/docker-entrypoint-initdb.d/01-init.sql
- ./test_sql:/test_sql:ro
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ruvector -d ruvector_test"]
interval: 5s
timeout: 5s
retries: 10
start_period: 30s
networks:
- integration-network
deploy:
resources:
limits:
memory: 2G
reservations:
memory: 512M
# Test runner container with Rust toolchain
test-runner:
build:
context: ../../..
dockerfile: crates/ruvector-postgres/docker/Dockerfile.integration-test
container_name: ruvector-integration-runner
depends_on:
postgres:
condition: service_healthy
environment:
DATABASE_URL: postgres://ruvector:ruvector@postgres:5432/ruvector_test
RUST_LOG: ${RUST_LOG:-info}
RUST_BACKTRACE: 1
TEST_TIMEOUT: ${TEST_TIMEOUT:-600}
volumes:
- ../../..:/app:ro
- cargo_cache:/usr/local/cargo/registry
- target_cache:/app/target
- test_results:/app/test-results
networks:
- integration-network
working_dir: /app/crates/ruvector-postgres
command: >
cargo test
--release
--features pg${PG_VERSION:-17},graph-complete
--test integration
--
--test-threads=1
--nocapture
# Performance benchmark runner
benchmark:
build:
context: ../../..
dockerfile: crates/ruvector-postgres/docker/Dockerfile.integration-test
container_name: ruvector-benchmark-runner
depends_on:
postgres:
condition: service_healthy
environment:
DATABASE_URL: postgres://ruvector:ruvector@postgres:5432/ruvector_test
RUST_LOG: info
RUST_BACKTRACE: 1
volumes:
- ../../..:/app:ro
- cargo_cache:/usr/local/cargo/registry
- target_cache:/app/target
- test_results:/app/test-results
networks:
- integration-network
working_dir: /app/crates/ruvector-postgres
command: >
cargo bench
--features pg${PG_VERSION:-17},graph-complete
profiles:
- benchmark
# pgvector reference container for compatibility testing
pgvector-reference:
image: pgvector/pgvector:pg${PG_VERSION:-17}
container_name: pgvector-reference
ports:
- "5434:5432"
environment:
POSTGRES_USER: pgvector
POSTGRES_PASSWORD: pgvector
POSTGRES_DB: pgvector_test
healthcheck:
test: ["CMD-SHELL", "pg_isready -U pgvector -d pgvector_test"]
interval: 5s
timeout: 5s
retries: 5
networks:
- integration-network
profiles:
- compatibility
volumes:
postgres_data:
name: ruvector-integration-pg-data
cargo_cache:
name: ruvector-integration-cargo-cache
target_cache:
name: ruvector-integration-target-cache
test_results:
name: ruvector-integration-results
networks:
integration-network:
driver: bridge
name: ruvector-integration-network