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 2023/03/31 19:03:38 UTC

[camel-karavan] branch main updated: Default pipelines for #646

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


The following commit(s) were added to refs/heads/main by this push:
     new eafb6f64 Default pipelines for #646
eafb6f64 is described below

commit eafb6f641298f3536545b5e2b14322c69ad090b0
Author: Marat Gubaidullin <ma...@gmail.com>
AuthorDate: Fri Mar 31 15:03:30 2023 -0400

    Default pipelines for #646
---
 .../org/apache/camel/karavan/model/Project.java    |  1 +
 .../apache/camel/karavan/service/CodeService.java  | 25 +++++-
 .../camel/karavan/service/ProjectService.java      | 35 +++++++--
 .../pipelines/karavan-pipeline-dev-quarkus.yaml    | 27 +++++++
 .../karavan-pipeline-dev-spring-boot.yaml          | 27 +++++++
 .../pipelines/karavan-task-dev-quarkus.yaml        | 90 ++++++++++++++++++++++
 .../pipelines/karavan-task-dev-spring-boot.yaml    | 78 +++++++++++++++++++
 7 files changed, 272 insertions(+), 11 deletions(-)

diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/model/Project.java b/karavan-app/src/main/java/org/apache/camel/karavan/model/Project.java
index 0325952a..254d38c4 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/model/Project.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/model/Project.java
@@ -10,6 +10,7 @@ public class Project {
 
     public static final String NAME_TEMPLATES = "templates";
     public static final String NAME_KAMELETS = "kamelets";
+    public static final String NAME_PIPELINES = "pipelines";
 
     @ProtoField(number = 1)
     String projectId;
diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/service/CodeService.java b/karavan-app/src/main/java/org/apache/camel/karavan/service/CodeService.java
index 4fb5e67a..a7cdb1a2 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/service/CodeService.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/service/CodeService.java
@@ -59,6 +59,10 @@ public class CodeService {
     @Inject
     Engine engine;
 
+    List<String> runtimes = List.of("quarkus", "spring-boot");
+    List<String> targets = List.of("openshift", "kubernetes");
+    List<String> interfaces = List.of("org.apache.camel.AggregationStrategy.java", "org.apache.camel.Processor.java");
+
     public String getApplicationProperties(Project project) {
         String target = kubernetesService.isOpenshift() ? "openshift" : "kubernetes";
         String templateName = project.getRuntime() + "-" + target + "-application.properties";
@@ -86,10 +90,6 @@ public class CodeService {
     public Map<String,String> getApplicationPropertiesTemplates() {
         Map<String, String> result = new HashMap<>();
 
-        List<String> runtimes = List.of("quarkus", "spring-boot");
-        List<String> targets = List.of("openshift", "kubernetes");
-        List<String> interfaces = List.of("org.apache.camel.AggregationStrategy.java", "org.apache.camel.Processor.java");
-
         List<String> files = new ArrayList<>(interfaces);
         files.addAll(targets.stream().map(target -> target + "-application.properties").collect(Collectors.toList()));
 
@@ -104,6 +104,23 @@ public class CodeService {
         return result;
     }
 
+    public Map<String,String> getPipelinesTemplates() {
+        Map<String, String> result = new HashMap<>();
+
+        List<String> files = new ArrayList<>(targets);
+        files.addAll(targets.stream().map(target -> target + ".yaml").collect(Collectors.toList()));
+
+        runtimes.forEach(runtime -> {
+            files.forEach(file -> {
+                String templateName = runtime + "-" + file;
+                String templatePath = "/pipelines/" + templateName;
+                String templateText = getResourceFile(templatePath);
+                result.put(templateName, templateText);
+            });
+        });
+        return result;
+    }
+
     public String getResourceFile(String path) {
         try {
             InputStream inputStream = KameletResources.class.getResourceAsStream(path);
diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java b/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java
index e679ceb2..0a574614 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java
@@ -29,7 +29,6 @@ import org.jboss.logging.Logger;
 import javax.enterprise.context.ApplicationScoped;
 import javax.inject.Inject;
 import java.time.Instant;
-import java.util.Date;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicBoolean;
 
@@ -100,9 +99,11 @@ public class ProjectService {
                 Project project;
                 String folderName = repo.getName();
                 if (folderName.equals(Project.NAME_TEMPLATES)) {
-                    project = new Project(Project.NAME_TEMPLATES, "Templates", "Templates", "quarkus", repo.getCommitId(), repo.getLastCommitTimestamp());
+                    project = new Project(Project.NAME_TEMPLATES, "Templates", "Templates", "", repo.getCommitId(), repo.getLastCommitTimestamp());
                 } else if (folderName.equals(Project.NAME_KAMELETS)){
-                    project = new Project(Project.NAME_KAMELETS, "Custom Kamelets", "Custom Kamelets", "quarkus", repo.getCommitId(), repo.getLastCommitTimestamp());
+                    project = new Project(Project.NAME_KAMELETS, "Custom Kamelets", "Custom Kamelets", "", repo.getCommitId(), repo.getLastCommitTimestamp());
+//                } else if (folderName.equals(Project.NAME_PIPELINES)){
+//                    project = new Project(Project.NAME_PIPELINES, "Pipelines", "CI/CD Pipelines", "", repo.getCommitId(), repo.getLastCommitTimestamp());
                 } else {
                     project = getProjectFromRepo(repo);
                 }
@@ -173,9 +174,9 @@ public class ProjectService {
         try {
             Project kamelets  = infinispanService.getProject(Project.NAME_KAMELETS);
             if (kamelets == null) {
-                kamelets = new Project(Project.NAME_KAMELETS, "Custom Kamelets", "Custom Kamelets", "quarkus", "", Instant.now().toEpochMilli());
+                kamelets = new Project(Project.NAME_KAMELETS, "Custom Kamelets", "Custom Kamelets", "", "", Instant.now().toEpochMilli());
                 infinispanService.saveProject(kamelets, true);
-                commitAndPushProject("kamelets", "Add custom kamelets");
+                commitAndPushProject(Project.NAME_KAMELETS, "Add custom kamelets");
             }
         } catch (Exception e) {
             LOGGER.error("Error during custom kamelets project creation", e);
@@ -187,17 +188,37 @@ public class ProjectService {
         try {
             Project templates  = infinispanService.getProject(Project.NAME_TEMPLATES);
             if (templates == null) {
-                templates = new Project(Project.NAME_TEMPLATES, "Templates", "Templates", "quarkus", "", Instant.now().toEpochMilli());
+                templates = new Project(Project.NAME_TEMPLATES, "Templates", "Templates", "", "", Instant.now().toEpochMilli());
                 infinispanService.saveProject(templates, true);
 
                 codeService.getApplicationPropertiesTemplates().forEach((name, value) -> {
                     ProjectFile file = new ProjectFile(name, value, Project.NAME_TEMPLATES, Instant.now().toEpochMilli());
                     infinispanService.saveProjectFile(file);
                 });
-                commitAndPushProject("templates", "Add default templates");
+                commitAndPushProject(Project.NAME_TEMPLATES, "Add default templates");
             }
         } catch (Exception e) {
             LOGGER.error("Error during templates project creation", e);
         }
     }
+
+    void addPipelinesProject() {
+        LOGGER.info("Add pipelines project if not exists");
+        try {
+            Project pipelines  = infinispanService.getProject(Project.NAME_PIPELINES);
+            if (pipelines == null) {
+                pipelines = new Project(Project.NAME_PIPELINES, "Pipelines", "CI/CD Pipelines", "", "", Instant.now().toEpochMilli());
+                infinispanService.saveProject(pipelines, true);
+
+                codeService.getApplicationPropertiesTemplates().forEach((name, value) -> {
+                    ProjectFile file = new ProjectFile(name, value, Project.NAME_PIPELINES, Instant.now().toEpochMilli());
+                    infinispanService.saveProjectFile(file);
+                });
+                commitAndPushProject(Project.NAME_PIPELINES, "Add default pipelines");
+            }
+        } catch (Exception e) {
+            LOGGER.error("Error during pipelines project creation", e);
+        }
+    }
+
 }
diff --git a/karavan-app/src/main/resources/pipelines/karavan-pipeline-dev-quarkus.yaml b/karavan-app/src/main/resources/pipelines/karavan-pipeline-dev-quarkus.yaml
new file mode 100644
index 00000000..7d063ba0
--- /dev/null
+++ b/karavan-app/src/main/resources/pipelines/karavan-pipeline-dev-quarkus.yaml
@@ -0,0 +1,27 @@
+apiVersion: tekton.dev/v1beta1
+kind: Pipeline
+metadata:
+  name: karavan-pipeline-dev-quarkus
+spec:
+  params:
+    - description: ProjectId
+      name: PROJECT_ID
+      type: string
+  tasks:
+    - name: karavan-task-dev-quarkus
+      params:
+        - name: project
+          value: $(params.PROJECT_ID)
+      taskRef:
+        kind: Task
+        name: karavan-task-dev-quarkus
+      workspaces:
+        - name: karavan-m2-cache
+          workspace: karavan-m2-cache
+        - name: karavan-jbang-cache
+          workspace: karavan-jbang-cache
+  workspaces:
+    - description: Maven Cache
+      name: karavan-m2-cache
+    - description: JBang Cache
+      name: karavan-jbang-cache
\ No newline at end of file
diff --git a/karavan-app/src/main/resources/pipelines/karavan-pipeline-dev-spring-boot.yaml b/karavan-app/src/main/resources/pipelines/karavan-pipeline-dev-spring-boot.yaml
new file mode 100644
index 00000000..6c50b4bb
--- /dev/null
+++ b/karavan-app/src/main/resources/pipelines/karavan-pipeline-dev-spring-boot.yaml
@@ -0,0 +1,27 @@
+apiVersion: tekton.dev/v1beta1
+kind: Pipeline
+metadata:
+  name: karavan-pipeline-dev-spring-boot
+spec:
+  params:
+    - description: ProjectId
+      name: PROJECT_ID
+      type: string
+  tasks:
+    - name: karavan-task-dev-spring-boot
+      params:
+        - name: project
+          value: $(params.PROJECT_ID)
+      taskRef:
+        kind: Task
+        name: karavan-task-dev-spring-boot
+      workspaces:
+        - name: karavan-m2-cache
+          workspace: karavan-m2-cache
+        - name: karavan-jbang-cache
+          workspace: karavan-jbang-cache
+  workspaces:
+    - description: Maven Cache
+      name: karavan-m2-cache
+    - description: JBang Cache
+      name: karavan-jbang-cache
\ No newline at end of file
diff --git a/karavan-app/src/main/resources/pipelines/karavan-task-dev-quarkus.yaml b/karavan-app/src/main/resources/pipelines/karavan-task-dev-quarkus.yaml
new file mode 100644
index 00000000..b47285d7
--- /dev/null
+++ b/karavan-app/src/main/resources/pipelines/karavan-task-dev-quarkus.yaml
@@ -0,0 +1,90 @@
+apiVersion: tekton.dev/v1beta1
+kind: Task
+metadata:
+  name: karavan-task-dev-quarkus
+spec:
+  params:
+    - description: ProjectId
+      name: project
+      type: string
+  steps:
+    - env:
+        - name: GIT_REPOSITORY
+          valueFrom:
+            secretKeyRef:
+              key: git-repository
+              name: karavan
+        - name: GIT_USERNAME
+          valueFrom:
+            secretKeyRef:
+              key: git-username
+              name: karavan
+        - name: GIT_PASSWORD
+          valueFrom:
+            secretKeyRef:
+              key: git-password
+              name: karavan
+        - name: GIT_BRANCH
+          valueFrom:
+            secretKeyRef:
+              key: git-branch
+              name: karavan
+        - name: IMAGE_REGISTRY
+          valueFrom:
+            secretKeyRef:
+              key: image-registry
+              name: karavan
+              optional: true
+      image: 'ghcr.io/apache/camel-karavan-builder:3.20.0'
+      name: karavan-build-deploy
+      script: >-
+        #!/usr/bin/env bash
+        CHECKOUT_DIR="/scripts"
+        KAMELETS_DIR="/scripts/kamelets"
+
+        if  [[ $GIT_REPOSITORY == https* ]] ;
+        then
+            replacer=https://$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)
+
+        entrypoint -Dcamel.jbang.version=3.20.1 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)
+
+        /opt/mvnd/bin/mvnd 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}
+  workspaces:
+    - description: Maven Cache
+      mountPath: /root/.m2
+      name: karavan-m2-cache
+    - description: JBang Cache
+      mountPath: /jbang/.jbang/cache
+      name: karavan-jbang-cache
diff --git a/karavan-app/src/main/resources/pipelines/karavan-task-dev-spring-boot.yaml b/karavan-app/src/main/resources/pipelines/karavan-task-dev-spring-boot.yaml
new file mode 100644
index 00000000..85e1996a
--- /dev/null
+++ b/karavan-app/src/main/resources/pipelines/karavan-task-dev-spring-boot.yaml
@@ -0,0 +1,78 @@
+apiVersion: tekton.dev/v1beta1
+kind: Task
+metadata:
+  name: karavan-task-dev-spring-boot
+spec:
+  params:
+    - description: ProjectId
+      name: project
+      type: string
+  steps:
+    - env:
+        - name: GIT_REPOSITORY
+          valueFrom:
+            secretKeyRef:
+              key: git-repository
+              name: karavan
+        - name: GIT_USERNAME
+          valueFrom:
+            secretKeyRef:
+              key: git-username
+              name: karavan
+        - name: GIT_PASSWORD
+          valueFrom:
+            secretKeyRef:
+              key: git-password
+              name: karavan
+        - name: GIT_BRANCH
+          valueFrom:
+            secretKeyRef:
+              key: git-branch
+              name: karavan
+        - name: IMAGE_REGISTRY
+          valueFrom:
+            secretKeyRef:
+              key: image-registry
+              name: karavan
+              optional: true
+      image: 'ghcr.io/apache/camel-karavan-builder:3.20.0'
+      name: karavan-build-deploy
+      script: >-
+        #!/usr/bin/env bash
+        CHECKOUT_DIR="/scripts"
+        KAMELETS_DIR="/scripts/kamelets"
+
+        if  [[ $GIT_REPOSITORY == https* ]] ;
+        then
+            replacer=https://$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)
+
+        entrypoint -Dcamel.jbang.version=3.20.1 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)
+
+        /opt/mvnd/bin/mvnd 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}
+  workspaces:
+    - description: Maven Cache
+      mountPath: /root/.m2
+      name: karavan-m2-cache
+    - description: JBang Cache
+      mountPath: /jbang/.jbang/cache
+      name: karavan-jbang-cache