Minimize time to run main CI build action

- Add maven properties for all vector stores such as
skip.vectorstore.azure-cosmos-db to control IT test execution
- Chroma and PGVector IT tests are enabled by default
- Docker Compose and Testcontainers module ITs are skipped by default
- Add parallel job to run docker-compose and testcontainers ITs
This commit is contained in:
Mark Pollack
2024-11-11 16:14:26 -05:00
parent 4de95b7708
commit a98af02f62
23 changed files with 520 additions and 4 deletions

View File

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

50
pom.xml
View File

@@ -256,6 +256,31 @@
<maven-checkstyle-plugin.failOnViolation>true</maven-checkstyle-plugin.failOnViolation>
<puppycrawl-tools-checkstyle.version>9.3</puppycrawl-tools-checkstyle.version>
<disable.checks>true</disable.checks>
<!-- Individual vector store skip flags with smoke tests enabled by default -->
<skip.vectorstore.azure-cosmos-db>true</skip.vectorstore.azure-cosmos-db>
<skip.vectorstore.azure>true</skip.vectorstore.azure>
<skip.vectorstore.cassandra>true</skip.vectorstore.cassandra>
<skip.vectorstore.chroma>false</skip.vectorstore.chroma> <!-- smoke test -->
<skip.vectorstore.coherence>true</skip.vectorstore.coherence>
<skip.vectorstore.elasticsearch>true</skip.vectorstore.elasticsearch>
<skip.vectorstore.gemfire>true</skip.vectorstore.gemfire>
<skip.vectorstore.hanadb>true</skip.vectorstore.hanadb>
<skip.vectorstore.milvus>true</skip.vectorstore.milvus>
<skip.vectorstore.mongodb-atlas>true</skip.vectorstore.mongodb-atlas>
<skip.vectorstore.neo4j>true</skip.vectorstore.neo4j>
<skip.vectorstore.opensearch>true</skip.vectorstore.opensearch>
<skip.vectorstore.oracle>true</skip.vectorstore.oracle>
<skip.vectorstore.pgvector>false</skip.vectorstore.pgvector> <!-- smoke test -->
<skip.vectorstore.pinecone>true</skip.vectorstore.pinecone>
<skip.vectorstore.qdrant>true</skip.vectorstore.qdrant>
<skip.vectorstore.redis>true</skip.vectorstore.redis>
<skip.vectorstore.typesense>true</skip.vectorstore.typesense>
<skip.vectorstore.weaviate>true</skip.vectorstore.weaviate>
<!-- Container module ITs - skipped by default -->
<skip.docker-compose>true</skip.docker-compose>
<skip.testcontainers>true</skip.testcontainers>
</properties>
<build>
@@ -616,6 +641,31 @@
</plugins>
</build>
</profile>
<!-- Profile to enable all vector store tests -->
<profile>
<id>full-vectorstore-tests</id>
<properties>
<skip.vectorstore.azure-cosmos-db>false</skip.vectorstore.azure-cosmos-db>
<skip.vectorstore.azure>false</skip.vectorstore.azure>
<skip.vectorstore.cassandra>false</skip.vectorstore.cassandra>
<skip.vectorstore.chroma>false</skip.vectorstore.chroma>
<skip.vectorstore.coherence>false</skip.vectorstore.coherence>
<skip.vectorstore.elasticsearch>false</skip.vectorstore.elasticsearch>
<skip.vectorstore.gemfire>false</skip.vectorstore.gemfire>
<skip.vectorstore.hanadb>false</skip.vectorstore.hanadb>
<skip.vectorstore.milvus>false</skip.vectorstore.milvus>
<skip.vectorstore.mongodb-atlas>false</skip.vectorstore.mongodb-atlas>
<skip.vectorstore.neo4j>false</skip.vectorstore.neo4j>
<skip.vectorstore.opensearch>false</skip.vectorstore.opensearch>
<skip.vectorstore.oracle>false</skip.vectorstore.oracle>
<skip.vectorstore.pgvector>false</skip.vectorstore.pgvector>
<skip.vectorstore.pinecone>false</skip.vectorstore.pinecone>
<skip.vectorstore.qdrant>false</skip.vectorstore.qdrant>
<skip.vectorstore.redis>false</skip.vectorstore.redis>
<skip.vectorstore.typesense>false</skip.vectorstore.typesense>
<skip.vectorstore.weaviate>false</skip.vectorstore.weaviate>
</properties>
</profile>
<profile>
<id>test-coverage</id>
<build>

