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

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

commit 1b10c64135514c8d14c42e174ddc5262789ab916
Author: Thomas Diesler <tdies...@redhat.com>
AuthorDate: Fri Jul 12 19:05:45 2024 +0200

    [CAMEL-20976] camel-jbang: Consolidate export dependencies
---
 .../camel/dsl/jbang/core/commands/Export.java      |  2 +-
 .../dsl/jbang/core/commands/ExportBaseCommand.java | 41 +++++++----
 .../apache/camel/dsl/jbang/core/commands/Run.java  | 81 ++++++++++------------
 .../camel/dsl/jbang/core/common/RuntimeUtil.java   |  9 +--
 .../core/commands/kubernetes/KubernetesExport.java | 61 ++++++++--------
 5 files changed, 101 insertions(+), 93 deletions(-)

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 4c12302608f..a984cdc4748 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
@@ -113,7 +113,7 @@ public class Export extends ExportBaseCommand {
         // copy properties from this to cmd
         cmd.files = this.files;
         cmd.repos = this.repos;
-        cmd.dependencies = this.dependencies;
+        cmd.addDependencies(this.dependencies());
         cmd.runtime = this.runtime;
         cmd.gav = this.gav;
         cmd.mavenSettings = this.mavenSettings;
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
index 5add2d4ad56..d1b9e0cbca1 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
@@ -94,8 +94,8 @@ public abstract class ExportBaseCommand extends CamelCommand {
     protected String repos;
 
     @CommandLine.Option(names = {
-            "--dep", "--deps" }, description = "Add additional dependencies 
(Use commas to separate multiple dependencies).")
-    protected String dependencies;
+            "--dep", "--deps" }, arity = "*", description = "Add additional 
dependencies")
+    private String[] _dependencies; // [TODO] make less protected when we 
ditch --deps
 
     @CommandLine.Option(names = { "--runtime" },
                         completionCandidates = 
RuntimeCompletionCandidates.class,
@@ -294,7 +294,7 @@ public abstract class ExportBaseCommand extends 
CamelCommand {
     protected Integer runSilently(boolean ignoreLoadingError) throws Exception 
{
         Run run = new Run(getMain());
         // need to declare the profile to use for run
-        run.dependencies = dependencies;
+        run.addDependencies(dependencies());
         run.files = files;
         run.exclude = exclude;
         run.openapi = openapi;
@@ -307,6 +307,28 @@ public abstract class ExportBaseCommand extends 
CamelCommand {
         return run.runExport(ignoreLoadingError);
     }
 
+    // [TODO] Remove when we ditch --deps
+    // For backward compatibility, we expands comma separated --deps
+    // https://issues.apache.org/jira/browse/CAMEL-20976
+    String[] dependencies() {
+        if (_dependencies != null && _dependencies.length == 1) {
+            String[] toks = _dependencies[0].split(",");
+            _dependencies = 
Arrays.stream(toks).map(String::trim).toArray(String[]::new);
+        }
+        return _dependencies;
+    }
+
+    protected void addDependencies(String... deps) {
+        var depsList = new ArrayList<>(getDependenciesList());
+        depsList.addAll(Arrays.asList(deps));
+        _dependencies = depsList.toArray(new String[0]);
+    }
+
+    protected List<String> getDependenciesList() {
+        var depsArray = Optional.ofNullable(dependencies()).orElse(new 
String[0]);
+        return Arrays.asList(depsArray);
+    }
+
     protected Set<String> resolveDependencies(File settings, File profile) 
throws Exception {
         Set<String> answer = new TreeSet<>((o1, o2) -> {
             // favour org.apache.camel first
@@ -325,10 +347,8 @@ public abstract class ExportBaseCommand extends 
CamelCommand {
         }
 
         // custom dependencies
-        if (dependencies != null) {
-            for (String d : dependencies.split(",")) {
-                answer.add(normalizeDependency(d.trim()));
-            }
+        for (String d : dependencies()) {
+            answer.add(normalizeDependency(d));
         }
 
         List<String> lines = RuntimeUtil.loadPropertiesLines(settings);
@@ -409,11 +429,8 @@ public abstract class ExportBaseCommand extends 
CamelCommand {
         if (profile != null && profile.exists()) {
             Properties prop = new CamelCaseOrderedProperties();
             RuntimeUtil.loadProperties(prop, profile);
-            String deps = RuntimeUtil.getDependencies(prop);
-            if (!deps.isBlank()) {
-                for (String d : deps.split(",")) {
-                    answer.add(d.trim());
-                }
+            for (String d : RuntimeUtil.getDependenciesAsArray(prop)) {
+                answer.add(d.trim());
             }
         }
 
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
index d8d4fea117c..f4fc4aecbfa 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
@@ -32,15 +32,7 @@ import java.nio.file.FileSystems;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Locale;
-import java.util.Properties;
-import java.util.Set;
-import java.util.Stack;
-import java.util.StringJoiner;
+import java.util.*;
 import java.util.function.Supplier;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -161,8 +153,8 @@ public class Run extends CamelCommand {
     String profile = "dev";
 
     @Option(names = {
-            "--dep", "--deps" }, description = "Add additional dependencies 
(Use commas to separate multiple dependencies)")
-    String dependencies;
+            "--dep", "--deps" }, arity = "*", description = "Add additional 
dependencies")
+    private String[] _dependencies; // [TODO] make less protected when we 
ditch --deps
 
     @Option(names = { "--repos" },
             description = "Additional maven repositories for download 
on-demand (Use commas to separate multiple repositories)")
@@ -633,17 +625,8 @@ public class Run extends CamelCommand {
             // find source files
             files = RunHelper.scanMavenOrGradleProject();
             // include extra dependencies from pom.xml
-            List<String> deps = RunHelper.scanMavenDependenciesFromPom();
-            for (String d : deps) {
-                if (dependencies == null) {
-                    dependencies = "";
-                }
-                if (dependencies.isBlank()) {
-                    dependencies = d;
-                } else {
-                    dependencies += "," + d;
-                }
-            }
+            var pomDependencies = RunHelper.scanMavenDependenciesFromPom();
+            addDependencies(pomDependencies.toArray(new String[0]));
         }
 
         if (profile != null) {
@@ -825,15 +808,11 @@ public class Run extends CamelCommand {
         }
 
         // merge existing dependencies with --deps
-        String deps = RuntimeUtil.getDependencies(profileProperties);
-        if (deps.isBlank()) {
-            deps = dependencies != null ? dependencies : "";
-        } else if (dependencies != null && !dependencies.equals(deps)) {
-            deps += "," + dependencies;
-        }
-        if (!deps.isBlank()) {
-            main.addInitialProperty("camel.jbang.dependencies", deps);
-            writeSettings("camel.jbang.dependencies", deps);
+        addDependencies(RuntimeUtil.getDependenciesAsArray(profileProperties));
+        if (dependencies().length > 0) {
+            var joined = String.join(",", dependencies());
+            main.addInitialProperty("camel.jbang.dependencies", joined);
+            writeSettings("camel.jbang.dependencies", joined);
         }
 
         // if we have a specific camel version then make sure we really need 
to switch
@@ -877,6 +856,28 @@ public class Run extends CamelCommand {
         }
     }
 
+    // [TODO] Remove when we ditch --deps
+    // For backward compatibility, we expands comma separated --deps
+    // https://issues.apache.org/jira/browse/CAMEL-20976
+    String[] dependencies() {
+        if (_dependencies != null && _dependencies.length == 1) {
+            String[] toks = _dependencies[0].split(",");
+            _dependencies = 
Arrays.stream(toks).map(String::trim).toArray(String[]::new);
+        }
+        return _dependencies;
+    }
+
+    protected void addDependencies(String... deps) {
+        var depsList = new ArrayList<>(getDependenciesList());
+        depsList.addAll(Arrays.asList(deps));
+        _dependencies = depsList.toArray(new String[0]);
+    }
+
+    protected List<String> getDependenciesList() {
+        var depsArray = Optional.ofNullable(dependencies()).orElse(new 
String[0]);
+        return Arrays.asList(depsArray);
+    }
+
     protected int runQuarkus() throws Exception {
         // create temp run dir
         File runDir = new File(RUN_PLATFORM_DIR, 
Long.toString(System.currentTimeMillis()));
@@ -900,12 +901,8 @@ public class Run extends CamelCommand {
         if (eq.gav == null) {
             eq.gav = "org.example.project:jbang-run-dummy:1.0-SNAPSHOT";
         }
-        eq.dependencies = this.dependencies;
-        if (eq.dependencies == null) {
-            eq.dependencies = "camel:cli-connector";
-        } else {
-            eq.dependencies += ",camel:cli-connector";
-        }
+        eq.addDependencies(this.dependencies());
+        eq.addDependencies("camel:cli-connector");
         eq.fresh = this.fresh;
         eq.download = this.download;
         eq.quiet = true;
@@ -968,15 +965,11 @@ public class Run extends CamelCommand {
         if (eq.gav == null) {
             eq.gav = "org.example.project:jbang-run-dummy:1.0-SNAPSHOT";
         }
-        eq.dependencies = this.dependencies;
-        if (eq.dependencies == null) {
-            eq.dependencies = "camel:cli-connector";
-        } else {
-            eq.dependencies += ",camel:cli-connector";
-        }
+        eq.addDependencies(dependencies());
+        eq.addDependencies("camel:cli-connector");
         if (this.dev) {
             // hot-reload of spring-boot
-            eq.dependencies += 
",mvn:org.springframework.boot:spring-boot-devtools";
+            
eq.addDependencies("mvn:org.springframework.boot:spring-boot-devtools");
         }
         eq.fresh = this.fresh;
         eq.download = this.download;
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/RuntimeUtil.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/RuntimeUtil.java
index 8d505eb5bec..da04fb58059 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/RuntimeUtil.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/RuntimeUtil.java
@@ -24,10 +24,7 @@ import java.io.StringReader;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Properties;
-import java.util.StringJoiner;
+import java.util.*;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.apache.camel.util.IOHelper;
@@ -186,6 +183,10 @@ public final class RuntimeUtil {
         return deps;
     }
 
+    public static String[] getDependenciesAsArray(Properties properties) {
+        return getDependencies(properties).split(",");
+    }
+
     public static String getPid() {
         return String.valueOf(ProcessHandle.current().pid());
     }
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExport.java
 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExport.java
index 0eed255ee67..7d0335f4d06 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExport.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExport.java
@@ -20,7 +20,6 @@ package org.apache.camel.dsl.jbang.core.commands.kubernetes;
 import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
@@ -137,38 +136,12 @@ class KubernetesExport extends Export {
             runtime = RuntimeType.quarkus;
         }
 
-        List<String> exportDependencies = new ArrayList<>();
-        if (dependencies != null) {
-            String[] deps = dependencies.split(",");
-            exportDependencies.addAll(Arrays.asList(deps));
-
-        }
-        exportDependencies.add("camel:cli-connector");
-        exportDependencies.add("io.quarkus:quarkus-kubernetes");
-
-        // Mutually exclusive image build plugins - use Jib by default
-        if 
(!exportDependencies.contains("io.quarkus:quarkus-container-image-docker")) {
-            exportDependencies.add("io.quarkus:quarkus-container-image-jib");
-        }
-
-        // TODO: remove when fixed kubernetes-client version is part of the 
Quarkus platform
-        // pin kubernetes-client to this version because of 
https://github.com/fabric8io/kubernetes-client/issues/6059
-        exportDependencies.add("io.fabric8:kubernetes-client:6.13.1");
-
-        dependencies = String.join(",", exportDependencies);
-
-        additionalProperties = 
Optional.ofNullable(additionalProperties).orElse("");
-
         Map<String, String> exportProps = new HashMap<>();
-
         String resolvedImageRegistry = resolveImageRegistry();
-        if (resolvedImageRegistry != null) {
-            exportProps.put("quarkus.container-image.registry", 
resolvedImageRegistry);
 
-            if (resolvedImageRegistry.startsWith("localhost")) {
-                exportProps.put("quarkus.container-image.insecure", "true");
-            }
-        }
+        // TODO: remove when fixed kubernetes-client version is part of the 
Quarkus platform
+        // pin kubernetes-client to this version because of 
https://github.com/fabric8io/kubernetes-client/issues/6059
+        addDependencies("camel:cli-connector", 
"io.fabric8:kubernetes-client:6.13.1");
 
         String resolvedImageGroup = null;
         if (image != null) {
@@ -177,10 +150,34 @@ class KubernetesExport extends Export {
             resolvedImageGroup = imageGroup;
         }
 
-        if (resolvedImageGroup != null) {
-            exportProps.put("quarkus.container-image.group", 
resolvedImageGroup);
+        if (runtime == RuntimeType.quarkus) {
+
+            // Quarkus specific dependencies
+            addDependencies("io.quarkus:quarkus-kubernetes");
+
+            // Mutually exclusive image build plugins - use Jib by default
+            if 
(!getDependenciesList().contains("io.quarkus:quarkus-container-image-docker")) {
+                addDependencies("io.quarkus:quarkus-container-image-jib");
+            }
+
+            // Quarkus specific properties
+            exportProps.put("quarkus.container-image.build", "true");
+
+            if (resolvedImageRegistry != null) {
+                exportProps.put("quarkus.container-image.registry", 
resolvedImageRegistry);
+                if (resolvedImageRegistry.startsWith("localhost")) {
+                    exportProps.put("quarkus.container-image.insecure", 
"true");
+                }
+            }
+
+            if (resolvedImageGroup != null) {
+                exportProps.put("quarkus.container-image.group", 
resolvedImageGroup);
+            }
+        } else {
+            printer().println("Kubernetes export for runtime '" + runtime + "' 
not supported");
         }
 
+        additionalProperties = 
Optional.ofNullable(additionalProperties).orElse("");
         if (additionalProperties.isEmpty()) {
             additionalProperties = exportProps.entrySet().stream()
                     .map(entry -> "%s=%s".formatted(entry.getKey(), 
entry.getValue())).collect(Collectors.joining(","));

Reply via email to