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 2025/07/21 13:48:41 UTC

(camel) 01/01: CAMEL-22187: camel-jbang - Camel export should only include observability if --observe=true

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

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

commit 3f3c7e92abd366bd9b2a50eb4edc2693f70edafb
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Jul 21 15:48:19 2025 +0200

    CAMEL-22187: camel-jbang - Camel export should only include observability if --observe=true
---
 .../ROOT/pages/camel-4x-upgrade-guide-4_14.adoc    |  7 ++++++
 .../camel/dsl/jbang/core/commands/Export.java      |  1 +
 .../dsl/jbang/core/commands/ExportBaseCommand.java |  5 ++++
 .../src/main/resources/templates/main-pom.tmpl     |  4 ---
 .../src/main/resources/templates/quarkus-pom.tmpl  |  4 ---
 .../main/resources/templates/spring-boot-pom.tmpl  |  4 ---
 .../camel/dsl/jbang/core/commands/ExportTest.java  | 29 ++++++++++++++++++++++
 .../kubernetes/KubernetesExportBaseTest.java       | 22 ++++++++++++++++
 .../commands/kubernetes/KubernetesExportTest.java  | 28 +++++++++++++++++++++
 9 files changed, 92 insertions(+), 12 deletions(-)

diff --git a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_14.adoc b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_14.adoc
index 3e1e1f8e50c..848acb59ebd 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_14.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_14.adoc
@@ -8,6 +8,13 @@ from both 4.0 to 4.1 and 4.1 to 4.2.
 
 === camel-core
 
