diff --git a/.github/workflows/main-build.yml b/.github/workflows/main-build.yml index 75e9146..a099855 100644 --- a/.github/workflows/main-build.yml +++ b/.github/workflows/main-build.yml @@ -31,4 +31,4 @@ jobs: distribution: 'temurin' cache: maven - name: Build with Maven - run: mvn -B package --file pom.xml + run: mvn -B install --file pom.xml diff --git a/.github/workflows/pr-builds.yml b/.github/workflows/pr-builds.yml index 122656c..1e9f5bd 100644 --- a/.github/workflows/pr-builds.yml +++ b/.github/workflows/pr-builds.yml @@ -52,4 +52,4 @@ jobs: distribution: 'temurin' cache: maven - name: Build with Maven - run: mvn -B package --file pom.xml + run: mvn -B install --file pom.xml diff --git a/capabilities-archetypes/capabilities-archetypes-java-tool/pom.xml b/capabilities-archetypes/capabilities-archetypes-java-tool/pom.xml index 9b75b6f..0e2af14 100644 --- a/capabilities-archetypes/capabilities-archetypes-java-tool/pom.xml +++ b/capabilities-archetypes/capabilities-archetypes-java-tool/pom.xml @@ -21,6 +21,13 @@ + + + src/test/resources + true + + + @@ -30,5 +37,23 @@ + + + + org.apache.maven.plugins + maven-archetype-plugin + + ${skipTests} + + + + integration-test + + integration-test + + + + + \ No newline at end of file diff --git a/capabilities-archetypes/capabilities-archetypes-java-tool/src/main/resources/archetype-resources/pom.xml b/capabilities-archetypes/capabilities-archetypes-java-tool/src/main/resources/archetype-resources/pom.xml index 69fac23..0ca515f 100644 --- a/capabilities-archetypes/capabilities-archetypes-java-tool/src/main/resources/archetype-resources/pom.xml +++ b/capabilities-archetypes/capabilities-archetypes-java-tool/src/main/resources/archetype-resources/pom.xml @@ -10,8 +10,8 @@ 21 UTF-8 - 2.0.16 - 2.21.1 + 2.0.17 + 2.25.2 4.7.6 3.7.1 ${wanaku-sdk-version} @@ -37,10 +37,22 @@ + + ai.wanaku.sdk + capabilities-api + ai.wanaku.sdk capabilities-common + + ai.wanaku.sdk + capabilities-config-provider-api + + + ai.wanaku.sdk + capabilities-config-provider-file + ai.wanaku.sdk capabilities-discovery diff --git a/capabilities-archetypes/capabilities-archetypes-java-tool/src/main/resources/archetype-resources/src/main/java/App.java b/capabilities-archetypes/capabilities-archetypes-java-tool/src/main/resources/archetype-resources/src/main/java/App.java index 43d87f9..bd8e9ee 100644 --- a/capabilities-archetypes/capabilities-archetypes-java-tool/src/main/resources/archetype-resources/src/main/java/App.java +++ b/capabilities-archetypes/capabilities-archetypes-java-tool/src/main/resources/archetype-resources/src/main/java/App.java @@ -1,17 +1,16 @@ package ${package}; -import java.util.concurrent.Callable; import java.util.concurrent.Callable; -import ai.wanaku.api.discovery.RegistrationManager; -import ai.wanaku.api.types.providers.ServiceTarget; +import ai.wanaku.capabilities.sdk.api.discovery.RegistrationManager; +import ai.wanaku.capabilities.sdk.api.types.providers.ServiceTarget; import ai.wanaku.capabilities.sdk.common.ServicesHelper; +import ai.wanaku.capabilities.sdk.common.config.DefaultServiceConfig; +import ai.wanaku.capabilities.sdk.common.serializer.JacksonSerializer; import ai.wanaku.capabilities.sdk.discovery.DiscoveryServiceHttpClient; import ai.wanaku.capabilities.sdk.discovery.ZeroDepRegistrationManager; import ai.wanaku.capabilities.sdk.discovery.config.DefaultRegistrationConfig; -import ai.wanaku.capabilities.sdk.discovery.config.DefaultServiceConfig; import ai.wanaku.capabilities.sdk.discovery.deserializer.JacksonDeserializer; -import ai.wanaku.capabilities.sdk.discovery.serializer.JacksonSerializer; import ai.wanaku.capabilities.sdk.discovery.util.DiscoveryHelper; import io.grpc.Grpc; import io.grpc.InsecureServerCredentials; @@ -21,8 +20,7 @@ import picocli.CommandLine; /** - * Hello world! - * + * Main application class that handles service registration and gRPC server lifecycle. */ public class App implements Callable { @CommandLine.Option(names = { "-h", "--help" }, usageHelp = true, description = "display a help message") diff --git a/capabilities-archetypes/capabilities-archetypes-java-tool/src/main/resources/archetype-resources/src/main/java/ProvisionBase.java b/capabilities-archetypes/capabilities-archetypes-java-tool/src/main/resources/archetype-resources/src/main/java/ProvisionBase.java index c7badd1..c2764da 100644 --- a/capabilities-archetypes/capabilities-archetypes-java-tool/src/main/resources/archetype-resources/src/main/java/ProvisionBase.java +++ b/capabilities-archetypes/capabilities-archetypes-java-tool/src/main/resources/archetype-resources/src/main/java/ProvisionBase.java @@ -1,9 +1,9 @@ package ${package}; +import ai.wanaku.capabilities.sdk.config.provider.api.ConfigProvisioner; +import ai.wanaku.capabilities.sdk.config.provider.api.ProvisionedConfig; import ai.wanaku.capabilities.sdk.runtime.provisioners.FileProvisionerLoader; import ai.wanaku.capabilities.sdk.util.ProvisioningHelper; -import ai.wanaku.core.config.provider.api.ProvisionedConfig; -import ai.wanaku.core.config.provider.api.ConfigProvisioner; import ai.wanaku.core.exchange.PropertySchema; import ai.wanaku.core.exchange.ProvisionReply; import ai.wanaku.core.exchange.ProvisionRequest; diff --git a/capabilities-archetypes/capabilities-archetypes-java-tool/src/test/resources/projects/basic/archetype.properties b/capabilities-archetypes/capabilities-archetypes-java-tool/src/test/resources/projects/basic/archetype.properties new file mode 100644 index 0000000..30022bb --- /dev/null +++ b/capabilities-archetypes/capabilities-archetypes-java-tool/src/test/resources/projects/basic/archetype.properties @@ -0,0 +1,11 @@ +# Test properties for archetype integration test +# These properties are passed to the archetype:generate goal + +# Required archetype properties +groupId=ai.wanaku.test +artifactId=test-tool +version=1.0.0-SNAPSHOT +package=ai.wanaku.test + +# Custom required property for this archetype +wanaku-sdk-version=@project.version@ diff --git a/capabilities-archetypes/capabilities-archetypes-java-tool/src/test/resources/projects/basic/goal.txt b/capabilities-archetypes/capabilities-archetypes-java-tool/src/test/resources/projects/basic/goal.txt new file mode 100644 index 0000000..ba3bd78 --- /dev/null +++ b/capabilities-archetypes/capabilities-archetypes-java-tool/src/test/resources/projects/basic/goal.txt @@ -0,0 +1 @@ +package diff --git a/capabilities-archetypes/capabilities-archetypes-java-tool/src/test/resources/projects/basic/verify.groovy b/capabilities-archetypes/capabilities-archetypes-java-tool/src/test/resources/projects/basic/verify.groovy new file mode 100644 index 0000000..0afe300 --- /dev/null +++ b/capabilities-archetypes/capabilities-archetypes-java-tool/src/test/resources/projects/basic/verify.groovy @@ -0,0 +1,93 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.io.File + +// Verify that the project was generated correctly +// The archetype plugin generates projects in the 'project' subdirectory +def projectDir = new File(basedir, "project/test-tool") + +// Check that the project directory exists +assert projectDir.exists() : "Project directory was not created" +assert projectDir.isDirectory() : "Project path is not a directory" + +// Check pom.xml exists +def pomFile = new File(projectDir, "pom.xml") +assert pomFile.exists() : "pom.xml was not created" +assert pomFile.isFile() : "pom.xml is not a file" + +// Verify pom.xml content +def pomContent = pomFile.text +assert pomContent.contains("ai.wanaku.test") : "pom.xml does not contain correct groupId" +assert pomContent.contains("test-tool") : "pom.xml does not contain correct artifactId" +assert pomContent.contains("capabilities-bom") : "pom.xml does not reference capabilities-bom" +assert pomContent.contains("capabilities-api") : "pom.xml does not include capabilities-api dependency" +assert pomContent.contains("capabilities-common") : "pom.xml does not include capabilities-common dependency" +assert pomContent.contains("capabilities-discovery") : "pom.xml does not include capabilities-discovery dependency" +assert pomContent.contains("capabilities-exchange") : "pom.xml does not include capabilities-exchange dependency" +assert pomContent.contains("capabilities-runtime") : "pom.xml does not include capabilities-runtime dependency" +assert pomContent.contains("capabilities-config-provider-api") : "pom.xml does not include capabilities-config-provider-api dependency" +assert pomContent.contains("capabilities-config-provider-file") : "pom.xml does not include capabilities-config-provider-file dependency" + +// Verify correct dependency versions +assert pomContent.contains("2.0.17") : "pom.xml has outdated slf4j version" +assert pomContent.contains("2.25.2") : "pom.xml has outdated log4j version" + +// Check source directory structure +def srcMainJava = new File(projectDir, "src/main/java/ai/wanaku/test") +assert srcMainJava.exists() : "Source directory was not created" +assert srcMainJava.isDirectory() : "Source path is not a directory" + +// Check that Java files were generated +def appFile = new File(srcMainJava, "App.java") +assert appFile.exists() : "App.java was not created" +assert appFile.isFile() : "App.java is not a file" + +def appToolFile = new File(srcMainJava, "AppTool.java") +assert appToolFile.exists() : "AppTool.java was not created" +assert appToolFile.isFile() : "AppTool.java is not a file" + +def provisionBaseFile = new File(srcMainJava, "ProvisionBase.java") +assert provisionBaseFile.exists() : "ProvisionBase.java was not created" +assert provisionBaseFile.isFile() : "ProvisionBase.java is not a file" + +// Verify App.java has correct package and imports +def appContent = appFile.text +assert appContent.contains("package ai.wanaku.test;") : "App.java has wrong package" +assert appContent.contains("import ai.wanaku.capabilities.sdk.api.discovery.RegistrationManager;") : "App.java has wrong RegistrationManager import" +assert appContent.contains("import ai.wanaku.capabilities.sdk.api.types.providers.ServiceTarget;") : "App.java has wrong ServiceTarget import" +assert appContent.contains("import ai.wanaku.capabilities.sdk.common.config.DefaultServiceConfig;") : "App.java has wrong DefaultServiceConfig import" +assert appContent.contains("import ai.wanaku.capabilities.sdk.common.serializer.JacksonSerializer;") : "App.java has wrong JacksonSerializer import" +assert !appContent.contains("import java.util.concurrent.Callable;\nimport java.util.concurrent.Callable;") : "App.java has duplicate imports" + +// Verify ProvisionBase.java has correct imports +def provisionContent = provisionBaseFile.text +assert provisionContent.contains("package ai.wanaku.test;") : "ProvisionBase.java has wrong package" +assert provisionContent.contains("import ai.wanaku.capabilities.sdk.config.provider.api.ConfigProvisioner;") : "ProvisionBase.java has wrong ConfigProvisioner import" +assert provisionContent.contains("import ai.wanaku.capabilities.sdk.config.provider.api.ProvisionedConfig;") : "ProvisionBase.java has wrong ProvisionedConfig import" + +// Check that the target directory exists (build was successful) +def targetDir = new File(projectDir, "target") +assert targetDir.exists() : "Target directory does not exist - build may have failed" + +// Check that the fat JAR was created +def jarFile = new File(targetDir, "test-tool-app.jar") +assert jarFile.exists() : "Fat JAR was not created: ${jarFile.absolutePath}" + +println "All archetype verification checks passed!"