This is an automated email from the ASF dual-hosted git repository.

marat pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-karavan.git

commit a929b1003ae25bcab7bd64be24822001b6ad9f55
Author: Marat Gubaidullin <ma...@talismancloud.io>
AuthorDate: Tue Sep 5 22:13:57 2023 -0400

    Registry service for #817
---
 .../camel/karavan/docker/DockerForGitea.java       | 13 ----
 .../camel/karavan/docker/DockerForInfinispan.java  | 15 ----
 .../camel/karavan/docker/DockerForKaravan.java     | 90 ++++++++++++++++++++++
 ...erForInfinispan.java => DockerForRegistry.java} | 39 ++--------
 .../apache/camel/karavan/docker/DockerService.java |  1 -
 .../apache/camel/karavan/service/CodeService.java  |  2 +-
 .../camel/karavan/service/KaravanService.java      | 11 ++-
 .../camel/karavan/service/ProjectService.java      | 63 ++++++++++-----
 .../src/main/resources/application.properties      |  7 ++
 .../src/main/resources/services/devservices.yaml   |  5 --
 .../src/main/resources/services/internal.yaml      | 18 ++---
 .../snippets/camel-main-builder-script-docker.sh   | 34 ++++++++
 .../camel-main-builder-script-kubernetes.sh        | 30 ++++++++
 .../camel-main-builder-script-openshift.sh         | 30 ++++++++
 .../camel-main-docker-application.properties       |  1 +
 .../snippets/quarkus-builder-script-kubernetes.sh  | 39 ++++++++++
 .../snippets/quarkus-builder-script-openshift.sh   | 41 ++++++++++
 .../spring-boot-builder-script-kubernetes.sh       | 31 ++++++++
 .../spring-boot-builder-script-openshift.sh        | 29 +++++++
 19 files changed, 400 insertions(+), 99 deletions(-)

diff --git 
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForGitea.java
 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForGitea.java
index da52c520..c6386808 100644
--- 
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForGitea.java
+++ 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForGitea.java
@@ -17,11 +17,7 @@
 package org.apache.camel.karavan.docker;
 
 import com.github.dockerjava.api.command.ExecCreateCmdResponse;
-import com.github.dockerjava.api.command.HealthState;
 import com.github.dockerjava.api.model.Container;
-import io.quarkus.vertx.ConsumeEvent;
-import io.vertx.core.eventbus.EventBus;
-import io.vertx.core.json.Json;
 import jakarta.enterprise.context.ApplicationScoped;
 import jakarta.inject.Inject;
 import org.apache.camel.karavan.infinispan.model.ContainerStatus;
@@ -31,18 +27,9 @@ import org.apache.camel.karavan.service.GitService;
 import org.apache.camel.karavan.service.GiteaService;
 import org.jboss.logging.Logger;
 
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-import java.nio.charset.StandardCharsets;
-import java.util.HashMap;
-import java.util.Map;
-
 @ApplicationScoped
 public class DockerForGitea {
 
-    public static final String GITEA_CREATE_INSTANCE_DELAY = 
"GITEA_CREATE_INSTANCE_DELAY";
-    public static final String GITEA_CREATE_INSTANCE = "GITEA_CREATE_INSTANCE";
-
     private static final Logger LOGGER = 
Logger.getLogger(DockerForGitea.class.getName());
 
     protected static final String GITEA_CONTAINER_NAME = "gitea";
diff --git 
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForInfinispan.java
 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForInfinispan.java
index 54774463..de1a33d7 100644
--- 
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForInfinispan.java
+++ 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForInfinispan.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.karavan.docker;
 
-import io.vertx.core.eventbus.EventBus;
 import jakarta.enterprise.context.ApplicationScoped;
 import jakarta.inject.Inject;
 import org.apache.camel.karavan.infinispan.model.ContainerStatus;
@@ -24,9 +23,6 @@ import org.apache.camel.karavan.service.CodeService;
 import org.eclipse.microprofile.config.inject.ConfigProperty;
 import org.jboss.logging.Logger;
 
-import java.util.Arrays;
-import java.util.List;
-
 @ApplicationScoped
 public class DockerForInfinispan {
 
@@ -58,15 +54,4 @@ public class DockerForInfinispan {
             LOGGER.error(e.getCause().getMessage());
         }
     }
-
-//    public void checkInfinispanHealth() {
-//        dockerService.listContainers(false).stream()
-//                .filter(c -> c.getState().equals("running"))
-//                .forEach(c -> {
-//                    HealthState hs = 
dockerService.inspectContainer(c.getId()).getState().getHealth();
-//                    if (c.getNames()[0].equals("/" + 
INFINISPAN_CONTAINER_NAME)) {
-//                        eventBus.publish(INFINISPAN_STARTED, hs.getStatus());
-//                    }
-//                });
-//    }
 }
diff --git 
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForKaravan.java
 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForKaravan.java
index 66d5b0eb..38a5a563 100644
--- 
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForKaravan.java
+++ 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForKaravan.java
@@ -50,6 +50,7 @@ public class DockerForKaravan {
         dockerService.runContainer(projectId);
         dockerService.copyFiles(projectId, "/code", files);
     }
