You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ma...@apache.org on 2022/10/13 23:01:49 UTC

[camel-karavan] branch main updated (0dd6127 -> 54963ab)

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

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


    from 0dd6127  Fix issues with Tekton Task
     new 90d4418  Task and Pipeline fixes
     new 54963ab  Fix branch parameter name

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../org/apache/camel/karavan/model/GitConfig.java  | 14 +++---
 .../apache/camel/karavan/service/GitService.java   | 26 +++++-----
 .../src/main/resources/application.properties      |  4 +-
 karavan-cloud/{openshift => }/karavan-secret.yaml  |  4 +-
 .../java/org/apache/camel/karavan/Constants.java   |  2 +-
 .../org/apache/camel/karavan/KaravanPvcJbang.java  |  6 +--
 .../apache/camel/karavan/KaravanReconciler.java    | 51 +++++++++----------
 .../camel/karavan/KaravanTektonPipeline.java       | 30 ++++++------
 .../apache/camel/karavan/KaravanTektonTask.java    | 57 +++++++++++++++-------
 .../resources/karavan-quarkus-builder-script.sh    |  8 +--
 10 files changed, 112 insertions(+), 90 deletions(-)
 copy karavan-cloud/{openshift => }/karavan-secret.yaml (91%)


[camel-karavan] 01/02: Task and Pipeline fixes

Posted by ma...@apache.org.
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 90d44184bb6f2fc6cdbfe995ab1fff60b91937a2
Author: Marat Gubaidullin <ma...@gmail.com>
AuthorDate: Thu Oct 13 18:47:53 2022 -0400

    Task and Pipeline fixes
---
 .../java/org/apache/camel/karavan/Constants.java   |  2 +-
 .../org/apache/camel/karavan/KaravanPvcJbang.java  |  6 +--
 .../apache/camel/karavan/KaravanReconciler.java    | 51 ++++++++++------------
 .../camel/karavan/KaravanTektonPipeline.java       | 30 +++++++------
 .../apache/camel/karavan/KaravanTektonTask.java    | 49 +++++++++++++++------
 5 files changed, 80 insertions(+), 58 deletions(-)

