diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml
index 7c0975ff0..8d3c16545 100644
--- a/.github/workflows/continuous-integration.yml
+++ b/.github/workflows/continuous-integration.yml
@@ -41,7 +41,9 @@ jobs:
ARTIFACTORY_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }}
ARTIFACTORY_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }}
OLLAMA_TESTS_ENABLED: "false"
- run: mvn -s settings.xml -Pintegration-tests -Pjavadoc -Dfailsafe.rerunFailingTestsCount=3 -DOLLAMA_TESTS_ENABLED=false --batch-mode --update-snapshots deploy
+ run: |
+ mvn -s settings.xml -Pintegration-tests -Pjavadoc -Dfailsafe.rerunFailingTestsCount=3 \
+ --batch-mode --update-snapshots deploy
- name: Generate Java docs
run: mvn javadoc:aggregate
@@ -73,3 +75,36 @@ jobs:
unzip spring-ai-$PROJECT_VERSION-docs.zip
ssh -i $HOME/.ssh/key $DOCS_USERNAME@$DOCS_HOST "cd $DOCS_PATH && mkdir -p $PROJECT_VERSION"
scp -i $HOME/.ssh/key -r api $DOCS_USERNAME@$DOCS_HOST:$DOCS_PATH/$PROJECT_VERSION
+
+
+ # The docker-compose and testcontainers modules will be compiled and run in a parallel job
+ container-tests:
+ name: Container integration tests
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout source code
+ uses: actions/checkout@v4
+
+ - name: Set up JDK 17
+ uses: actions/setup-java@v4
+ with:
+ java-version: '17'
+ distribution: 'temurin'
+ cache: 'maven'
+
+ - name: Configure Testcontainers
+ run: |
+ echo "testcontainers.reuse.enable=true" > $HOME/.testcontainers.properties
+
+ - name: Run Container Integration Tests
+ env:
+ OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
+ SPRING_AI_OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
+ ARTIFACTORY_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }}
+ ARTIFACTORY_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }}
+ run: |
+ mvn -s settings.xml -Pintegration-tests verify \
+ -Dskip.docker-compose=false \
+ -Dskip.testcontainers=false \
+ -pl spring-ai-spring-boot-docker-compose,spring-ai-spring-boot-testcontainers \
+ -am --batch-mode
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 6af6e0d0c..d76d0f4ed 100644
--- a/pom.xml
+++ b/pom.xml
@@ -256,6 +256,31 @@
true
9.3
true
+
+
+ true
+ true
+ true
+ false
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ true
+ true
+ true
+
+
+ true
+ true
@@ -616,6 +641,31 @@
+
+
+ full-vectorstore-tests
+
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+
+
test-coverage
diff --git a/spring-ai-spring-boot-docker-compose/pom.xml b/spring-ai-spring-boot-docker-compose/pom.xml
index 62d0d0de8..9b42b8155 100644
--- a/spring-ai-spring-boot-docker-compose/pom.xml
+++ b/spring-ai-spring-boot-docker-compose/pom.xml
@@ -36,6 +36,7 @@
+ false
@@ -176,4 +177,24 @@
+
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+ ${maven-failsafe-plugin.version}
+
+ ${skip.docker-compose}
+
+
+
+
+ integration-test
+ verify
+
+
+
+
+
+
diff --git a/spring-ai-spring-boot-testcontainers/pom.xml b/spring-ai-spring-boot-testcontainers/pom.xml
index f60e6b34d..776148030 100644
--- a/spring-ai-spring-boot-testcontainers/pom.xml
+++ b/spring-ai-spring-boot-testcontainers/pom.xml
@@ -37,6 +37,7 @@
+ false
@@ -267,4 +268,25 @@
+
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+ ${maven-failsafe-plugin.version}
+
+ ${skip.testcontainers}
+
+
+
+
+ integration-test
+ verify
+
+
+
+
+
+
+
diff --git a/vector-stores/spring-ai-azure-cosmos-db-store/pom.xml b/vector-stores/spring-ai-azure-cosmos-db-store/pom.xml
index ca93a9ece..4e9617591 100644
--- a/vector-stores/spring-ai-azure-cosmos-db-store/pom.xml
+++ b/vector-stores/spring-ai-azure-cosmos-db-store/pom.xml
@@ -94,4 +94,24 @@
+
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+ ${maven-failsafe-plugin.version}
+
+ ${skip.vectorstore.azure-cosmos-db}
+
+
+
+
+ integration-test
+ verify
+
+
+
+
+
+
diff --git a/vector-stores/spring-ai-azure-store/pom.xml b/vector-stores/spring-ai-azure-store/pom.xml
index 25bf7e5f1..7d2ce45c3 100644
--- a/vector-stores/spring-ai-azure-store/pom.xml
+++ b/vector-stores/spring-ai-azure-store/pom.xml
@@ -103,5 +103,24 @@
-
+
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+ ${maven-failsafe-plugin.version}
+
+ ${skip.vectorstore.azure}
+
+
+
+
+ integration-test
+ verify
+
+
+
+
+
+
diff --git a/vector-stores/spring-ai-cassandra-store/pom.xml b/vector-stores/spring-ai-cassandra-store/pom.xml
index 1032f3635..9f457aa30 100644
--- a/vector-stores/spring-ai-cassandra-store/pom.xml
+++ b/vector-stores/spring-ai-cassandra-store/pom.xml
@@ -93,5 +93,24 @@
test
-
+
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+ ${maven-failsafe-plugin.version}
+
+ ${skip.vectorstore.cassandra}
+
+
+
+
+ integration-test
+ verify
+
+
+
+
+
+
diff --git a/vector-stores/spring-ai-chroma-store/pom.xml b/vector-stores/spring-ai-chroma-store/pom.xml
index 3e7b35c4a..0adde0d8b 100644
--- a/vector-stores/spring-ai-chroma-store/pom.xml
+++ b/vector-stores/spring-ai-chroma-store/pom.xml
@@ -89,4 +89,24 @@
+
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+ ${maven-failsafe-plugin.version}
+
+ ${skip.vectorstore.chroma}
+
+
+
+
+ integration-test
+ verify
+
+
+
+
+
+
diff --git a/vector-stores/spring-ai-coherence-store/pom.xml b/vector-stores/spring-ai-coherence-store/pom.xml
index 1a4e9dc5a..f90928927 100644
--- a/vector-stores/spring-ai-coherence-store/pom.xml
+++ b/vector-stores/spring-ai-coherence-store/pom.xml
@@ -80,4 +80,24 @@
+
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+ ${maven-failsafe-plugin.version}
+
+ ${skip.vectorstore.coherence}
+
+
+
+
+ integration-test
+ verify
+
+
+
+
+
+
diff --git a/vector-stores/spring-ai-elasticsearch-store/pom.xml b/vector-stores/spring-ai-elasticsearch-store/pom.xml
index 440dc99b7..5783fc3ca 100644
--- a/vector-stores/spring-ai-elasticsearch-store/pom.xml
+++ b/vector-stores/spring-ai-elasticsearch-store/pom.xml
@@ -96,4 +96,24 @@
+
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+ ${maven-failsafe-plugin.version}
+
+ ${skip.vectorstore.elasticsearch}
+
+
+
+
+ integration-test
+ verify
+
+
+
+
+
+
diff --git a/vector-stores/spring-ai-gemfire-store/pom.xml b/vector-stores/spring-ai-gemfire-store/pom.xml
index 37d859f70..4fa35710f 100644
--- a/vector-stores/spring-ai-gemfire-store/pom.xml
+++ b/vector-stores/spring-ai-gemfire-store/pom.xml
@@ -101,4 +101,24 @@
+
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+ ${maven-failsafe-plugin.version}
+
+ ${skip.vectorstore.gemfire}
+
+
+
+
+ integration-test
+ verify
+
+
+
+
+
+
diff --git a/vector-stores/spring-ai-hanadb-store/pom.xml b/vector-stores/spring-ai-hanadb-store/pom.xml
index 430297bb7..b66452cb4 100644
--- a/vector-stores/spring-ai-hanadb-store/pom.xml
+++ b/vector-stores/spring-ai-hanadb-store/pom.xml
@@ -99,4 +99,25 @@
test
+
+
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+ ${maven-failsafe-plugin.version}
+
+ ${skip.vectorstore.hanadb}
+
+
+
+
+ integration-test
+ verify
+
+
+
+
+
+
diff --git a/vector-stores/spring-ai-milvus-store/pom.xml b/vector-stores/spring-ai-milvus-store/pom.xml
index fddad05b6..b96d13aa8 100644
--- a/vector-stores/spring-ai-milvus-store/pom.xml
+++ b/vector-stores/spring-ai-milvus-store/pom.xml
@@ -96,4 +96,24 @@
+
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+ ${maven-failsafe-plugin.version}
+
+ ${skip.vectorstore.milvus}
+
+
+
+
+ integration-test
+ verify
+
+
+
+
+
+
diff --git a/vector-stores/spring-ai-mongodb-atlas-store/pom.xml b/vector-stores/spring-ai-mongodb-atlas-store/pom.xml
index b1b803005..02140c7c9 100644
--- a/vector-stores/spring-ai-mongodb-atlas-store/pom.xml
+++ b/vector-stores/spring-ai-mongodb-atlas-store/pom.xml
@@ -93,4 +93,25 @@
test
+
+
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+ ${maven-failsafe-plugin.version}
+
+ ${skip.vectorstore.mongodb-atlas}
+
+
+
+
+ integration-test
+ verify
+
+
+
+
+
+
diff --git a/vector-stores/spring-ai-neo4j-store/pom.xml b/vector-stores/spring-ai-neo4j-store/pom.xml
index a8acbfc8f..c78d315e8 100644
--- a/vector-stores/spring-ai-neo4j-store/pom.xml
+++ b/vector-stores/spring-ai-neo4j-store/pom.xml
@@ -108,7 +108,27 @@
micrometer-observation-test
test
-
+
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+ ${maven-failsafe-plugin.version}
+
+ ${skip.vectorstore.neo4j}
+
+
+
+
+ integration-test
+ verify
+
+
+
+
+
+
+
diff --git a/vector-stores/spring-ai-opensearch-store/pom.xml b/vector-stores/spring-ai-opensearch-store/pom.xml
index aa3ddfbbd..d7cd5d174 100644
--- a/vector-stores/spring-ai-opensearch-store/pom.xml
+++ b/vector-stores/spring-ai-opensearch-store/pom.xml
@@ -104,4 +104,25 @@
+
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+ ${maven-failsafe-plugin.version}
+
+ ${skip.vectorstore.opensearch}
+
+
+
+
+ integration-test
+ verify
+
+
+
+
+
+
+
diff --git a/vector-stores/spring-ai-oracle-store/pom.xml b/vector-stores/spring-ai-oracle-store/pom.xml
index 0f795fa89..f78dc0382 100644
--- a/vector-stores/spring-ai-oracle-store/pom.xml
+++ b/vector-stores/spring-ai-oracle-store/pom.xml
@@ -123,4 +123,25 @@
+
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+ ${maven-failsafe-plugin.version}
+
+ ${skip.vectorstore.oracle}
+
+
+
+
+ integration-test
+ verify
+
+
+
+
+
+
+
diff --git a/vector-stores/spring-ai-pgvector-store/pom.xml b/vector-stores/spring-ai-pgvector-store/pom.xml
index 5b4a7b0df..2b25c3072 100644
--- a/vector-stores/spring-ai-pgvector-store/pom.xml
+++ b/vector-stores/spring-ai-pgvector-store/pom.xml
@@ -117,4 +117,25 @@
+
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+ ${maven-failsafe-plugin.version}
+
+ ${skip.vectorstore.pgvector}
+
+
+
+
+ integration-test
+ verify
+
+
+
+
+
+
+
diff --git a/vector-stores/spring-ai-pinecone-store/pom.xml b/vector-stores/spring-ai-pinecone-store/pom.xml
index 87b2722c5..6d37241bb 100644
--- a/vector-stores/spring-ai-pinecone-store/pom.xml
+++ b/vector-stores/spring-ai-pinecone-store/pom.xml
@@ -124,4 +124,25 @@
+
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+ ${maven-failsafe-plugin.version}
+
+ ${skip.vectorstore.pinecone}
+
+
+
+
+ integration-test
+ verify
+
+
+
+
+
+
+
diff --git a/vector-stores/spring-ai-qdrant-store/pom.xml b/vector-stores/spring-ai-qdrant-store/pom.xml
index 2d9c598e5..1b8a5d4eb 100644
--- a/vector-stores/spring-ai-qdrant-store/pom.xml
+++ b/vector-stores/spring-ai-qdrant-store/pom.xml
@@ -104,4 +104,25 @@
test
+
+
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+ ${maven-failsafe-plugin.version}
+
+ ${skip.vectorstore.qdrant}
+
+
+
+
+ integration-test
+ verify
+
+
+
+
+
+
diff --git a/vector-stores/spring-ai-redis-store/pom.xml b/vector-stores/spring-ai-redis-store/pom.xml
index 80c7c6874..021e741eb 100644
--- a/vector-stores/spring-ai-redis-store/pom.xml
+++ b/vector-stores/spring-ai-redis-store/pom.xml
@@ -103,4 +103,25 @@
+
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+ ${maven-failsafe-plugin.version}
+
+ ${skip.vectorstore.redis}
+
+
+
+
+ integration-test
+ verify
+
+
+
+
+
+
+
diff --git a/vector-stores/spring-ai-typesense-store/pom.xml b/vector-stores/spring-ai-typesense-store/pom.xml
index db03d7917..cfd9172d5 100644
--- a/vector-stores/spring-ai-typesense-store/pom.xml
+++ b/vector-stores/spring-ai-typesense-store/pom.xml
@@ -91,4 +91,25 @@
+
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+ ${maven-failsafe-plugin.version}
+
+ ${skip.vectorstore.typesense}
+
+
+
+
+ integration-test
+ verify
+
+
+
+
+
+
+
diff --git a/vector-stores/spring-ai-weaviate-store/pom.xml b/vector-stores/spring-ai-weaviate-store/pom.xml
index c1ea5ff95..a8a0e3e38 100644
--- a/vector-stores/spring-ai-weaviate-store/pom.xml
+++ b/vector-stores/spring-ai-weaviate-store/pom.xml
@@ -104,4 +104,25 @@
+
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+ ${maven-failsafe-plugin.version}
+
+ ${skip.vectorstore.weaviate}
+
+
+
+
+ integration-test
+ verify
+
+
+
+
+
+
+