+
     protected void createDevmodeContainer(String projectId, String 
jBangOptions, Map<Integer, Integer> ports) throws InterruptedException {
         LOGGER.infof("DevMode starting for %s with JBANG_OPTIONS=%s", 
projectId, jBangOptions);
 
@@ -68,6 +69,95 @@ public class DockerForKaravan {
         LOGGER.infof("DevMode started for %s", projectId);
     }
 
+    public void runBuildProject(String projectId, String script, Map<String, 
String> files) throws Exception {
+//        createBuildContainer(projectId, jBangOptions, ports);
+//        dockerService.runContainer(projectId);
+//        dockerService.copyFiles(projectId, "/code", files);
+
+
+        //        String scriptName = "camel-main-builder-script-docker.sh";
+//        String script = getResourceFile("/scripts/" + scriptName);
+//        try {
+//            CreateContainerResponse res = 
dockerClient.createContainerCmd("test")
+//                    .withName("xxx")
+//                    
.withImage("ghcr.io/apache/camel-karavan-devmode:4.0.0-RC2")
+//                    .withCmd("/karavan/"+scriptName)
+//                    .withEnv("GIT_BRANCH=main",
+//                            
"GIT_REPOSITORY=http://gitea:3000/karavan/karavan.git";,
+//                            "GIT_USERNAME=karavan",
+//                            "GIT_PASSWORD=karavan",
+//                            "PROJECT_ID=zzzzz",
+//                            "CAMEL_VERSION=4.0.0",
+//                            "IMAGE_REGISTRY=registry:5000",
+//                            "IMAGE_GROUP=karavan")
+//                    .withHostConfig(new 
HostConfig().withNetworkMode("karavan")).exec();
+//
+//        } catch (Exception e) {
+//            System.out.println(e.getMessage());
+//        }
+//
+//        Container c = 
dockerClient.listContainersCmd().withShowAll(true).withNameFilter(Collections.singleton("xxx")).exec().get(0);
+//
+//        String temp = 
Vertx.vertx().fileSystem().createTempDirectoryBlocking("xxx");
+//        String path = temp + File.separator + scriptName;
+//        Vertx.vertx().fileSystem().writeFileBlocking(path, 
Buffer.buffer(script));
+//
+//        try (ByteArrayOutputStream byteArrayOutputStream = new 
ByteArrayOutputStream();
+//                TarArchiveOutputStream tarArchive = new 
TarArchiveOutputStream(byteArrayOutputStream)) {
+//            
tarArchive.setLongFileMode(TarArchiveOutputStream.LONGFILE_POSIX);
+//            
tarArchive.setBigNumberMode(TarArchiveOutputStream.BIGNUMBER_POSIX);
+//
+//            TarArchiveEntry tarEntry = new TarArchiveEntry(new File(path));
+//            tarEntry.setName(scriptName);
+//            tarEntry.setMode(0700); //
+//            tarArchive.putArchiveEntry(tarEntry);
+//            IOUtils.write(Files.readAllBytes(Paths.get(path)), tarArchive);
+//            tarArchive.closeArchiveEntry();
+//            tarArchive.finish();
+//
+//            dockerClient.copyArchiveToContainerCmd(c.getId())
+//                    .withTarInputStream(new 
ByteArrayInputStream(byteArrayOutputStream.toByteArray()))
+//                    .withRemotePath("/karavan").exec();
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+
+//        dockerClient.startContainerCmd(c.getId()).exec();
+    }
+
+
+    protected void createBuildContainer(String projectId, Map<Integer, 
Integer> ports) throws InterruptedException {
+        LOGGER.infof("Starting Build Container for %s ", projectId);
+
+        List<String> env = List.of(
+                "GIT_REPOSITORY=http://gitea:3000/karavan/karavan.git";,
+                            "GIT_USERNAME=karavan",
+                            "GIT_PASSWORD=karavan",
+                            "PROJECT_ID=" + projectId,
+                            "CAMEL_VERSION=4.0.0",
+                            "IMAGE_REGISTRY=registry:5000",
+                            "IMAGE_GROUP=karavan"
+        );
+
+//                    .withCmd("/karavan/"+scriptName)
+//                    .withEnv("GIT_BRANCH=main",
+//                            
"GIT_REPOSITORY=http://gitea:3000/karavan/karavan.git";,
+//                            "GIT_USERNAME=karavan",
+//                            "GIT_PASSWORD=karavan",
+//                            "PROJECT_ID=zzzzz",
+//                            "CAMEL_VERSION=4.0.0",
+//                            "IMAGE_REGISTRY=registry:5000",
+//                            "IMAGE_GROUP=karavan")
+//                    .withHostConfig(new 
HostConfig().withNetworkMode("karavan")).exec();
+
+        dockerService.createContainer(projectId + "-builder", devmodeImage,
+                env, ports, new HealthCheck(),
+                Map.of(LABEL_TYPE, 
ContainerStatus.ContainerType.devmode.name(), LABEL_PROJECT_ID, projectId),
+                Map.of());
+
+        LOGGER.infof("Build Container started for %s", projectId);
+    }
+
     public void createDevserviceContainer(DockerComposeService 
dockerComposeService) throws InterruptedException {
         LOGGER.infof("DevService starting for ", 
dockerComposeService.getContainer_name());
         dockerService.createContainerFromCompose(dockerComposeService, 
ContainerStatus.ContainerType.devservice);
diff --git 
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForInfinispan.java
 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForRegistry.java
similarity index 53%
copy from 
karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForInfinispan.java
copy to 
karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForRegistry.java
index 54774463..b2d1fa4e 100644
--- 
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForInfinispan.java
+++ 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForRegistry.java
@@ -16,28 +16,18 @@
  */
 package org.apache.camel.karavan.docker;
 
-import io.vertx.core.eventbus.EventBus;
 import jakarta.enterprise.context.ApplicationScoped;
 import jakarta.inject.Inject;
 import org.apache.camel.karavan.infinispan.model.ContainerStatus;
 import org.apache.camel.karavan.service.CodeService;
-import org.eclipse.microprofile.config.inject.ConfigProperty;
 import org.jboss.logging.Logger;
 
-import java.util.Arrays;
-import java.util.List;
-
 @ApplicationScoped
-public class DockerForInfinispan {
-
-    private static final Logger LOGGER = 
Logger.getLogger(DockerForInfinispan.class.getName());
+public class DockerForRegistry {
 
-    protected static final String INFINISPAN_CONTAINER_NAME = "infinispan";
+    private static final Logger LOGGER = 
Logger.getLogger(DockerForRegistry.class.getName());
 
-    @ConfigProperty(name = "karavan.infinispan.username")
-    String infinispanUsername;
-    @ConfigProperty(name = "karavan.infinispan.password")
-    String infinispanPassword;
+    protected static final String REGISTRY_CONTAINER_NAME = "registry";
 
     @Inject
     DockerService dockerService;
@@ -45,28 +35,15 @@ public class DockerForInfinispan {
     @Inject
     CodeService codeService;
 
-    public void startInfinispan() {
+    public void startRegistry() {
         try {
-            LOGGER.info("Infinispan is starting...");
-            var compose = 
codeService.getInternalDockerComposeService(INFINISPAN_CONTAINER_NAME);
-            compose.addEnvironment("USER", infinispanUsername);
-            compose.addEnvironment("PASS", infinispanPassword);
+            LOGGER.info("Registry is starting...");
+            var compose = 
codeService.getInternalDockerComposeService(REGISTRY_CONTAINER_NAME);
             dockerService.createContainerFromCompose(compose, 
ContainerStatus.ContainerType.internal);
-            dockerService.runContainer(INFINISPAN_CONTAINER_NAME);
-            LOGGER.info("Infinispan is started");
+            dockerService.runContainer(REGISTRY_CONTAINER_NAME);
+            LOGGER.info("Registry is started");
         } catch (Exception e) {
             LOGGER.error(e.getCause().getMessage());
         }
     }
-
-//    public void checkInfinispanHealth() {
-//        dockerService.listContainers(false).stream()
-//                .filter(c -> c.getState().equals("running"))
-//                .forEach(c -> {
-//                    HealthState hs = 
dockerService.inspectContainer(c.getId()).getState().getHealth();
-//                    if (c.getNames()[0].equals("/" + 
INFINISPAN_CONTAINER_NAME)) {
-//                        eventBus.publish(INFINISPAN_STARTED, hs.getStatus());
-//                    }
-//                });
-//    }
 }
diff --git 
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerService.java
 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerService.java
index 5a2932c4..04ef2043 100644
--- 
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerService.java
+++ 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerService.java
@@ -187,7 +187,6 @@ public class DockerService extends DockerServiceUtils {
                             .withMounts(mounts)
                     .withNetworkMode(NETWORK_NAME));
 
-
             CreateContainerResponse response = createContainerCmd.exec();
             LOGGER.info("Container created: " + response.getId());
             return getDockerClient().listContainersCmd().withShowAll(true)
diff --git 
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/CodeService.java
 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/CodeService.java
index e9e0893b..594be91b 100644
--- 
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/CodeService.java
+++ 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/CodeService.java
@@ -107,7 +107,7 @@ public class CodeService {
         return new ProjectFile(APPLICATION_PROPERTIES_FILENAME, code, 
project.getProjectId(), Instant.now().toEpochMilli());
     }
 
-    private String getTemplateText(String fileName) {
+    public String getTemplateText(String fileName) {
         try {
             List<ProjectFile> files = 
infinispanService.getProjectFiles(Project.Type.templates.name());
             return files.stream().filter(f -> 
f.getName().equalsIgnoreCase(fileName))
diff --git 
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/KaravanService.java
 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/KaravanService.java
index c5a77168..744ed95d 100644
--- 
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/KaravanService.java
+++ 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/KaravanService.java
@@ -24,7 +24,7 @@ import io.vertx.core.eventbus.EventBus;
 import jakarta.inject.Singleton;
 import org.apache.camel.karavan.docker.DockerForGitea;
 import org.apache.camel.karavan.docker.DockerForInfinispan;
-import org.apache.camel.karavan.docker.DockerForKaravan;
+import org.apache.camel.karavan.docker.DockerForRegistry;
 import org.apache.camel.karavan.docker.DockerService;
 import org.apache.camel.karavan.infinispan.InfinispanService;
 import org.apache.camel.karavan.kubernetes.KubernetesService;
@@ -44,6 +44,9 @@ public class KaravanService {
     @ConfigProperty(name = "karavan.git-install-gitea")
     boolean giteaInstall;
 
+    @ConfigProperty(name = "karavan.image-registry-install-registry")
+    boolean registryInstall;
+
     @Inject
     KubernetesService kubernetesService;
 
@@ -54,7 +57,8 @@ public class KaravanService {
     DockerForGitea dockerForGitea;
 
     @Inject
-    DockerForKaravan dockerForKaravan;
+    DockerForRegistry dockerForRegistry;
+
     @Inject
     DockerForInfinispan dockerForInfinispan;
 
@@ -98,6 +102,9 @@ public class KaravanService {
                 giteaService.install();
                 dockerForGitea.createGiteaUser();
             }
+            if (registryInstall) {
+                dockerForRegistry.startRegistry();
+            }
         }
     }
 
diff --git 
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java
 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java
index 009e6ee8..8740d724 100644
--- 
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java
+++ 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java
@@ -24,10 +24,7 @@ import jakarta.ws.rs.core.Response;
 import org.apache.camel.karavan.docker.DockerForKaravan;
 import org.apache.camel.karavan.docker.model.DockerComposeService;
 import org.apache.camel.karavan.infinispan.InfinispanService;
-import org.apache.camel.karavan.infinispan.model.ContainerStatus;
-import org.apache.camel.karavan.infinispan.model.GitRepo;
-import org.apache.camel.karavan.infinispan.model.Project;
-import org.apache.camel.karavan.infinispan.model.ProjectFile;
+import org.apache.camel.karavan.infinispan.model.*;
 import org.apache.camel.karavan.kubernetes.KubernetesService;
 import org.apache.camel.karavan.shared.ConfigService;
 import org.apache.camel.karavan.shared.EventType;
@@ -42,6 +39,7 @@ import org.jboss.logging.Logger;
 import jakarta.enterprise.context.ApplicationScoped;
 import jakarta.enterprise.inject.Default;
 import jakarta.inject.Inject;
+
 import java.time.Instant;
 import java.util.List;
 import java.util.Map;
@@ -56,7 +54,7 @@ import static 
org.apache.camel.karavan.service.CodeService.PROJECT_COMPOSE_FILEN
 @Default
 @Readiness
 @ApplicationScoped
-public class ProjectService implements HealthCheck{
+public class ProjectService implements HealthCheck {
 
     private static final Logger LOGGER = 
Logger.getLogger(ProjectService.class.getName());
 
@@ -89,15 +87,14 @@ public class ProjectService implements HealthCheck{
 
     @Override
     public HealthCheckResponse call() {
-        if(ready.get()) {
+        if (ready.get()) {
             return HealthCheckResponse.named("project").up().build();
-        }
-        else {
+        } else {
             return HealthCheckResponse.named("project").down().build();
         }
     }
 
-    public String runProjectWithJBangOptions(Project project, 
@PathParam("jBangOptions") String jBangOptions) throws Exception {
+    public String runProjectWithJBangOptions(Project project, String 
jBangOptions) throws Exception {
         String containerName = project.getProjectId();
         ContainerStatus status = 
infinispanService.getDevModeContainerStatus(project.getProjectId(), 
environment);
         if (status == null) {
@@ -111,7 +108,7 @@ public class ProjectService implements HealthCheck{
             if (ConfigService.inKubernetes()) {
                 kubernetesService.runDevModeContainer(project, jBangOptions);
             } else {
-                Map<String, String> files  = 
infinispanService.getProjectFiles(project.getProjectId()).stream()
+                Map<String, String> files = 
infinispanService.getProjectFiles(project.getProjectId()).stream()
                         .filter(f -> !Objects.equals(f.getName(), 
PROJECT_COMPOSE_FILENAME))
                         .collect(Collectors.toMap(ProjectFile::getName, 
ProjectFile::getCode));
                 ProjectFile compose = 
infinispanService.getProjectFile(project.getProjectId(), 
PROJECT_COMPOSE_FILENAME);
@@ -124,10 +121,38 @@ public class ProjectService implements HealthCheck{
         }
     }
 
+    public String buildProject(Project project) throws Exception {
+        if (ConfigService.inKubernetes()) {
+            return kubernetesService.createPipelineRun(project);
+        } else {
+            Map<String, String> files = 
infinispanService.getProjectFiles(project.getProjectId()).stream()
+                    .filter(f -> !Objects.equals(f.getName(), 
PROJECT_COMPOSE_FILENAME))
+                    .collect(Collectors.toMap(ProjectFile::getName, 
ProjectFile::getCode));
+            ProjectFile compose = 
infinispanService.getProjectFile(project.getProjectId(), 
PROJECT_COMPOSE_FILENAME);
+            DockerComposeService dcs = 
codeService.convertToDockerComposeService(compose.getCode(), 
project.getProjectId());
+
+            String templateName = project.getRuntime() + 
"-builder-script-docker.sh";
+            String script = codeService.getTemplateText(templateName);
+
+            GitConfig gitConfig = gitService.getGitConfig();
+            List<String> env = List.of(
+                    "GIT_REPOSITORY=" + gitConfig.getUri(),
+                    "GIT_USERNAME=" + gitConfig.getUsername(),
+                    "GIT_PASSWORD=" + gitConfig.getPassword(),
+                    "PROJECT_ID=" + project.getProjectId(),
+                    "IMAGE_REGISTRY=registry:5000",
+                    "IMAGE_GROUP=karavan"
+            );
+
+            dockerForKaravan.runBuildProject(project.getProjectId(), script, 
files);
+            return project.getProjectId();
+        }
+    }
+
     public Project save(Project project) throws Exception {
         boolean isNew = infinispanService.getProject(project.getProjectId()) 
== null;
         infinispanService.saveProject(project);
-        if (isNew){
+        if (isNew) {
             ProjectFile appProp = 
codeService.getApplicationProperties(project);
             infinispanService.saveProjectFile(appProp);
             if (!ConfigService.inKubernetes()) {
@@ -198,11 +223,11 @@ public class ProjectService implements HealthCheck{
                 String folderName = repo.getName();
                 if (folderName.equals(Project.Type.templates.name())) {
                     project = new Project(Project.Type.templates.name(), 
"Templates", "Templates", "", repo.getCommitId(), 
repo.getLastCommitTimestamp(), Project.Type.templates);
-                } else if (folderName.equals(Project.Type.kamelets.name())){
+                } else if (folderName.equals(Project.Type.kamelets.name())) {
                     project = new Project(Project.Type.kamelets.name(), 
"Custom Kamelets", "Custom Kamelets", "", repo.getCommitId(), 
repo.getLastCommitTimestamp(), Project.Type.kamelets);
-                } else if (folderName.equals(Project.Type.pipelines.name())){
+                } else if (folderName.equals(Project.Type.pipelines.name())) {
                     project = new Project(Project.Type.pipelines.name(), 
"Pipelines", "CI/CD Pipelines", "", repo.getCommitId(), 
repo.getLastCommitTimestamp(), Project.Type.pipelines);
-                } else if (folderName.equals(Project.Type.services.name())){
+                } else if (folderName.equals(Project.Type.services.name())) {
                     project = new Project(Project.Type.services.name(), 
"Services", "Development Services", "", repo.getCommitId(), 
repo.getLastCommitTimestamp(), Project.Type.services);
                 } else {
                     project = getProjectFromRepo(repo);
@@ -271,7 +296,7 @@ public class ProjectService implements HealthCheck{
     void addKameletsProject() {
         LOGGER.info("Add custom kamelets project if not exists");
         try {
-            Project kamelets  = 
infinispanService.getProject(Project.Type.kamelets.name());
+            Project kamelets = 
infinispanService.getProject(Project.Type.kamelets.name());
             if (kamelets == null) {
                 kamelets = new Project(Project.Type.kamelets.name(), "Custom 
Kamelets", "Custom Kamelets", "", "", Instant.now().toEpochMilli(), 
Project.Type.kamelets);
                 infinispanService.saveProject(kamelets);
@@ -285,7 +310,7 @@ public class ProjectService implements HealthCheck{
     void addTemplatesProject() {
         LOGGER.info("Add templates project if not exists");
         try {
-            Project templates  = 
infinispanService.getProject(Project.Type.templates.name());
+            Project templates = 
infinispanService.getProject(Project.Type.templates.name());
             if (templates == null) {
                 templates = new Project(Project.Type.templates.name(), 
"Templates", "Templates", "", "", Instant.now().toEpochMilli(), 
Project.Type.templates);
                 infinispanService.saveProject(templates);
@@ -304,7 +329,7 @@ public class ProjectService implements HealthCheck{
     void addServicesProject() {
         LOGGER.info("Add services project if not exists");
         try {
-            Project services  = 
infinispanService.getProject(Project.Type.services.name());
+            Project services = 
infinispanService.getProject(Project.Type.services.name());
             if (services == null) {
                 services = new Project(Project.Type.services.name(), 
"Services", "Development Services", "", "", Instant.now().toEpochMilli(), 
Project.Type.services);
                 infinispanService.saveProject(services);
@@ -323,7 +348,7 @@ public class ProjectService implements HealthCheck{
     void addPipelinesProject() {
         LOGGER.info("Add pipelines project if not exists");
         try {
-            Project pipelines  = 
infinispanService.getProject(Project.Type.pipelines.name());
+            Project pipelines = 
infinispanService.getProject(Project.Type.pipelines.name());
             if (pipelines == null) {
                 pipelines = new Project(Project.Type.pipelines.name(), 
"Pipelines", "CI/CD Pipelines", "", "", Instant.now().toEpochMilli(), 
Project.Type.pipelines);
                 infinispanService.saveProject(pipelines);
@@ -340,7 +365,7 @@ public class ProjectService implements HealthCheck{
     }
 
     public String getDevServiceCode() {
-        List <ProjectFile> files = 
infinispanService.getProjectFiles(Project.Type.services.name());
+        List<ProjectFile> files = 
infinispanService.getProjectFiles(Project.Type.services.name());
         Optional<ProjectFile> file = files.stream().filter(f -> 
f.getName().equals(DEV_SERVICES_FILENAME)).findFirst();
         return file.orElse(new ProjectFile()).getCode();
     }
diff --git a/karavan-web/karavan-app/src/main/resources/application.properties 
b/karavan-web/karavan-app/src/main/resources/application.properties
index cca3ea01..2aeb804a 100644
--- a/karavan-web/karavan-app/src/main/resources/application.properties
+++ b/karavan-web/karavan-app/src/main/resources/application.properties
@@ -16,6 +16,13 @@ karavan.git-branch=main
 karavan.git-install-gitea=true
 karavan.git-pull-interval=disabled
 
+# Image registry configuration
+karavan.image-registry=localhost:5555
+karavan.image-group=karavan
+karavan.image-registry-username=
+karavan.image-registry-password=
+karavan.image-registry-install-registry=true
+
 # Infinispan container config in Docker
 karavan.infinispan.image=quay.io/infinispan/server:14.0.6.Final
 karavan.infinispan.port=11222:11222
diff --git 
a/karavan-web/karavan-app/src/main/resources/services/devservices.yaml 
b/karavan-web/karavan-app/src/main/resources/services/devservices.yaml
index e921cd22..b385a2b2 100644
--- a/karavan-web/karavan-app/src/main/resources/services/devservices.yaml
+++ b/karavan-web/karavan-app/src/main/resources/services/devservices.yaml
@@ -12,11 +12,6 @@ services:
     environment:
       AMQ_USER: artemis
       AMQ_PASSWORD: artemis
-    healthcheck:
-      test: ["CMD-SHELL", "curl -u artemis:artemis 
http://artemis:8161/console/jolokia";]
-      interval: 5s
-      timeout: 5s
-      retries: 5
 
   zookeeper:
     image: confluentinc/cp-zookeeper:latest
diff --git a/karavan-web/karavan-app/src/main/resources/services/internal.yaml 
b/karavan-web/karavan-app/src/main/resources/services/internal.yaml
index 413e2061..db220a47 100644
--- a/karavan-web/karavan-app/src/main/resources/services/internal.yaml
+++ b/karavan-web/karavan-app/src/main/resources/services/internal.yaml
@@ -7,21 +7,15 @@ services:
     restart: always
     ports:
       - "11222:11222"
-    healthcheck:
-      test: [ "CMD", "curl", "-f", 
"http://localhost:11222/rest/v2/cache-managers/default/health/status"; ]
-      interval: 30s
-      timeout: 10s
-      retries: 10
-      start_period: 10s
 
   gitea:
     image: gitea/gitea:1.20.2-rootless
     restart: always
     ports:
       - "3000:3000"
-    healthcheck:
-      test: [ "CMD", "curl", "-fss", "127.0.0.1:3000/api/healthz" ]
-      interval: 30s
-      timeout: 10s
-      retries: 10
-      start_period: 2s
+
+  registry:
+    image: registry:2
+    restart: always
+    ports:
+      - "5555:5000"
\ No newline at end of file
diff --git 
a/karavan-web/karavan-app/src/main/resources/snippets/camel-main-builder-script-docker.sh
 
b/karavan-web/karavan-app/src/main/resources/snippets/camel-main-builder-script-docker.sh
new file mode 100644
index 00000000..e28483e1
--- /dev/null
+++ 
b/karavan-web/karavan-app/src/main/resources/snippets/camel-main-builder-script-docker.sh
@@ -0,0 +1,34 @@
+#!/usr/bin/env bash
+CHECKOUT_DIR="/scripts"
+KAMELETS_DIR="/scripts/kamelets"
+
+if  [[ ${GIT_REPOSITORY} == https* ]] ;
+then
+    replacer=https://${GIT_USERNAME}:${GIT_PASSWORD}@
+    prefix=https://
+    url="${GIT_REPOSITORY/$prefix/$replacer}"
+    echo url
+    git clone --depth 1 --branch ${GIT_BRANCH} $url ${CHECKOUT_DIR}
+elif [[ ${GIT_REPOSITORY} == http* ]] ;
+then
+  replacer=http://${GIT_USERNAME}:${GIT_PASSWORD}@
+      prefix=http://
+      url="${GIT_REPOSITORY/$prefix/$replacer}"
+      echo url
+      git clone --depth 1 --branch ${GIT_BRANCH} $url ${CHECKOUT_DIR}
+else
+    git clone --depth 1 --branch ${GIT_BRANCH} ${GIT_REPOSITORY} 
${CHECKOUT_DIR}
+fi
+
+cd ${CHECKOUT_DIR}/${PROJECT_ID}
+
+jbang -Dcamel.jbang.version=${CAMEL_VERSION} camel@apache/camel export 
--local-kamelet-dir=${KAMELETS_DIR}
+
+export LAST_COMMIT=$(git rev-parse --short HEAD)
+export DATE=$(date '+%Y%m%d%H%M%S')
+
+mvn package jib:build \
+  -Djib.allowInsecureRegistries=true \
+  -Djib.to.image=${IMAGE_REGISTRY}/${IMAGE_GROUP}/${PROJECT_ID}:${DATE} \
+  -Djib.to.auth.username=${IMAGE_REGISTRY_USERNAME} \
+  -Djib.to.auth.password=${IMAGE_REGISTRY_PASSWORD}
\ No newline at end of file
diff --git 
a/karavan-web/karavan-app/src/main/resources/snippets/camel-main-builder-script-kubernetes.sh
 
b/karavan-web/karavan-app/src/main/resources/snippets/camel-main-builder-script-kubernetes.sh
new file mode 100644
index 00000000..fb3a074f
--- /dev/null
+++ 
b/karavan-web/karavan-app/src/main/resources/snippets/camel-main-builder-script-kubernetes.sh
@@ -0,0 +1,30 @@
+#!/usr/bin/env bash
+CHECKOUT_DIR="/scripts"
+KAMELETS_DIR="/scripts/kamelets"
+
+if  [[ $GIT_REPOSITORY == https* ]] ;
+then
+    replacer=https://$GIT_USERNAME:$GIT_PASSWORD@
+    prefix=https://
+    url="${GIT_REPOSITORY/$prefix/$replacer}"
+    git clone --depth 1 --branch ${GIT_BRANCH} $url ${CHECKOUT_DIR}
+else
+    git clone --depth 1 --branch ${GIT_BRANCH} ${GIT_REPOSITORY} 
${CHECKOUT_DIR}
+fi
+
+cd ${CHECKOUT_DIR}/$(inputs.params.project)
+
+jbang -Dcamel.jbang.version=$CAMEL_VERSION camel@apache/camel export 
--local-kamelet-dir=${KAMELETS_DIR}
+
+export LAST_COMMIT=$(git rev-parse --short HEAD)
+export DATE=$(date '+%Y%m%d%H%M%S')
+export TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
+export NAMESPACE=$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace)
+
+mvn package jib:build k8s:resource k8s:apply \
+  -Djkube.namespace=${NAMESPACE} \
+  -Djib.allowInsecureRegistries=true \
+  
-Djib.to.image=${IMAGE_REGISTRY}/${IMAGE_GROUP}/$(inputs.params.project):${DATE}
 \
+  -Djib.to.auth.username=${IMAGE_REGISTRY_USERNAME} \
+  -Djib.to.auth.password=${IMAGE_REGISTRY_PASSWORD}  \
+  --settings=$MAVEN_SETTINGS
\ No newline at end of file
diff --git 
a/karavan-web/karavan-app/src/main/resources/snippets/camel-main-builder-script-openshift.sh
 
b/karavan-web/karavan-app/src/main/resources/snippets/camel-main-builder-script-openshift.sh
new file mode 100644
index 00000000..ebad0494
--- /dev/null
+++ 
b/karavan-web/karavan-app/src/main/resources/snippets/camel-main-builder-script-openshift.sh
@@ -0,0 +1,30 @@
+#!/usr/bin/env bash
+CHECKOUT_DIR="/scripts"
+KAMELETS_DIR="/scripts/kamelets"
+
+if  [[ $GIT_REPOSITORY == https* ]] ;
+then
+    replacer=https://$GIT_USERNAME:$GIT_PASSWORD@
+    prefix=https://
+    url="${GIT_REPOSITORY/$prefix/$replacer}"
+    git clone --depth 1 --branch ${GIT_BRANCH} $url ${CHECKOUT_DIR}
+else
+    git clone --depth 1 --branch ${GIT_BRANCH} ${GIT_REPOSITORY} 
${CHECKOUT_DIR}
+fi
+
+cd ${CHECKOUT_DIR}/$(inputs.params.project)
+
+jbang -Dcamel.jbang.version=$CAMEL_VERSION camel@apache/camel export 
--local-kamelet-dir=${KAMELETS_DIR}
+
+export LAST_COMMIT=$(git rev-parse --short HEAD)
+export DATE=$(date '+%Y%m%d%H%M%S')
+export TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
+export NAMESPACE=$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace)
+
+mvn package jib:build oc:resource oc:apply \
+  -Djkube.namespace=${NAMESPACE} \
+  -Djib.allowInsecureRegistries=true \
+  
-Djib.to.image=${IMAGE_REGISTRY}/${IMAGE_GROUP}/$(inputs.params.project):${DATE}
 \
+  -Djib.to.auth.username=${IMAGE_REGISTRY_USERNAME} \
+  -Djib.to.auth.password=${IMAGE_REGISTRY_PASSWORD}  \
+  --settings=$MAVEN_SETTINGS
\ No newline at end of file
diff --git 
a/karavan-web/karavan-app/src/main/resources/snippets/camel-main-docker-application.properties
 
b/karavan-web/karavan-app/src/main/resources/snippets/camel-main-docker-application.properties
index acceb597..775e3033 100644
--- 
a/karavan-web/karavan-app/src/main/resources/snippets/camel-main-docker-application.properties
+++ 
b/karavan-web/karavan-app/src/main/resources/snippets/camel-main-docker-application.properties
@@ -10,3 +10,4 @@ camel.health.exposure-level=full
 camel.server.enabled=true
 camel.server.healthCheckEnabled=true
 camel.server.devConsoleEnabled=true
+jkube.version=1.13.1
diff --git 
a/karavan-web/karavan-app/src/main/resources/snippets/quarkus-builder-script-kubernetes.sh
 
b/karavan-web/karavan-app/src/main/resources/snippets/quarkus-builder-script-kubernetes.sh
new file mode 100644
index 00000000..b62a8981
--- /dev/null
+++ 
b/karavan-web/karavan-app/src/main/resources/snippets/quarkus-builder-script-kubernetes.sh
@@ -0,0 +1,39 @@
+#!/usr/bin/env bash
+CHECKOUT_DIR="/scripts"
+KAMELETS_DIR="/scripts/kamelets"
+
+if  [[ $GIT_REPOSITORY == https* ]] ;
+then
+    replacer=https://$GIT_USERNAME:$GIT_PASSWORD@
+    prefix=https://
+    url="${GIT_REPOSITORY/$prefix/$replacer}"
+    git clone --depth 1 --branch ${GIT_BRANCH} $url ${CHECKOUT_DIR}
+else
+    git clone --depth 1 --branch ${GIT_BRANCH} ${GIT_REPOSITORY} 
${CHECKOUT_DIR}
+fi
+
+cd ${CHECKOUT_DIR}/$(inputs.params.project)
+
+jbang -Dcamel.jbang.version=$CAMEL_VERSION camel@apache/camel export 
--local-kamelet-dir=${KAMELETS_DIR}
+
+export LAST_COMMIT=$(git rev-parse --short HEAD)
+export DATE=$(date '+%Y%m%d%H%M%S')
+export TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
+export NAMESPACE=$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace)
+
+mvn package \
+  -Dquarkus.container-image.build=true \
+  -Dquarkus.container-image.push=true \
+  -Dquarkus.container-image.insecure=true \
+  -Dquarkus.container-image.username=${IMAGE_REGISTRY_USERNAME} \
+  -Dquarkus.container-image.password=${IMAGE_REGISTRY_PASSWORD} \
+  -Dquarkus.container-image.registry=${IMAGE_REGISTRY} \
+  -Dquarkus.container-image.builder=jib \
+  -Dquarkus.kubernetes.deploy=true \
+  -Dquarkus.kubernetes.deployment-target=kubernetes \
+  -Dquarkus.kubernetes.add-version-to-label-selectors=false \
+  -Dquarkus.kubernetes.labels.\"app\"=$(inputs.params.project) \
+  -Dquarkus.kubernetes.labels.\"app.kubernetes.io/runtime\"=camel \
+  -Dquarkus.container-image.group=${IMAGE_GROUP} \
+  -Dquarkus.container-image.tag=${DATE} \
+  --settings=$MAVEN_SETTINGS
\ No newline at end of file
diff --git 
a/karavan-web/karavan-app/src/main/resources/snippets/quarkus-builder-script-openshift.sh
 
b/karavan-web/karavan-app/src/main/resources/snippets/quarkus-builder-script-openshift.sh
new file mode 100644
index 00000000..17669aae
--- /dev/null
+++ 
b/karavan-web/karavan-app/src/main/resources/snippets/quarkus-builder-script-openshift.sh
@@ -0,0 +1,41 @@
+#!/usr/bin/env bash
+CHECKOUT_DIR="/scripts"
+KAMELETS_DIR="/scripts/kamelets"
+
+if  [[ $GIT_REPOSITORY == https* ]] ;
+then
+    replacer=https://$GIT_USERNAME:$GIT_PASSWORD@
+    prefix=https://
+    url="${GIT_REPOSITORY/$prefix/$replacer}"
+    git clone --depth 1 --branch ${GIT_BRANCH} $url ${CHECKOUT_DIR}
+else
+    git clone --depth 1 --branch ${GIT_BRANCH} ${GIT_REPOSITORY} 
${CHECKOUT_DIR}
+fi
+
+cd ${CHECKOUT_DIR}/$(inputs.params.project)
+
+jbang -Dcamel.jbang.version=$CAMEL_VERSION camel@apache/camel export 
--local-kamelet-dir=${KAMELETS_DIR}
+
+export LAST_COMMIT=$(git rev-parse --short HEAD)
+export DATE=$(date '+%Y%m%d%H%M%S')
+export TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
+export NAMESPACE=$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace)
+
+mvn package \
+  -Dquarkus.container-image.build=true \
+  -Dquarkus.container-image.push=true \
+  -Dquarkus.container-image.insecure=true \
+  -Dquarkus.container-image.username=sa \
+  -Dquarkus.container-image.password=${TOKEN} \
+  -Dquarkus.container-image.registry=${IMAGE_REGISTRY} \
+  -Dquarkus.container-image.builder=jib \
+  -Dquarkus.kubernetes-client.master-url=kubernetes.default.svc \
+  -Dquarkus.kubernetes-client.token=${TOKEN} \
+  -Dquarkus.kubernetes.deploy=true \
+  -Dquarkus.openshift.deployment-kind=Deployment \
+  -Dquarkus.openshift.add-version-to-label-selectors=false \
+  -Dquarkus.openshift.labels.\"app\"=$(inputs.params.project) \
+  -Dquarkus.openshift.labels.\"app.openshift.io/runtime\"=camel \
+  -Dquarkus.container-image.group=${NAMESPACE} \
+  -Dquarkus.container-image.tag=${DATE} \
+  --settings=$MAVEN_SETTINGS
\ No newline at end of file
diff --git 
a/karavan-web/karavan-app/src/main/resources/snippets/spring-boot-builder-script-kubernetes.sh
 
b/karavan-web/karavan-app/src/main/resources/snippets/spring-boot-builder-script-kubernetes.sh
new file mode 100644
index 00000000..51f4ccc4
--- /dev/null
+++ 
b/karavan-web/karavan-app/src/main/resources/snippets/spring-boot-builder-script-kubernetes.sh
@@ -0,0 +1,31 @@
+#!/usr/bin/env bash
+CHECKOUT_DIR="/scripts"
+KAMELETS_DIR="/scripts/kamelets"
+
+if  [[ $GIT_REPOSITORY == https* ]] ;
+then
+    replacer=https://$GIT_USERNAME:$GIT_PASSWORD@
+    prefix=https://
+    url="${GIT_REPOSITORY/$prefix/$replacer}"
+    git clone --depth 1 --branch ${GIT_BRANCH} $url ${CHECKOUT_DIR}
+else
+    git clone --depth 1 --branch ${GIT_BRANCH} ${GIT_REPOSITORY} 
${CHECKOUT_DIR}
+fi
+
+cd ${CHECKOUT_DIR}/$(inputs.params.project)
+
+jbang -Dcamel.jbang.version=$CAMEL_VERSION camel@apache/camel export 
--local-kamelet-dir=${KAMELETS_DIR}
+
+export LAST_COMMIT=$(git rev-parse --short HEAD)
+export DATE=$(date '+%Y%m%d%H%M%S')
+export TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
+export NAMESPACE=$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace)
+
+mvn package k8s:build k8s:push k8s:resource k8s:apply \
+  -Pkubernetes \
+  -Djkube.namespace=${NAMESPACE} \
+  -Djkube.docker.push.registry=${IMAGE_REGISTRY} \
+  -Djkube.docker.username=${IMAGE_REGISTRY_USERNAME} \
+  -Djkube.docker.password=${IMAGE_REGISTRY_PASSWORD} \
+  
-Djkube.generator.name=${IMAGE_REGISTRY}/${IMAGE_GROUP}/$(inputs.params.project):${DATE}
 \
+  --settings=$MAVEN_SETTINGS
\ No newline at end of file
diff --git 
a/karavan-web/karavan-app/src/main/resources/snippets/spring-boot-builder-script-openshift.sh
 
b/karavan-web/karavan-app/src/main/resources/snippets/spring-boot-builder-script-openshift.sh
new file mode 100644
index 00000000..236abc22
--- /dev/null
+++ 
b/karavan-web/karavan-app/src/main/resources/snippets/spring-boot-builder-script-openshift.sh
@@ -0,0 +1,29 @@
+#!/usr/bin/env bash
+CHECKOUT_DIR="/scripts"
+KAMELETS_DIR="/scripts/kamelets"
+
+if  [[ $GIT_REPOSITORY == https* ]] ;
+then
+    replacer=https://$GIT_USERNAME:$GIT_PASSWORD@
+    prefix=https://
+    url="${GIT_REPOSITORY/$prefix/$replacer}"
+    git clone --depth 1 --branch ${GIT_BRANCH} $url ${CHECKOUT_DIR}
+else
+    git clone --depth 1 --branch ${GIT_BRANCH} ${GIT_REPOSITORY} 
${CHECKOUT_DIR}
+fi
+
+cd ${CHECKOUT_DIR}/$(inputs.params.project)
+
+jbang -Dcamel.jbang.version=$CAMEL_VERSION camel@apache/camel export 
--local-kamelet-dir=${KAMELETS_DIR}
+
+export LAST_COMMIT=$(git rev-parse --short HEAD)
+export DATE=$(date '+%Y%m%d%H%M%S')
+export TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
+export NAMESPACE=$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace)
+
+mvn package package oc:build oc:push oc:resource oc:apply \
+  -Popenshift \
+  -Djkube.namespace=${NAMESPACE} \
+  -Djkube.docker.push.registry=${IMAGE_REGISTRY} \
+  
-Djkube.generator.name=${IMAGE_REGISTRY}/${NAMESPACE}/$(inputs.params.project):${DATE}
 \
+  --settings=$MAVEN_SETTINGS
\ No newline at end of file


Reply via email to