View File

@@ -36,6 +36,7 @@
</scm>
<properties>
<spring-ai-docker-compose.skipITs>false</spring-ai-docker-compose.skipITs>
</properties>
<dependencies>
@@ -176,4 +177,24 @@
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven-failsafe-plugin.version}</version>
<configuration>
<skipITs>${skip.docker-compose}</skipITs>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -37,6 +37,7 @@
</scm>
<properties>
<spring-ai-testcontainers.skipITs>false</spring-ai-testcontainers.skipITs>
</properties>
<dependencies>
@@ -267,4 +268,25 @@
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven-failsafe-plugin.version}</version>
<configuration>
<skipITs>${skip.testcontainers}</skipITs>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -94,4 +94,24 @@
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven-failsafe-plugin.version}</version>
<configuration>
<skipITs>${skip.vectorstore.azure-cosmos-db}</skipITs>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -103,5 +103,24 @@
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven-failsafe-plugin.version}</version>
<configuration>
<skipITs>${skip.vectorstore.azure}</skipITs>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -93,5 +93,24 @@
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven-failsafe-plugin.version}</version>
<configuration>
<skipITs>${skip.vectorstore.cassandra}</skipITs>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -89,4 +89,24 @@
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven-failsafe-plugin.version}</version>
<configuration>
<skipITs>${skip.vectorstore.chroma}</skipITs>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -80,4 +80,24 @@
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven-failsafe-plugin.version}</version>
<configuration>
<skipITs>${skip.vectorstore.coherence}</skipITs>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -96,4 +96,24 @@
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven-failsafe-plugin.version}</version>
<configuration>
<skipITs>${skip.vectorstore.elasticsearch}</skipITs>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -101,4 +101,24 @@
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven-failsafe-plugin.version}</version>
<configuration>
<skipITs>${skip.vectorstore.gemfire}</skipITs>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -99,4 +99,25 @@
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven-failsafe-plugin.version}</version>
<configuration>
<skipITs>${skip.vectorstore.hanadb}</skipITs>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -96,4 +96,24 @@
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven-failsafe-plugin.version}</version>
<configuration>
<skipITs>${skip.vectorstore.milvus}</skipITs>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -93,4 +93,25 @@
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven-failsafe-plugin.version}</version>
<configuration>
<skipITs>${skip.vectorstore.mongodb-atlas}</skipITs>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -108,7 +108,27 @@
<artifactId>micrometer-observation-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven-failsafe-plugin.version}</version>
<configuration>
<skipITs>${skip.vectorstore.neo4j}</skipITs>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -104,4 +104,25 @@
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven-failsafe-plugin.version}</version>
<configuration>
<skipITs>${skip.vectorstore.opensearch}</skipITs>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -123,4 +123,25 @@
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven-failsafe-plugin.version}</version>
<configuration>
<skipITs>${skip.vectorstore.oracle}</skipITs>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -117,4 +117,25 @@
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven-failsafe-plugin.version}</version>
<configuration>
<skipITs>${skip.vectorstore.pgvector}</skipITs>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -124,4 +124,25 @@
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven-failsafe-plugin.version}</version>
<configuration>
<skipITs>${skip.vectorstore.pinecone}</skipITs>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -104,4 +104,25 @@
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven-failsafe-plugin.version}</version>
<configuration>
<skipITs>${skip.vectorstore.qdrant}</skipITs>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -103,4 +103,25 @@
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven-failsafe-plugin.version}</version>
<configuration>
<skipITs>${skip.vectorstore.redis}</skipITs>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -91,4 +91,25 @@
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven-failsafe-plugin.version}</version>
<configuration>
<skipITs>${skip.vectorstore.typesense}</skipITs>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -104,4 +104,25 @@
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven-failsafe-plugin.version}</version>
<configuration>
<skipITs>${skip.vectorstore.weaviate}</skipITs>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>