Skip to content

Commit

Permalink
Fix tests
Browse files Browse the repository at this point in the history
  • Loading branch information
eddumelendez committed Sep 4, 2024
1 parent 4ff4b01 commit 6837e70
Show file tree
Hide file tree
Showing 17 changed files with 150 additions and 66 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,33 +16,34 @@

package io.spring.start.site.extension.dependency.springai;

import io.spring.initializr.generator.buildsystem.Build;
import io.spring.initializr.generator.condition.ConditionalOnRequestedDependency;
import io.spring.initializr.generator.project.ProjectDescription;
import io.spring.initializr.generator.project.ProjectGenerationConfiguration;
import io.spring.initializr.metadata.InitializrMetadata;
import io.spring.start.site.container.ComposeFileCustomizer;
import io.spring.start.site.container.DockerServiceResolver;
import io.spring.start.site.container.ServiceConnections.ServiceConnection;
import io.spring.start.site.container.ServiceConnectionsCustomizer;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
* Configuration for generation of projects that depend on Chroma.
*
* @author Eddú Meléndez
*/
@Configuration(proxyBeanMethods = false)
@ProjectGenerationConfiguration
@ConditionalOnRequestedDependency("spring-ai-vectordb-chroma")
class SpringAiChromaProjectGenerationConfiguration {

private static final String TESTCONTAINERS_CLASS_NAME = "org.testcontainers.chromadb.ChromaDBContainer";

@Bean
@ConditionalOnRequestedDependency("testcontainers")
ServiceConnectionsCustomizer chromaServiceConnectionsCustomizer(Build build,
DockerServiceResolver serviceResolver) {
ServiceConnectionsCustomizer chromaServiceConnectionsCustomizer(InitializrMetadata metadata,
ProjectDescription description, DockerServiceResolver serviceResolver) {
return (serviceConnections) -> {
if (SpringAiVersion.version1OrLater(build)) {
if (SpringAiVersion.version1OrLater(metadata, description.getPlatformVersion())) {
serviceResolver.doWith("chroma", (service) -> serviceConnections
.addServiceConnection(ServiceConnection.ofContainer("chroma", service, TESTCONTAINERS_CLASS_NAME)));
}
Expand All @@ -51,9 +52,10 @@ ServiceConnectionsCustomizer chromaServiceConnectionsCustomizer(Build build,

@Bean
@ConditionalOnRequestedDependency("docker-compose")
ComposeFileCustomizer chromaComposeFileCustomizer(Build build, DockerServiceResolver serviceResolver) {
ComposeFileCustomizer chromaComposeFileCustomizer(InitializrMetadata metadata, ProjectDescription description,
DockerServiceResolver serviceResolver) {
return (composeFile) -> {
if (SpringAiVersion.version1OrLater(build)) {
if (SpringAiVersion.version1OrLater(metadata, description.getPlatformVersion())) {
serviceResolver.doWith("chroma", (service) -> composeFile.services().add("chroma", service));
}
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,24 +20,27 @@
import io.spring.initializr.generator.buildsystem.Dependency;
import io.spring.initializr.generator.buildsystem.DependencyScope;
import io.spring.initializr.generator.condition.ConditionalOnRequestedDependency;
import io.spring.initializr.generator.project.ProjectDescription;
import io.spring.initializr.generator.project.ProjectGenerationConfiguration;
import io.spring.initializr.generator.spring.build.BuildCustomizer;

import io.spring.initializr.metadata.InitializrMetadata;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
* Configuration for generation of projects that depend on Spring AI Docker Compose.
*
* @author Eddú Meléndez
*/
@Configuration(proxyBeanMethods = false)
class DockerComposeConfiguration {
@ProjectGenerationConfiguration
@ConditionalOnRequestedDependency("docker-compose")
class SpringAiDockerComposeProjectGenerationConfiguration {

@Bean
@ConditionalOnRequestedDependency("docker-compose")
BuildCustomizer<Build> springBootTestcontainersBuildCustomizer() {
BuildCustomizer<Build> springBootTestcontainersBuildCustomizer(InitializrMetadata metadata,
ProjectDescription description) {
return (build) -> {
if (SpringAiVersion.version1OrLater(build)) {
if (SpringAiVersion.version1OrLater(metadata, description.getPlatformVersion())) {
build.dependencies()
.add("spring-ai-docker-compose",
Dependency.withCoordinates("org.springframework.ai", "spring-ai-spring-boot-docker-compose")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,32 +16,33 @@

package io.spring.start.site.extension.dependency.springai;

import io.spring.initializr.generator.buildsystem.Build;
import io.spring.initializr.generator.condition.ConditionalOnRequestedDependency;
import io.spring.initializr.generator.project.ProjectDescription;
import io.spring.initializr.generator.project.ProjectGenerationConfiguration;
import io.spring.initializr.metadata.InitializrMetadata;
import io.spring.start.site.container.DockerServiceResolver;
import io.spring.start.site.container.ServiceConnections.ServiceConnection;
import io.spring.start.site.container.ServiceConnectionsCustomizer;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
* Configuration for generation of projects that depend on Milvus.
*
* @author Eddú Meléndez
*/
@Configuration(proxyBeanMethods = false)
@ProjectGenerationConfiguration
@ConditionalOnRequestedDependency("spring-ai-vectordb-milvus")
class SpringAiMilvusProjectGenerationConfiguration {

private static final String TESTCONTAINERS_CLASS_NAME = "org.testcontainers.milvus.MilvusContainer";

@Bean
@ConditionalOnRequestedDependency("testcontainers")
ServiceConnectionsCustomizer milvusServiceConnectionsCustomizer(Build build,
DockerServiceResolver serviceResolver) {
ServiceConnectionsCustomizer milvusServiceConnectionsCustomizer(InitializrMetadata metadata,
ProjectDescription description, DockerServiceResolver serviceResolver) {
return (serviceConnections) -> {
if (SpringAiVersion.version1OrLater(build)) {
if (SpringAiVersion.version1OrLater(metadata, description.getPlatformVersion())) {
serviceResolver.doWith("milvus", (service) -> serviceConnections
.addServiceConnection(ServiceConnection.ofContainer("milvus", service, TESTCONTAINERS_CLASS_NAME)));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,33 +16,34 @@

package io.spring.start.site.extension.dependency.springai;

import io.spring.initializr.generator.buildsystem.Build;
import io.spring.initializr.generator.condition.ConditionalOnRequestedDependency;
import io.spring.initializr.generator.project.ProjectDescription;
import io.spring.initializr.generator.project.ProjectGenerationConfiguration;
import io.spring.initializr.metadata.InitializrMetadata;
import io.spring.start.site.container.ComposeFileCustomizer;
import io.spring.start.site.container.DockerServiceResolver;
import io.spring.start.site.container.ServiceConnections.ServiceConnection;
import io.spring.start.site.container.ServiceConnectionsCustomizer;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
* Configuration for generation of projects that depend on Ollama.
*
* @author Eddú Meléndez
*/
@Configuration(proxyBeanMethods = false)
@ProjectGenerationConfiguration
@ConditionalOnRequestedDependency("spring-ai-ollama")
class SpringAiOllamaProjectGenerationConfiguration {

private static final String TESTCONTAINERS_CLASS_NAME = "org.testcontainers.ollama.OllamaContainer";

@Bean
@ConditionalOnRequestedDependency("testcontainers")
ServiceConnectionsCustomizer ollamaServiceConnectionsCustomizer(Build build,
DockerServiceResolver serviceResolver) {
ServiceConnectionsCustomizer ollamaServiceConnectionsCustomizer(InitializrMetadata metadata,
ProjectDescription description, DockerServiceResolver serviceResolver) {
return (serviceConnections) -> {
if (SpringAiVersion.version1OrLater(build)) {
if (SpringAiVersion.version1OrLater(metadata, description.getPlatformVersion())) {
serviceResolver.doWith("ollama", (service) -> serviceConnections
.addServiceConnection(ServiceConnection.ofContainer("ollama", service, TESTCONTAINERS_CLASS_NAME)));
}
Expand All @@ -51,9 +52,10 @@ ServiceConnectionsCustomizer ollamaServiceConnectionsCustomizer(Build build,

@Bean
@ConditionalOnRequestedDependency("docker-compose")
ComposeFileCustomizer ollamaComposeFileCustomizer(Build build, DockerServiceResolver serviceResolver) {
ComposeFileCustomizer ollamaComposeFileCustomizer(InitializrMetadata metadata, ProjectDescription description,
DockerServiceResolver serviceResolver) {
return (composeFile) -> {
if (SpringAiVersion.version1OrLater(build)) {
if (SpringAiVersion.version1OrLater(metadata, description.getPlatformVersion())) {
serviceResolver.doWith("ollama", (service) -> composeFile.services().add("ollama", service));
}
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,33 +16,34 @@

package io.spring.start.site.extension.dependency.springai;

import io.spring.initializr.generator.buildsystem.Build;
import io.spring.initializr.generator.condition.ConditionalOnRequestedDependency;
import io.spring.initializr.generator.project.ProjectDescription;
import io.spring.initializr.generator.project.ProjectGenerationConfiguration;
import io.spring.initializr.metadata.InitializrMetadata;
import io.spring.start.site.container.ComposeFileCustomizer;
import io.spring.start.site.container.DockerServiceResolver;
import io.spring.start.site.container.ServiceConnections.ServiceConnection;
import io.spring.start.site.container.ServiceConnectionsCustomizer;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
* Configuration for generation of projects that depend on Qdrant.
*
* @author Eddú Meléndez
*/
@Configuration(proxyBeanMethods = false)
@ProjectGenerationConfiguration
@ConditionalOnRequestedDependency("spring-ai-vectordb-qdrant")
class SpringAiQdrantProjectGenerationConfiguration {

private static final String TESTCONTAINERS_CLASS_NAME = "org.testcontainers.qdrant.QdrantContainer";

@Bean
@ConditionalOnRequestedDependency("testcontainers")
ServiceConnectionsCustomizer qdrantServiceConnectionsCustomizer(Build build,
DockerServiceResolver serviceResolver) {
ServiceConnectionsCustomizer qdrantServiceConnectionsCustomizer(InitializrMetadata metadata,
ProjectDescription description, DockerServiceResolver serviceResolver) {
return (serviceConnections) -> {
if (SpringAiVersion.version1OrLater(build)) {
if (SpringAiVersion.version1OrLater(metadata, description.getPlatformVersion())) {
serviceResolver.doWith("qdrant", (service) -> serviceConnections
.addServiceConnection(ServiceConnection.ofContainer("qdrant", service, TESTCONTAINERS_CLASS_NAME)));
}
Expand All @@ -51,9 +52,10 @@ ServiceConnectionsCustomizer qdrantServiceConnectionsCustomizer(Build build,

@Bean
@ConditionalOnRequestedDependency("docker-compose")
ComposeFileCustomizer qdrantComposeFileCustomizer(Build build, DockerServiceResolver serviceResolver) {
ComposeFileCustomizer qdrantComposeFileCustomizer(InitializrMetadata metadata, ProjectDescription description,
DockerServiceResolver serviceResolver) {
return (composeFile) -> {
if (SpringAiVersion.version1OrLater(build)) {
if (SpringAiVersion.version1OrLater(metadata, description.getPlatformVersion())) {
serviceResolver.doWith("qdrant", (service) -> composeFile.services().add("qdrant", service));
}
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,24 +20,27 @@
import io.spring.initializr.generator.buildsystem.Dependency;
import io.spring.initializr.generator.buildsystem.DependencyScope;
import io.spring.initializr.generator.condition.ConditionalOnRequestedDependency;
import io.spring.initializr.generator.project.ProjectDescription;
import io.spring.initializr.generator.project.ProjectGenerationConfiguration;
import io.spring.initializr.generator.spring.build.BuildCustomizer;

import io.spring.initializr.metadata.InitializrMetadata;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
* Configuration for generation of projects that depend on Spring AI Testcontainers.
*
* @author Eddú Meléndez
*/
@Configuration(proxyBeanMethods = false)
class TestcontainersConfiguration {
@ProjectGenerationConfiguration
@ConditionalOnRequestedDependency("testcontainers")
class SpringAiTestcontainersProjectGenerationConfiguration {

@Bean
@ConditionalOnRequestedDependency("testcontainers")
BuildCustomizer<Build> springBootTestcontainersBuildCustomizer() {
BuildCustomizer<Build> springAiTestcontainersBuildCustomizer(InitializrMetadata metadata,
ProjectDescription description) {
return (build) -> {
if (SpringAiVersion.version1OrLater(build)) {
if (SpringAiVersion.version1OrLater(metadata, description.getPlatformVersion())) {
build.dependencies()
.add("spring-ai-testcontainers",
Dependency.withCoordinates("org.springframework.ai", "spring-ai-spring-boot-testcontainers")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,21 +16,26 @@

package io.spring.start.site.extension.dependency.springai;

import io.spring.initializr.generator.buildsystem.Build;
import io.spring.initializr.generator.version.Version;
import io.spring.initializr.generator.version.VersionParser;
import io.spring.initializr.generator.version.VersionRange;
import io.spring.initializr.metadata.InitializrMetadata;

final class SpringAiVersion {

private static final VersionRange SPRING_AI_1_0_0_OR_LATER = VersionParser.DEFAULT.parseRange("1.0.0");
private static final VersionRange SPRING_AI_1_0_0_OR_LATER = VersionParser.DEFAULT.parseRange("1.0.0-M2");

private SpringAiVersion() {

}

static boolean version1OrLater(Build build) {
var springAiBomVersion = build.boms().get("spring-ai").getVersion().getValue();
static boolean version1OrLater(InitializrMetadata metadata, Version platformVersion) {
var springAiBomVersion = metadata.getConfiguration()
.getEnv()
.getBoms()
.get("spring-ai")
.resolve(platformVersion)
.getVersion();
return SPRING_AI_1_0_0_OR_LATER.match(Version.parse(springAiBomVersion));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,33 +16,34 @@

package io.spring.start.site.extension.dependency.springai;

import io.spring.initializr.generator.buildsystem.Build;
import io.spring.initializr.generator.condition.ConditionalOnRequestedDependency;
import io.spring.initializr.generator.project.ProjectDescription;
import io.spring.initializr.generator.project.ProjectGenerationConfiguration;
import io.spring.initializr.metadata.InitializrMetadata;
import io.spring.start.site.container.ComposeFileCustomizer;
import io.spring.start.site.container.DockerServiceResolver;
import io.spring.start.site.container.ServiceConnections.ServiceConnection;
import io.spring.start.site.container.ServiceConnectionsCustomizer;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
* Configuration for generation of projects that depend on Weaviate.
*
* @author Eddú Meléndez
*/
@Configuration(proxyBeanMethods = false)
@ProjectGenerationConfiguration
@ConditionalOnRequestedDependency("spring-ai-vectordb-weaviate")
class SpringAiWeaviateProjectGenerationConfiguration {

private static final String TESTCONTAINERS_CLASS_NAME = "org.testcontainers.weaviate.WeaviateContainer";

@Bean
@ConditionalOnRequestedDependency("testcontainers")
ServiceConnectionsCustomizer weaviateServiceConnectionsCustomizer(Build build,
DockerServiceResolver serviceResolver) {
ServiceConnectionsCustomizer weaviateServiceConnectionsCustomizer(InitializrMetadata metadata,
ProjectDescription description, DockerServiceResolver serviceResolver) {
return (serviceConnections) -> {
if (SpringAiVersion.version1OrLater(build)) {
if (SpringAiVersion.version1OrLater(metadata, description.getPlatformVersion())) {
serviceResolver.doWith("weaviate", (service) -> serviceConnections.addServiceConnection(
ServiceConnection.ofContainer("weaviate", service, TESTCONTAINERS_CLASS_NAME)));
}
Expand All @@ -51,9 +52,10 @@ ServiceConnectionsCustomizer weaviateServiceConnectionsCustomizer(Build build,

@Bean
@ConditionalOnRequestedDependency("docker-compose")
ComposeFileCustomizer weaviateComposeFileCustomizer(Build build, DockerServiceResolver serviceResolver) {
ComposeFileCustomizer weaviateComposeFileCustomizer(InitializrMetadata metadata, ProjectDescription description,
DockerServiceResolver serviceResolver) {
return (composeFile) -> {
if (SpringAiVersion.version1OrLater(build)) {
if (SpringAiVersion.version1OrLater(metadata, description.getPlatformVersion())) {
serviceResolver.doWith("weaviate", (service) -> composeFile.services().add("weaviate", service));
}
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ static Iterable<ImplicitDependency> create(Version platformVersion) {
.customizeHelpDocument(addReferenceLink("MariaDB Module", "databases/mariadb/")));
builders.add(onDependencies("mysql").customizeBuild(addModule("mysql"))
.customizeHelpDocument(addReferenceLink("MySQL Module", "databases/mysql/")));
builders.add(onDependencies("oracle").customizeBuild(addModule("oracle-free"))
builders.add(onDependencies("oracle", "spring-ai-vectordb-oracle").customizeBuild(addModule("oracle-free"))
.customizeHelpDocument(addReferenceLink("Oracle-Free Module", "databases/oraclefree/")));
builders.add(onDependencies("postgresql", "spring-ai-vectordb-pgvector").customizeBuild(addModule("postgresql"))
.customizeHelpDocument(addReferenceLink("Postgres Module", "databases/postgres/")));
Expand Down
7 changes: 7 additions & 0 deletions start-site/src/main/resources/META-INF/spring.factories
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,13 @@ io.spring.start.site.extension.dependency.postgresql.PostgresqlProjectGeneration
io.spring.start.site.extension.dependency.redis.RedisProjectGenerationConfiguration,\
io.spring.start.site.extension.dependency.sbom.SbomProjectGenerationConfiguration,\
io.spring.start.site.extension.dependency.solace.SolaceProjectGenerationConfiguration,\
io.spring.start.site.extension.dependency.springai.SpringAiChromaProjectGenerationConfiguration,\
io.spring.start.site.extension.dependency.springai.SpringAiDockerComposeProjectGenerationConfiguration,\
io.spring.start.site.extension.dependency.springai.SpringAiMilvusProjectGenerationConfiguration,\
io.spring.start.site.extension.dependency.springai.SpringAiOllamaProjectGenerationConfiguration,\
io.spring.start.site.extension.dependency.springai.SpringAiQdrantProjectGenerationConfiguration,\
io.spring.start.site.extension.dependency.springai.SpringAiTestcontainersProjectGenerationConfiguration,\
io.spring.start.site.extension.dependency.springai.SpringAiWeaviateProjectGenerationConfiguration,\
io.spring.start.site.extension.dependency.springamqp.SpringAmqpProjectGenerationConfiguration,\
io.spring.start.site.extension.dependency.springazure.SpringAzureProjectGenerationConfiguration,\
io.spring.start.site.extension.dependency.springboot.SpringBootProjectGenerationConfiguration,\
Expand Down
Loading

0 comments on commit 6837e70

Please sign in to comment.