+=== camel-jbang
+
+The `camel export` will not include `camel-observabilities-services` out of the box. To include this, then use `--observe` to enable
+this during export.
+
+Notice when exporting to kubernetes then `camel-observabilities-services` is always enabled.
+
 === camel-google
 
 The scopes parameter for camel-google-calendar, camel-google-calendar-streams, camel-google-drive, camel-google-mail, camel-google-mail-streams and camel-google-sheets-streams has been defined as String instead of Collection<String>. For the migration users will need to, eventually, define scopes as a comma separated list of scopes instead of a Collection instance. For more information the related issue is CAMEL-22247.
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 075da7f830e..772c44e3585 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
@@ -172,6 +172,7 @@ public class Export extends ExportBaseCommand {
         cmd.name = this.name;
         cmd.port = this.port;
         cmd.managementPort = this.managementPort;
+        cmd.observe = this.observe;
         cmd.gav = this.gav;
         cmd.mavenSettings = this.mavenSettings;
         cmd.mavenSettingsSecurity = this.mavenSettingsSecurity;
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 0d27c8dc55a..989d4d85dbb 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
@@ -208,6 +208,10 @@ public abstract class ExportBaseCommand extends CamelCommand {
     @CommandLine.Option(names = { "--open-api" }, description = "Adds an OpenAPI spec from the given file (json or yaml file)")
     protected String openapi;
 
+    @CommandLine.Option(names = { "--observe" }, defaultValue = "false",
+                        description = "Enable observability services")
+    protected boolean observe;
+
     @CommandLine.Option(names = {
             "--dir",
             "--directory" }, description = "Directory where the project will be exported", defaultValue = ".")
@@ -360,6 +364,7 @@ public abstract class ExportBaseCommand extends CamelCommand {
         run.managementPort = managementPort;
         run.excludes = excludes;
         run.openapi = openapi;
+        run.observe = observe;
         run.download = download;
         run.packageScanJars = packageScanJars;
         run.runtime = runtime;
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/main-pom.tmpl b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/main-pom.tmpl
index f8f893a6e64..215128c1de1 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/main-pom.tmpl
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/main-pom.tmpl
@@ -35,10 +35,6 @@
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-main</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-observability-services</artifactId>
-        </dependency>
 {{ .CamelDependencies }}
 
         <!-- for logging in color -->
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/quarkus-pom.tmpl b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/quarkus-pom.tmpl
index 502fc4e4e8d..5f6cd38ae21 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/quarkus-pom.tmpl
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/quarkus-pom.tmpl
@@ -49,10 +49,6 @@
             <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-core</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.apache.camel.quarkus</groupId>
-            <artifactId>camel-quarkus-observability-services</artifactId>
-        </dependency>
 {{ .CamelDependencies }}
 
         <dependency>
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/spring-boot-pom.tmpl b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/spring-boot-pom.tmpl
index e97ad707dce..71e22e080f7 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/spring-boot-pom.tmpl
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/spring-boot-pom.tmpl
@@ -52,10 +52,6 @@
             <groupId>org.apache.camel.springboot</groupId>
             <artifactId>camel-spring-boot-starter</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.apache.camel.springboot</groupId>
-            <artifactId>camel-observability-services-starter</artifactId>
-        </dependency>
 {{ .CamelDependencies }}
         <dependency>
             <groupId>org.springframework.boot</groupId>
diff --git a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportTest.java b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportTest.java
index f78e0d169dd..475306a1915 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportTest.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportTest.java
@@ -585,4 +585,33 @@ class ExportTest {
         Assertions.assertTrue(f.exists());
     }
 
+    @ParameterizedTest
+    @MethodSource("runtimeProvider")
+    public void shouldExportObserve(RuntimeType rt) throws Exception {
+        LOG.info("shouldExportObserve {}", rt);
+        Export command = new Export(new CamelJBangMain());
+        CommandLine.populateCommand(command, "--gav=examples:route:1.0.0", "--dir=" + workingDir,
+                "--runtime=%s".formatted(rt.runtime()), "--observe=true", "target/test-classes/route.yaml");
+        int exit = command.doCall();
+
+        Assertions.assertEquals(0, exit);
+        Model model = readMavenModel();
+        Assertions.assertEquals("examples", model.getGroupId());
+        Assertions.assertEquals("route", model.getArtifactId());
+        Assertions.assertEquals("1.0.0", model.getVersion());
+
+        if (rt == RuntimeType.main) {
+            Assertions.assertTrue(
+                    containsDependency(model.getDependencies(), "org.apache.camel", "camel-observability-services", null));
+        } else if (rt == RuntimeType.springBoot) {
+            Assertions.assertTrue(
+                    containsDependency(model.getDependencies(), "org.apache.camel.springboot",
+                            "camel-observability-services-starter", null));
+        } else if (rt == RuntimeType.quarkus) {
+            Assertions.assertTrue(
+                    containsDependency(model.getDependencies(), "org.apache.camel.quarkus",
+                            "camel-quarkus-observability-services", null));
+        }
+    }
+
 }
diff --git a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExportBaseTest.java b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExportBaseTest.java
index bfb2f3a244a..d4f19a47645 100644
--- a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExportBaseTest.java
+++ b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExportBaseTest.java
@@ -40,6 +40,7 @@ import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
 import org.apache.camel.dsl.jbang.core.common.RuntimeType;
 import org.apache.camel.util.IOHelper;
+import org.apache.maven.model.Dependency;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
 import org.junit.jupiter.api.Assertions;
@@ -150,4 +151,25 @@ public class KubernetesExportBaseTest extends KubernetesBaseTest {
         model.setPomFile(f);
         return model;
     }
+
+    boolean containsDependency(List<Dependency> deps, String group, String artifact, String version) {
+        Dependency dep = new Dependency();
+        dep.setGroupId(group);
+        dep.setArtifactId(artifact);
+        dep.setVersion(version);
+        boolean found = false;
+        for (int i = 0; i < deps.size() && !found; i++) {
+            Dependency d = deps.get(i);
+            if (version == null) {
+                d.setVersion(null);
+            }
+            found = toGAV(d).equals(toGAV(dep));
+        }
+        return found;
+    }
+
+    private String toGAV(Dependency d) {
+        return d.getGroupId() + ":" + d.getArtifactId() + ":" + d.getVersion();
+    }
+
 }
diff --git a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExportTest.java b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExportTest.java
index af3a2083f74..6b4cb7da3b9 100644
--- a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExportTest.java
+++ b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExportTest.java
@@ -673,4 +673,32 @@ class KubernetesExportTest extends KubernetesExportBaseTest {
         Assertions.assertEquals(8779, ports.get(1).getPort());
         Assertions.assertEquals("jolokia", ports.get(1).getTargetPort().getStrVal());
     }
+
+    @ParameterizedTest
+    @MethodSource("runtimeProvider")
+    public void shouldObserveByDefault(RuntimeType rt) throws Exception {
+        KubernetesExport command = createCommand(new String[] { "classpath:route.yaml" },
+                "--gav=examples:route:1.0.0", "--runtime=" + rt.runtime());
+        int exit = command.doCall();
+        Assertions.assertEquals(0, exit);
+
+        Model model = readMavenModel();
+        Assertions.assertEquals("examples", model.getGroupId());
+        Assertions.assertEquals("route", model.getArtifactId());
+        Assertions.assertEquals("1.0.0", model.getVersion());
+
+        if (rt == RuntimeType.main) {
+            Assertions.assertTrue(
+                    containsDependency(model.getDependencies(), "org.apache.camel", "camel-observability-services", null));
+        } else if (rt == RuntimeType.springBoot) {
+            Assertions.assertTrue(
+                    containsDependency(model.getDependencies(), "org.apache.camel.springboot",
+                            "camel-observability-services-starter", null));
+        } else if (rt == RuntimeType.quarkus) {
+            Assertions.assertTrue(
+                    containsDependency(model.getDependencies(), "org.apache.camel.quarkus",
+                            "camel-quarkus-observability-services", null));
+        }
+    }
+
 }