You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2022/06/17 12:33:45 UTC

[camel] 01/02: CAMEL-18151: camel-jbang - Export should be a single command making it easier to use from ci/cd

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

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

commit 2bd3abdfc7503772b487a83fcd97034c4d2d28fc
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Jun 17 14:21:45 2022 +0200

    CAMEL-18151: camel-jbang - Export should be a single command making it easier to use from ci/cd
---
 .../dsl/jbang/core/commands/CamelJBangMain.java    |  5 +--
 .../camel/dsl/jbang/core/commands/Export.java      | 37 ++++++++++++++++++----
 .../{BaseExport.java => ExportBaseCommand.java}    | 22 +++++++++++--
 .../dsl/jbang/core/commands/ExportCamelMain.java   |  9 +-----
 .../dsl/jbang/core/commands/ExportQuarkus.java     |  8 +----
 .../dsl/jbang/core/commands/ExportSpringBoot.java  | 13 +-------
 6 files changed, 55 insertions(+), 39 deletions(-)

diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java
index 69a880c009a..fe83b9d9725 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java
@@ -40,10 +40,7 @@ public class CamelJBangMain implements Callable<Integer> {
                 .addSubcommand("pipe", new CommandLine(new Pipe(main)))
                 .addSubcommand("generate", new CommandLine(new CodeGenerator(main))
                         .addSubcommand("rest", new CommandLine(new CodeRestGenerator(main))))
-                .addSubcommand("export", new CommandLine(new Export(main))
-                        .addSubcommand("camel-main", new CommandLine(new ExportCamelMain(main)))
-                        .addSubcommand("spring-boot", new CommandLine(new ExportSpringBoot(main)))
-                        .addSubcommand("quarkus", new CommandLine(new ExportQuarkus(main))));
+                .addSubcommand("export", new CommandLine(new Export(main)));
 
         commandLine.getCommandSpec().versionProvider(() -> {
             CamelCatalog catalog = new DefaultCamelCatalog();
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Export.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Export.java
index 28d42a4c237..b627ea208e6 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Export.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Export.java
@@ -16,20 +16,45 @@
  */
 package org.apache.camel.dsl.jbang.core.commands;
 
-import picocli.CommandLine;
 import picocli.CommandLine.Command;
 
 @Command(name = "export",
-         description = "Export to other runtimes such as Spring Boot or Quarkus (use --help to see sub commands)")
-class Export extends CamelCommand {
+         description = "Export to other runtimes such as Spring Boot or Quarkus")
+class Export extends ExportBaseCommand {
 
     public Export(CamelJBangMain main) {
         super(main);
     }
 
     @Override
-    public Integer call() throws Exception {
-        new CommandLine(this).execute("--help");
-        return 0;
+    protected Integer export() throws Exception {
+        if ("spring-boot".equals(runtime)) {
+            return export(new ExportSpringBoot(getMain()));
+        } else if ("quarkus".equals(runtime)) {
+            return export(new ExportQuarkus(getMain()));
+        } else if ("camel-main".equals(runtime)) {
+            return export(new ExportCamelMain(getMain()));
+        } else {
+            System.err.println("Unknown runtime: " + runtime);
+            return 1;
+        }
     }
+
+    private Integer export(ExportBaseCommand cmd) throws Exception {
+        // copy properties from this to cmd
+        cmd.runtime = this.runtime;
+        cmd.gav = this.gav;
+        cmd.exportDir = this.exportDir;
+        cmd.fresh = this.fresh;
+        cmd.javaVersion = this.javaVersion;
+        cmd.kameletsVersion = this.kameletsVersion;
+        cmd.logging = this.logging;
+        cmd.loggingLevel = this.loggingLevel;
+        cmd.mainClassname = this.mainClassname;
+        cmd.quarkusVersion = this.quarkusVersion;
+        cmd.springBootVersion = this.springBootVersion;
+        // run export
+        return cmd.export();
+    }
+
 }
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/BaseExport.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
similarity index 93%
rename from dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/BaseExport.java
rename to dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
index 80730e68534..94a9d1a0718 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/BaseExport.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
@@ -43,7 +43,9 @@ import org.apache.camel.util.OrderedProperties;
 import org.apache.camel.util.StringHelper;
 import picocli.CommandLine;
 
-abstract class BaseExport extends CamelCommand {
+@CommandLine.Command(name = "export",
+                     description = "Export to other runtimes such as Spring Boot or Quarkus")
+abstract class ExportBaseCommand extends CamelCommand {
 
     protected static final String BUILD_DIR = ".camel-jbang/work";
 
@@ -54,9 +56,17 @@ abstract class BaseExport extends CamelCommand {
             "camel.jbang.classpathFiles"
     };
 
+    @CommandLine.Option(names = { "--runtime" }, description = "Runtime (spring-boot, quarkus, or camel-main)", required = true)
+    protected String runtime;
+
     @CommandLine.Option(names = { "--gav" }, description = "The Maven group:artifact:version", required = true)
     protected String gav;
 
+    @CommandLine.Option(names = { "--main-classname" },
+                        description = "The class name of the Camel Main application class",
+                        defaultValue = "CamelApplication")
+    protected String mainClassname;
+
     @CommandLine.Option(names = { "--java-version" }, description = "Java version (11 or 17)", defaultValue = "11")
     protected String javaVersion;
 
@@ -64,6 +74,14 @@ abstract class BaseExport extends CamelCommand {
             "--kamelets-version" }, description = "Apache Camel Kamelets version", defaultValue = "0.8.1")
     protected String kameletsVersion;
 
+    @CommandLine.Option(names = { "--spring-boot-version" }, description = "Spring Boot version",
+                        defaultValue = "2.7.0")
+    protected String springBootVersion;
+
+    @CommandLine.Option(names = { "--quarkus-version" }, description = "Quarkus version",
+                        defaultValue = "2.9.2.Final")
+    protected String quarkusVersion;
+
     @CommandLine.Option(names = {
             "-dir",
             "--directory" }, description = "Directory where the project will be exported", defaultValue = ".")
@@ -79,7 +97,7 @@ abstract class BaseExport extends CamelCommand {
                         description = "Can be used to turn on logging (logs to file in <user home>/.camel directory)")
     boolean logging;
 
-    public BaseExport(CamelJBangMain main) {
+    public ExportBaseCommand(CamelJBangMain main) {
         super(main);
     }
 
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportCamelMain.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportCamelMain.java
index 3a512e10e36..f1f18a28a44 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportCamelMain.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportCamelMain.java
@@ -29,15 +29,8 @@ import org.apache.camel.util.FileUtil;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.OrderedProperties;
 import org.apache.commons.io.FileUtils;
-import picocli.CommandLine;
 
-@CommandLine.Command(name = "standalone", description = "Export as standalone Camel Main project")
-class ExportCamelMain extends BaseExport {
-
-    @CommandLine.Option(names = { "--main-classname" },
-                        description = "The class name of the Camel Main application class",
-                        defaultValue = "CamelApplication")
-    private String mainClassname;
+class ExportCamelMain extends Export {
 
     public ExportCamelMain(CamelJBangMain main) {
         super(main);
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java
index 86562143672..ff88c5e241f 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java
@@ -27,14 +27,8 @@ import org.apache.camel.util.FileUtil;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.OrderedProperties;
 import org.apache.commons.io.FileUtils;
-import picocli.CommandLine;
 
-@CommandLine.Command(name = "quarkus", description = "Export as Quarkus project")
-class ExportQuarkus extends BaseExport {
-
-    @CommandLine.Option(names = { "--quarkus-version" }, description = "Quarkus version",
-                        defaultValue = "2.9.2.Final")
-    private String quarkusVersion;
+class ExportQuarkus extends Export {
 
     public ExportQuarkus(CamelJBangMain main) {
         super(main);
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java
index d0c0de1d16a..dc9f1ecec15 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java
@@ -30,19 +30,8 @@ import org.apache.camel.util.FileUtil;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.OrderedProperties;
 import org.apache.commons.io.FileUtils;
-import picocli.CommandLine;
 
-@CommandLine.Command(name = "spring-boot", description = "Export as Spring Boot project")
-class ExportSpringBoot extends BaseExport {
-
-    @CommandLine.Option(names = { "--main-classname" },
-                        description = "The class name of the Camel Spring Boot application class",
-                        defaultValue = "CamelApplication")
-    private String mainClassname;
-
-    @CommandLine.Option(names = { "--spring-boot-version" }, description = "Spring Boot version",
-                        defaultValue = "2.7.0")
-    private String springBootVersion;
+class ExportSpringBoot extends Export {
 
     public ExportSpringBoot(CamelJBangMain main) {
         super(main);