diff --git a/karavan-operator/src/main/java/org/apache/camel/karavan/Constants.java b/karavan-operator/src/main/java/org/apache/camel/karavan/Constants.java
index 400b454..e79c734 100644
--- a/karavan-operator/src/main/java/org/apache/camel/karavan/Constants.java
+++ b/karavan-operator/src/main/java/org/apache/camel/karavan/Constants.java
@@ -13,7 +13,7 @@ public final class Constants {
     public static final String ROLEBINDING_KARAVAN_VIEW = "karavan-view";
     public static final String PVC_DATA = "karavan-data";
     public static final String PVC_M2_CACHE = "karavan-m2-cache";
-    public static final String PVC_JBANG = "karavan-jbang-cache";
+    public static final String PVC_JBANG_CACHE = "karavan-jbang-cache";
 
     public static final String PIPELINE_BUILD_QUARKUS = "karavan-pipeline-build-quarkus";
     public static final String TASK_BUILD_QUARKUS = "karavan-task-build-quarkus";
diff --git a/karavan-operator/src/main/java/org/apache/camel/karavan/KaravanPvcJbang.java b/karavan-operator/src/main/java/org/apache/camel/karavan/KaravanPvcJbang.java
index 16d79dd..81609fa 100644
--- a/karavan-operator/src/main/java/org/apache/camel/karavan/KaravanPvcJbang.java
+++ b/karavan-operator/src/main/java/org/apache/camel/karavan/KaravanPvcJbang.java
@@ -26,9 +26,9 @@ public class KaravanPvcJbang extends CRUDKubernetesDependentResource<PersistentV
     public PersistentVolumeClaim desired(Karavan karavan, Context<Karavan> context) {
         return new PersistentVolumeClaimBuilder()
                 .withNewMetadata()
-                .withName(Constants.PVC_JBANG)
+                .withName(Constants.PVC_JBANG_CACHE)
                 .withNamespace(karavan.getMetadata().getNamespace())
-                .withLabels(karavanReconciler.getLabels(Constants.PVC_JBANG, Map.of()))
+                .withLabels(karavanReconciler.getLabels(Constants.PVC_JBANG_CACHE, Map.of()))
                 .endMetadata()
                 .withNewSpec()
                 .withResources(new ResourceRequirementsBuilder().withRequests(Map.of("storage", new Quantity("2Gi"))).build())
@@ -39,7 +39,7 @@ public class KaravanPvcJbang extends CRUDKubernetesDependentResource<PersistentV
     }
 
     public ReconcileResult<PersistentVolumeClaim> reconcile(Karavan karavan, Context<Karavan> context) {
-        PersistentVolumeClaim pvc = getKubernetesClient().persistentVolumeClaims().inNamespace(karavan.getMetadata().getNamespace()).withName(Constants.PVC_JBANG).get();
+        PersistentVolumeClaim pvc = getKubernetesClient().persistentVolumeClaims().inNamespace(karavan.getMetadata().getNamespace()).withName(Constants.PVC_JBANG_CACHE).get();
         if (pvc == null) {
             var desired = desired(karavan, context);
             var createdResource = handleCreate(desired, karavan, context);
diff --git a/karavan-operator/src/main/java/org/apache/camel/karavan/KaravanReconciler.java b/karavan-operator/src/main/java/org/apache/camel/karavan/KaravanReconciler.java
index 761ddde..c0e4fc6 100644
--- a/karavan-operator/src/main/java/org/apache/camel/karavan/KaravanReconciler.java
+++ b/karavan-operator/src/main/java/org/apache/camel/karavan/KaravanReconciler.java
@@ -10,6 +10,7 @@ import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
 import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
 import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent;
 
+import java.time.Duration;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -17,19 +18,18 @@ import static io.javaoperatorsdk.operator.api.reconciler.Constants.WATCH_ALL_NAM
 
 @ControllerConfiguration(namespaces = WATCH_ALL_NAMESPACES, name = "camel-karavan-operator",
         dependents = {
-                @Dependent(type = KaravanServiceAccount.class),
-                @Dependent(type = KaravanRole.class),
-                @Dependent(type = KaravanRoleBinding.class),
-                @Dependent(type = KaravanRoleBindingView.class),
-                @Dependent(type = KaravanPvcData.class, name = Constants.PVC_DATA),
-                @Dependent(type = KaravanPvcM2Cache.class, name = Constants.PVC_M2_CACHE),
-                @Dependent(type = KaravanPvcJbang.class, name = Constants.PVC_JBANG),
-                @Dependent(type = KaravanTektonTask.class),
-                @Dependent(type = KaravanTektonPipeline.class),
-                @Dependent(type = KaravanDeployment.class),
-                @Dependent(name = "service", type = KaravanService.class),
+                @Dependent(name = "sa", type = KaravanServiceAccount.class),
+                @Dependent(name = "role", type = KaravanRole.class),
+                @Dependent(name = "role-binding", type = KaravanRoleBinding.class, dependsOn = {"role", "sa"}),
+                @Dependent(name = "role-binding-view", type = KaravanRoleBindingView.class),
+                @Dependent(name = Constants.PVC_DATA, type = KaravanPvcData.class),
+                @Dependent(name = Constants.PVC_M2_CACHE, type = KaravanPvcM2Cache.class),
+                @Dependent(name = Constants.PVC_JBANG_CACHE, type = KaravanPvcJbang.class),
+                @Dependent(name = Constants.TASK_BUILD_QUARKUS, type = KaravanTektonTask.class, dependsOn = {Constants.PVC_JBANG_CACHE, Constants.PVC_M2_CACHE}),
+                @Dependent(name = Constants.PIPELINE_BUILD_QUARKUS, type = KaravanTektonPipeline.class, dependsOn = {Constants.TASK_BUILD_QUARKUS, Constants.PVC_JBANG_CACHE, Constants.PVC_M2_CACHE}),
+                @Dependent(name = "deployment", type = KaravanDeployment.class, dependsOn = {Constants.PVC_DATA}),
+                @Dependent(name = "service", type = KaravanService.class, dependsOn = "deployment"),
                 @Dependent(type = KaravanRoute.class, dependsOn = "service", reconcilePrecondition = KaravanRoute.class)
-//        @Dependent(type = IngressDependent.class, dependsOn = "service", readyPostcondition = IngressDependent.class)
         })
 public class KaravanReconciler implements Reconciler<Karavan> {
 
@@ -38,26 +38,23 @@ public class KaravanReconciler implements Reconciler<Karavan> {
     @ConfigProperty(name = "karavan.version")
     String version;
 
-
     @Override
     public UpdateControl<Karavan> reconcile(Karavan karavan, Context<Karavan> context) throws Exception {
         final var name = karavan.getMetadata().getName();
         final var namespace = karavan.getMetadata().getNamespace();
         // retrieve the workflow reconciliation result and re-schedule if we have dependents that are not yet ready
-//        return context.managedDependentResourceContext().getWorkflowReconcileResult()
-//                .map(wrs -> {
-//                    if (wrs.allDependentResourcesReady()) {
-////                        final var url = IngressDependent.getExposedURL(
-////                                context.getSecondaryResource(Ingress.class).orElseThrow());
-//                        log.info("App {} is exposed and ready to be used at {}", name, namespace);
-        karavan.setStatus(new KaravanStatus(KaravanStatus.State.READY));
-        return UpdateControl.updateStatus(karavan);
-//                    } else {
-//                        final var duration = Duration.ofSeconds(5);
-//                        log.info("App {} is not ready yet, rescheduling reconciliation after {}s", name, duration.toSeconds());
-//                        return UpdateControl.<Karavan> noUpdate().rescheduleAfter(duration);
-//                    }
-//                }).orElseThrow();
+        return context.managedDependentResourceContext().getWorkflowReconcileResult()
+                .map(wrs -> {
+                    if (wrs.allDependentResourcesReady()) {
+                        log.info("Karavan is exposed and ready to be used at '{}' namespace", namespace);
+                        karavan.setStatus(new KaravanStatus(KaravanStatus.State.READY));
+                        return UpdateControl.updateStatus(karavan);
+                    } else {
+                        final var duration = Duration.ofSeconds(5);
+                        log.info("Karavan is not ready yet, rescheduling reconciliation after {}s", name, duration.toSeconds());
+                        return UpdateControl.<Karavan>noUpdate().rescheduleAfter(duration);
+                    }
+                }).orElseThrow();
     }
 
     protected Map<String, String> getLabels(String name, Map<String, String> labels) {
diff --git a/karavan-operator/src/main/java/org/apache/camel/karavan/KaravanTektonPipeline.java b/karavan-operator/src/main/java/org/apache/camel/karavan/KaravanTektonPipeline.java
index 13f0007..b8f11d5 100644
--- a/karavan-operator/src/main/java/org/apache/camel/karavan/KaravanTektonPipeline.java
+++ b/karavan-operator/src/main/java/org/apache/camel/karavan/KaravanTektonPipeline.java
@@ -1,32 +1,22 @@
 package org.apache.camel.karavan;
 
-import io.fabric8.kubernetes.api.model.EnvVarBuilder;
-import io.fabric8.kubernetes.api.model.EnvVarSourceBuilder;
-import io.fabric8.tekton.pipeline.v1beta1.Param;
+import io.fabric8.tekton.client.DefaultTektonClient;
 import io.fabric8.tekton.pipeline.v1beta1.ParamBuilder;
 import io.fabric8.tekton.pipeline.v1beta1.ParamSpecBuilder;
 import io.fabric8.tekton.pipeline.v1beta1.Pipeline;
 import io.fabric8.tekton.pipeline.v1beta1.PipelineBuilder;
-import io.fabric8.tekton.pipeline.v1beta1.PipelineTask;
 import io.fabric8.tekton.pipeline.v1beta1.PipelineTaskBuilder;
 import io.fabric8.tekton.pipeline.v1beta1.PipelineWorkspaceDeclaration;
-import io.fabric8.tekton.pipeline.v1beta1.StepBuilder;
 import io.fabric8.tekton.pipeline.v1beta1.Task;
-import io.fabric8.tekton.pipeline.v1beta1.TaskBuilder;
-import io.fabric8.tekton.pipeline.v1beta1.TaskRef;
 import io.fabric8.tekton.pipeline.v1beta1.TaskRefBuilder;
-import io.fabric8.tekton.pipeline.v1beta1.WorkspaceDeclaration;
 import io.fabric8.tekton.pipeline.v1beta1.WorkspacePipelineTaskBinding;
 import io.javaoperatorsdk.operator.api.reconciler.Context;
+import io.javaoperatorsdk.operator.api.reconciler.dependent.ReconcileResult;
 import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource;
 import org.eclipse.microprofile.config.inject.ConfigProperty;
 
 import javax.inject.Inject;
-import java.io.BufferedReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
 import java.util.Map;
-import java.util.stream.Collectors;
 
 
 public class KaravanTektonPipeline extends CRUDKubernetesDependentResource<Pipeline, Karavan> {
@@ -61,15 +51,27 @@ public class KaravanTektonPipeline extends CRUDKubernetesDependentResource<Pipel
                                 .withTaskRef(new TaskRefBuilder().withKind("Task").withName(Constants.TASK_BUILD_QUARKUS).build())
                                 .withWorkspaces(
                                         new WorkspacePipelineTaskBinding(Constants.PVC_M2_CACHE, "", Constants.PVC_M2_CACHE),
-                                        new WorkspacePipelineTaskBinding(Constants.PVC_JBANG, "", Constants.PVC_JBANG)
+                                        new WorkspacePipelineTaskBinding(Constants.PVC_JBANG_CACHE, "", Constants.PVC_JBANG_CACHE)
                                 )
                                 .build()
                 )
                 .withWorkspaces(
                         new PipelineWorkspaceDeclaration("Maven Cache", Constants.PVC_M2_CACHE, false),
-                        new PipelineWorkspaceDeclaration("JBang Cache", Constants.PVC_JBANG, false)
+                        new PipelineWorkspaceDeclaration("JBang Cache", Constants.PVC_JBANG_CACHE, false)
                 )
                 .endSpec()
                 .build();
     }
+
+    @Override
+    public ReconcileResult<Pipeline> reconcile(Karavan karavan, Context<Karavan> context) {
+        Pipeline pipeline = new DefaultTektonClient(getKubernetesClient()).v1beta1().pipelines().inNamespace(karavan.getMetadata().getNamespace()).withName(Constants.PIPELINE_BUILD_QUARKUS).get();
+        if (pipeline == null) {
+            var desired = desired(karavan, context);
+            var createdResource = handleCreate(desired, karavan, context);
+            return ReconcileResult.resourceCreated(createdResource);
+        } else {
+            return ReconcileResult.noOperation(pipeline);
+        }
+    }
 }
diff --git a/karavan-operator/src/main/java/org/apache/camel/karavan/KaravanTektonTask.java b/karavan-operator/src/main/java/org/apache/camel/karavan/KaravanTektonTask.java
index 70d7782..cc7de42 100644
--- a/karavan-operator/src/main/java/org/apache/camel/karavan/KaravanTektonTask.java
+++ b/karavan-operator/src/main/java/org/apache/camel/karavan/KaravanTektonTask.java
@@ -3,16 +3,18 @@ package org.apache.camel.karavan;
 import io.fabric8.kubernetes.api.model.EnvVarBuilder;
 import io.fabric8.kubernetes.api.model.EnvVarSourceBuilder;
 import io.fabric8.kubernetes.api.model.Secret;
+import io.fabric8.kubernetes.api.model.rbac.Role;
 import io.fabric8.kubernetes.client.DefaultKubernetesClient;
 import io.fabric8.kubernetes.client.KubernetesClient;
-import io.fabric8.tekton.pipeline.v1beta1.ArrayOrString;
-import io.fabric8.tekton.pipeline.v1beta1.ParamSpec;
+import io.fabric8.openshift.client.OpenShiftClient;
+import io.fabric8.tekton.client.DefaultTektonClient;
 import io.fabric8.tekton.pipeline.v1beta1.ParamSpecBuilder;
 import io.fabric8.tekton.pipeline.v1beta1.StepBuilder;
 import io.fabric8.tekton.pipeline.v1beta1.Task;
 import io.fabric8.tekton.pipeline.v1beta1.TaskBuilder;
 import io.fabric8.tekton.pipeline.v1beta1.WorkspaceDeclaration;
 import io.javaoperatorsdk.operator.api.reconciler.Context;
+import io.javaoperatorsdk.operator.api.reconciler.dependent.ReconcileResult;
 import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource;
 import org.eclipse.microprofile.config.inject.ConfigProperty;
 
@@ -23,7 +25,6 @@ import java.io.InputStreamReader;
 import java.util.Map;
 import java.util.stream.Collectors;
 
-
 public class KaravanTektonTask extends CRUDKubernetesDependentResource<Task, Karavan> {
 
     @Inject
@@ -79,19 +80,37 @@ public class KaravanTektonTask extends CRUDKubernetesDependentResource<Task, Kar
                 )
                 .withWorkspaces(
                         new WorkspaceDeclaration("Maven Cache", "/root/.m2", Constants.PVC_M2_CACHE, false, false),
-                        new WorkspaceDeclaration("JBang Cache", "/jbang/.jbang/cache", Constants.PVC_JBANG, false, false)
+                        new WorkspaceDeclaration("JBang Cache", "/jbang/.jbang/cache", Constants.PVC_JBANG_CACHE, false, false)
                 )
                 .endSpec()
                 .build();
     }
 
+    @Override
+    public ReconcileResult<Task> reconcile(Karavan karavan, Context<Karavan> context) {
+        Task task = new DefaultTektonClient(getKubernetesClient()).v1beta1().tasks().inNamespace(karavan.getMetadata().getNamespace()).withName(Constants.TASK_BUILD_QUARKUS).get();
+        if (task == null) {
+            var desired = desired(karavan, context);
+            var createdResource = handleCreate(desired, karavan, context);
+            return ReconcileResult.resourceCreated(createdResource);
+        } else {
+            return ReconcileResult.noOperation(task);
+        }
+    }
+
     protected String getScript(Karavan karavan) {
-        boolean removeImageRegistry = !secretHasImageRegistry(karavan);
+        String imageRegistry = getImageRegistry(karavan);
         try {
             InputStream inputStream = KaravanTektonTask.class.getResourceAsStream("/karavan-quarkus-builder-script.sh");
             String data = new BufferedReader(new InputStreamReader(inputStream))
                     .lines()
-                    .filter(s -> !(removeImageRegistry && s.contains("Dquarkus.container-image.registry=${IMAGE_REGISTRY}")))
+                    .map(s -> {
+                        if (s.contains("quarkus.container-image.registry")) {
+                            return s.replace("${IMAGE_REGISTRY}", imageRegistry);
+                        } else {
+                            return s;
+                        }
+                    })
                     .collect(Collectors.joining(System.getProperty("line.separator")));
             return data;
         } catch (Exception e) {
@@ -99,18 +118,22 @@ public class KaravanTektonTask extends CRUDKubernetesDependentResource<Task, Kar
         }
     }
 
-    protected boolean secretHasImageRegistry(Karavan karavan) {
+    protected String getImageRegistry(Karavan karavan) {
+        String defaultValue = "${IMAGE_REGISTRY}";
+        String key = "image-registry";
         try {
             KubernetesClient kubernetesClient = new DefaultKubernetesClient();
+            boolean isOpenshift = kubernetesClient.isAdaptable(OpenShiftClient.class);
             Secret secret = kubernetesClient.secrets().inNamespace(karavan.getMetadata().getNamespace()).withName(Constants.NAME).get();
-            if (secret != null) {
-                String imageRegistry = secret.getStringData().get("image-registry");
-                System.out.println("imageRegistry = " +imageRegistry);
-                return imageRegistry != null;
+            if (secret != null && secret.getData().containsKey(key)) {
+                return defaultValue;
+            } else if (isOpenshift) {
+                return "image-registry.openshift-image-registry.svc:5000";
+            } else {
+                return defaultValue;
             }
-            return false;
         } catch (Exception e) {
-            return false;
+            return defaultValue;
         }
     }
 }


[camel-karavan] 02/02: Fix branch parameter name

Posted by ma...@apache.org.
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 54963ab156cfaf2c4a37dd8a70fdbddee17945c3
Author: Marat Gubaidullin <ma...@gmail.com>
AuthorDate: Thu Oct 13 19:01:41 2022 -0400

    Fix branch parameter name
---
 .../org/apache/camel/karavan/model/GitConfig.java  | 14 ++++++------
 .../apache/camel/karavan/service/GitService.java   | 26 +++++++++++-----------
 .../src/main/resources/application.properties      |  4 ++--
 karavan-cloud/karavan-secret.yaml                  | 19 ++++++++++++++++
 .../apache/camel/karavan/KaravanTektonTask.java    |  8 +++----
 .../resources/karavan-quarkus-builder-script.sh    |  8 +++----
 6 files changed, 49 insertions(+), 30 deletions(-)

diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/model/GitConfig.java b/karavan-app/src/main/java/org/apache/camel/karavan/model/GitConfig.java
index 2a5ac15..580c645 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/model/GitConfig.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/model/GitConfig.java
@@ -4,13 +4,13 @@ public class GitConfig {
     private String uri;
     private String username;
     private String password;
-    private String mainBranch;
+    private String branch;
 
-    public GitConfig(String uri, String username, String password, String mainBranch) {
+    public GitConfig(String uri, String username, String password, String branch) {
         this.uri = uri;
         this.username = username;
         this.password = password;
-        this.mainBranch = mainBranch;
+        this.branch = branch;
     }
 
     public String getUri() {
@@ -37,11 +37,11 @@ public class GitConfig {
         this.password = password;
     }
 
-    public String getMainBranch() {
-        return mainBranch;
+    public String getBranch() {
+        return branch;
     }
 
-    public void setMainBranch(String mainBranch) {
-        this.mainBranch = mainBranch;
+    public void setBranch(String branch) {
+        this.branch = branch;
     }
 }
diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/service/GitService.java b/karavan-app/src/main/java/org/apache/camel/karavan/service/GitService.java
index e2e1490..94321c0 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/service/GitService.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/service/GitService.java
@@ -74,22 +74,22 @@ public class GitService {
 
     private GitConfig getGitConfig(String name) {
         String propertiesPrefix = "karavan." + name + "-";
-        String mainBranch = ConfigProvider.getConfig().getValue(propertiesPrefix + "git-main", String.class);
+        String branch = ConfigProvider.getConfig().getValue(propertiesPrefix + "git-branch", String.class);
         if (kubernetesService.inKubernetes()){
             String kubernetesPrefix = name + "-";
             Secret secret =  kubernetesService.getKaravanSecret();
             String uri = new String(Base64.getDecoder().decode(secret.getData().get(kubernetesPrefix + "git-repository").getBytes(StandardCharsets.UTF_8)));
             String username = new String(Base64.getDecoder().decode(secret.getData().get(kubernetesPrefix + "git-username").getBytes(StandardCharsets.UTF_8)));
             String password = new String(Base64.getDecoder().decode(secret.getData().get(kubernetesPrefix + "git-password").getBytes(StandardCharsets.UTF_8)));
-            if (secret.getData().containsKey(kubernetesPrefix + "git-main")){
-                mainBranch = new String(Base64.getDecoder().decode(secret.getData().get(kubernetesPrefix + "git-main").getBytes(StandardCharsets.UTF_8)));
+            if (secret.getData().containsKey(kubernetesPrefix + "git-branch")){
+                branch = new String(Base64.getDecoder().decode(secret.getData().get(kubernetesPrefix + "git-branch").getBytes(StandardCharsets.UTF_8)));
             }
-            return new GitConfig(uri, username, password, mainBranch);
+            return new GitConfig(uri, username, password, branch);
         } else {
             String uri = ConfigProvider.getConfig().getValue(propertiesPrefix + "git-repository", String.class);
             String username = ConfigProvider.getConfig().getValue(propertiesPrefix + "git-username", String.class);
             String password = ConfigProvider.getConfig().getValue(propertiesPrefix + "git-password", String.class);
-            return new GitConfig(uri, username, password, mainBranch);
+            return new GitConfig(uri, username, password, branch);
         }
     }
 
@@ -102,17 +102,17 @@ public class GitService {
         LOGGER.infof("Temp folder created: {}", folder);
         Git git = null;
         try {
-            git = clone(folder, gitConfig.getUri(), gitConfig.getMainBranch(), cred);
-            checkout(git, false, null, null, gitConfig.getMainBranch());
+            git = clone(folder, gitConfig.getUri(), gitConfig.getBranch(), cred);
+            checkout(git, false, null, null, gitConfig.getBranch());
         } catch (RefNotFoundException e) {
             LOGGER.error("New repository");
-            git = init(folder, gitConfig.getUri(), gitConfig.getMainBranch());
+            git = init(folder, gitConfig.getUri(), gitConfig.getBranch());
         } catch (Exception e) {
             LOGGER.error("Error", e);
         }
         writeProjectToFolder(folder, project, files);
         addDeletedFilesToIndex(git, folder, project, files);
-        return commitAddedAndPush(git, gitConfig.getMainBranch(), cred).getId().getName();
+        return commitAddedAndPush(git, gitConfig.getBranch(), cred).getId().getName();
     }
 
     public List<Tuple2<String, String>> readKameletsFromRepository() {
@@ -123,8 +123,8 @@ public class GitService {
         String folder = vertx.fileSystem().createTempDirectoryBlocking(uuid);
         LOGGER.infof("Temp folder created: %s", folder);
         try {
-            Git git = clone(folder, gitConfig.getUri(), gitConfig.getMainBranch(), cred);
-            checkout(git, false, null, null, gitConfig.getMainBranch());
+            Git git = clone(folder, gitConfig.getUri(), gitConfig.getBranch(), cred);
+            checkout(git, false, null, null, gitConfig.getBranch());
             return readKameletsFromFolder(folder);
         } catch (RefNotFoundException e) {
             LOGGER.error("New repository");
@@ -145,8 +145,8 @@ public class GitService {
         List<Tuple2<String, Map<String, String>>> result = new ArrayList<>();
         Git git = null;
         try {
-            git = clone(folder, gitConfig.getUri(), gitConfig.getMainBranch(), cred);
-            checkout(git, false, null, null, gitConfig.getMainBranch());
+            git = clone(folder, gitConfig.getUri(), gitConfig.getBranch(), cred);
+            checkout(git, false, null, null, gitConfig.getBranch());
             List<String> projects = readProjectsFromFolder(folder);
             projects.forEach(project -> {
                 Map<String, String> files = readProjectFilesFromFolder(folder, project);
diff --git a/karavan-app/src/main/resources/application.properties b/karavan-app/src/main/resources/application.properties
index a527351..56914df 100644
--- a/karavan-app/src/main/resources/application.properties
+++ b/karavan-app/src/main/resources/application.properties
@@ -4,13 +4,13 @@ karavan.version=3.18.5
 karavan.projects-git-repository=${GIT_REPOSITORY}
 karavan.projects-git-username=${GIT_USERNAME}
 karavan.projects-git-password=${GIT_TOKEN}
-karavan.projects-git-main=main
+karavan.projects-git-branch=main
 
 # Git repository Configuration for custom Kamelets
 karavan.kamelets-git-repository=${KAMELETS_GIT_REPOSITORY}
 karavan.kamelets-git-username=${GIT_USERNAME}
 karavan.kamelets-git-password=${GIT_TOKEN}
-karavan.kamelets-git-main=main
+karavan.kamelets-git-branch=main
 
 # Projects configuration
 karavan.config.group-id=org.camel.karavan.demo
diff --git a/karavan-cloud/karavan-secret.yaml b/karavan-cloud/karavan-secret.yaml
new file mode 100644
index 0000000..3447398
--- /dev/null
+++ b/karavan-cloud/karavan-secret.yaml
@@ -0,0 +1,19 @@
+kind: Secret
+apiVersion: v1
+metadata:
+  name: karavan
+type: Opaque
+stringData:
+  master-password: karavan
+  oidc-secret: XXXXX
+  oidc-server-url: https://localhost/auth/realms/karavan
+  oidc-frontend-url: https://localhost/auth
+  projects-git-repository: https://github.com/mgubaidullin/karavan-demo.git
+  projects-git-password: demo
+  projects-git-username: demo
+  projects-git-branch: main
+  kamelets-git-repository: https://github.com/mgubaidullin/karavan-demo-kamelets.git
+  kamelets-git-password: demo
+  kamelets-git-username: demo
+  kamelets-git-branch: main
+  image-registry: image-registry.openshift-image-registry.svc:5000
diff --git a/karavan-operator/src/main/java/org/apache/camel/karavan/KaravanTektonTask.java b/karavan-operator/src/main/java/org/apache/camel/karavan/KaravanTektonTask.java
index cc7de42..d911bfa 100644
--- a/karavan-operator/src/main/java/org/apache/camel/karavan/KaravanTektonTask.java
+++ b/karavan-operator/src/main/java/org/apache/camel/karavan/KaravanTektonTask.java
@@ -63,16 +63,16 @@ public class KaravanTektonTask extends CRUDKubernetesDependentResource<Task, Kar
                                                 new EnvVarSourceBuilder().withNewSecretKeyRef().withName("karavan").withKey("projects-git-username").and().build()).build(),
                                         new EnvVarBuilder().withName("PROJECTS_GIT_PASSWORD").withValueFrom(
                                                 new EnvVarSourceBuilder().withNewSecretKeyRef().withName("karavan").withKey("projects-git-password").and().build()).build(),
-                                        new EnvVarBuilder().withName("PROJECTS_GIT_MAIN").withValueFrom(
-                                                new EnvVarSourceBuilder().withNewSecretKeyRef().withName("karavan").withKey("projects-git-main").and().build()).build(),
+                                        new EnvVarBuilder().withName("PROJECTS_GIT_BRANCH").withValueFrom(
+                                                new EnvVarSourceBuilder().withNewSecretKeyRef().withName("karavan").withKey("projects-git-branch").and().build()).build(),
                                         new EnvVarBuilder().withName("KAMELETS_GIT_REPOSITORY").withValueFrom(
                                                 new EnvVarSourceBuilder().withNewSecretKeyRef().withName("karavan").withKey("kamelets-git-repository").and().build()).build(),
                                         new EnvVarBuilder().withName("KAMELETS_GIT_USERNAME").withValueFrom(
                                                 new EnvVarSourceBuilder().withNewSecretKeyRef().withName("karavan").withKey("kamelets-git-username").and().build()).build(),
                                         new EnvVarBuilder().withName("KAMELETS_GIT_PASSWORD").withValueFrom(
                                                 new EnvVarSourceBuilder().withNewSecretKeyRef().withName("karavan").withKey("kamelets-git-password").and().build()).build(),
-                                        new EnvVarBuilder().withName("KAMELETS_GIT_MAIN").withValueFrom(
-                                                new EnvVarSourceBuilder().withNewSecretKeyRef().withName("karavan").withKey("kamelets-git-main").and().build()).build(),
+                                        new EnvVarBuilder().withName("KAMELETS_GIT_BRANCH").withValueFrom(
+                                                new EnvVarSourceBuilder().withNewSecretKeyRef().withName("karavan").withKey("kamelets-git-branch").and().build()).build(),
                                         new EnvVarBuilder().withName("IMAGE_REGISTRY").withValueFrom(
                                                 new EnvVarSourceBuilder().withNewSecretKeyRef().withName("karavan").withKey("image-registry").withOptional(true).and().build()).build()
                                 )
diff --git a/karavan-operator/src/main/resources/karavan-quarkus-builder-script.sh b/karavan-operator/src/main/resources/karavan-quarkus-builder-script.sh
index 4b15ea5..e8f6861 100644
--- a/karavan-operator/src/main/resources/karavan-quarkus-builder-script.sh
+++ b/karavan-operator/src/main/resources/karavan-quarkus-builder-script.sh
@@ -6,9 +6,9 @@ then
     replacer=https://$KAMELETS_GIT_PASSWORD@
     prefix=https://
     url="${KAMELETS_GIT_REPOSITORY/$prefix/$replacer}"
-    git clone --depth 1 --branch ${KAMELETS_GIT_MAIN} $url ${KAMELETS_DIR}
+    git clone --depth 1 --branch ${KAMELETS_GIT_BRANCH} $url ${KAMELETS_DIR}
 else
-    git clone --depth 1 --branch ${KAMELETS_GIT_MAIN} ${KAMELETS_GIT_REPOSITORY} ${KAMELETS_DIR}
+    git clone --depth 1 --branch ${KAMELETS_GIT_BRANCH} ${KAMELETS_GIT_REPOSITORY} ${KAMELETS_DIR}
 fi
 
 CHECKOUT_DIR="/scripts"
@@ -18,9 +18,9 @@ then
     replacer=https://$PROJECTS_GIT_PASSWORD@
     prefix=https://
     url="${PROJECTS_GIT_REPOSITORY/$prefix/$replacer}"
-    git clone --depth 1 --branch ${PROJECTS_GIT_MAIN} $url ${CHECKOUT_DIR}
+    git clone --depth 1 --branch ${PROJECTS_GIT_BRANCH} $url ${CHECKOUT_DIR}
 else
-    git clone --depth 1 --branch ${PROJECTS_GIT_MAIN} ${PROJECTS_GIT_REPOSITORY} ${CHECKOUT_DIR}
+    git clone --depth 1 --branch ${PROJECTS_GIT_BRANCH} ${PROJECTS_GIT_REPOSITORY} ${CHECKOUT_DIR}
 fi
 
 cd ${CHECKOUT_DIR}/$(inputs.params.project)