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

ppalaga pushed a commit to branch camel-4.18.x
in repository https://gitbox.apache.org/repos/asf/camel.git

commit b927a3516e2ed2adef2d701c512a9620b0b548cd
Author: Croway <[email protected]>
AuthorDate: Mon Feb 16 18:17:50 2026 +0100

    camel-jbang version list - include Quarkus and Camel Quarkus versions
---
 .../jbang/camel-jbang-configuration-metadata.json  |  4 +-
 .../dsl/jbang/core/commands/update/UpdateList.java | 11 +---
 .../jbang/core/commands/version/VersionList.java   | 75 +++++++++++++++++++++-
 .../camel/dsl/jbang/core/common/VersionHelper.java |  5 ++
 .../camel/dsl/jbang/core/model/VersionListDTO.java | 15 ++++-
 .../dsl/jbang/core/commands/mcp/VersionTools.java  |  2 +
 6 files changed, 98 insertions(+), 14 deletions(-)

diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/jbang/camel-jbang-configuration-metadata.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/jbang/camel-jbang-configuration-metadata.json
index 22ca438bb84d..7249ffadeb29 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/jbang/camel-jbang-configuration-metadata.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/jbang/camel-jbang-configuration-metadata.json
@@ -3,7 +3,6 @@
     { "name": "camel.jbang", "description": "Camel JBang configurations" }
   ],
   "properties": [
-    { "name": "camel.jbang.buildTool", "required": false, "description": 
"Build tool to use (Maven or Gradle)", "type": "string", "javaType": "String", 
"defaultValue": "Maven", "secret": false },
     { "name": "camel.jbang.camel-version", "required": false, "description": 
"The version of Apache Camel to use", "type": "string", "javaType": "String", 
"secret": false },
     { "name": "camel.jbang.camelSpringBootVersion", "required": false, 
"description": "To use a custom Camel version when running or export to Spring 
Boot", "label": "spring-boot", "type": "string", "javaType": "String", 
"secret": false },
     { "name": "camel.jbang.classpathFiles", "required": false, "description": 
"Additional files to add to classpath (Use commas to separate multiple 
files).", "type": "string", "javaType": "String", "secret": false },
@@ -17,11 +16,10 @@
     { "name": "camel.jbang.excludes", "required": false, "description": 
"Exclude files by name or pattern (Use commas to separate multiple files)", 
"type": "string", "javaType": "String", "secret": false },
     { "name": "camel.jbang.exportDir", "required": false, "description": 
"Directory where the project will be exported", "type": "string", "javaType": 
"String", "defaultValue": ".", "secret": false },
     { "name": "camel.jbang.gav", "required": false, "description": "Maven 
coordinate (groupId:artifactId:version)", "type": "string", "javaType": 
"String", "secret": false },
-    { "name": "camel.jbang.gradleWrapper", "required": false, "description": 
"Include Gradle Wrapper files in the exported project", "type": "boolean", 
"javaType": "boolean", "defaultValue": true, "secret": false },
     { "name": "camel.jbang.groovyFiles", "required": false, "description": 
"Additional groovy source files to export to src\/main\/resources\/camel-groovy 
directory (Use commas to separate multiple files)", "type": "string", 
"javaType": "String", "secret": false },
     { "name": "camel.jbang.health", "required": false, "description": "Health 
check at \/observe\/health on local HTTP server (port 8080 by default)", 
"type": "boolean", "javaType": "boolean", "defaultValue": false, "secret": 
false, "deprecated": true },
     { "name": "camel.jbang.ignoreLoadingError", "required": false, 
"description": "Whether to ignore route loading and compilation errors (use 
this with care!)", "label": "advanced", "type": "boolean", "javaType": 
"boolean", "defaultValue": false, "secret": false },
-    { "name": "camel.jbang.javaVersion", "required": false, "description": 
"Java version (17 or 21)", "type": "enum", "javaType": "String", 
"defaultValue": "21", "secret": false, "enum": [ "17", "21" ] },
+    { "name": "camel.jbang.javaVersion", "required": false, "description": 
"Java version", "type": "enum", "javaType": "String", "defaultValue": "21", 
"secret": false, "enum": [ "21" ] },
     { "name": "camel.jbang.jfr", "required": false, "description": "Enables 
Java Flight Recorder saving recording to disk on exit", "type": "boolean", 
"javaType": "boolean", "defaultValue": false, "secret": false },
     { "name": "camel.jbang.jfr-profile", "required": false, "description": 
"Java Flight Recorder profile to use (such as default or profile)", "type": 
"string", "javaType": "String", "defaultValue": "default", "secret": false },
     { "name": "camel.jbang.jib-maven-plugin-version", "required": false, 
"description": "Version to use for jib-maven-plugin if exporting to camel-main 
and have Kubernetes enabled (jkube.xxx options)", "label": "kubernetes", 
"type": "string", "javaType": "String", "defaultValue": "3.4.5", "secret": 
false },
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/update/UpdateList.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/update/UpdateList.java
index 5f6226442b58..ccbc6470c144 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/update/UpdateList.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/update/UpdateList.java
@@ -38,6 +38,7 @@ import com.github.freva.asciitable.HorizontalAlign;
 import org.apache.camel.dsl.jbang.core.commands.CamelCommand;
 import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
 import org.apache.camel.dsl.jbang.core.common.RuntimeType;
+import org.apache.camel.dsl.jbang.core.common.VersionHelper;
 import org.apache.camel.dsl.jbang.core.model.UpdateListDTO;
 import org.apache.camel.main.download.MavenDependencyDownloader;
 import org.apache.camel.tooling.maven.MavenArtifact;
@@ -133,12 +134,12 @@ public class UpdateList extends CamelCommand {
                 // upgrade recipes 4.12.1 was released, but only Camel 4.12.0 
is released, in this case,
                 // consider the major.minor only
                 if (runtimeVersion == null) {
-                    String majorMinorVersion = getMajorMinorVersion(l[0]);
+                    String majorMinorVersion = 
VersionHelper.getMajorMinorVersion(l[0]);
                     runtimeVersion
                             = recipesVersions.sbVersions().stream()
                                     .filter(v -> {
                                         // Handle micro Camel Upgrade Recipes 
versions like 4.14.0.1
-                                        String actualMajorMinorVersion = 
getMajorMinorVersion(v[0]);
+                                        String actualMajorMinorVersion = 
VersionHelper.getMajorMinorVersion(v[0]);
                                         return 
actualMajorMinorVersion.equals(majorMinorVersion);
                                     })
                                     .findFirst()
@@ -192,12 +193,6 @@ public class UpdateList extends CamelCommand {
         return 0;
     }
 
-    private static String getMajorMinorVersion(String l) {
-        String[] versions = l.split("\\.");
-        String majorMinorVersion = versions[0] + "." + versions[1];
-        return majorMinorVersion;
-    }
-
     /**
      * Download camel, camel-spring-boot and quarkus upgrade-recipes 
dependencies and collect existing versions
      *
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/version/VersionList.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/version/VersionList.java
index 8ae9d858687b..b2c2ec3b3936 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/version/VersionList.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/version/VersionList.java
@@ -76,6 +76,8 @@ public class VersionList extends CamelCommand {
     private static final String GIT_CAMEL_QUARKUS_URL
             = 
"https://raw.githubusercontent.com/apache/camel-website/main/content/releases/q/release-%s.md";;
 
+    private static final String QUARKUS_PLATFORM_URL = 
"https://registry.quarkus.io/client/platforms";;
+
     private static final String DEFAULT_DATE_FORMAT = "MMMM yyyy";
 
     @CommandLine.Option(names = { "--runtime" },
@@ -181,6 +183,11 @@ public class VersionList extends CamelCommand {
         List<Row> rows = new ArrayList<>();
         filterVersions(versions, rows, releases);
 
+        // resolve actual Quarkus platform versions from registry
+        if (RuntimeType.quarkus == runtime) {
+            resolveQuarkusPlatformVersions(rows);
+        }
+
         filterVendor(vendor, rows);
 
         if (lts) {
@@ -233,7 +240,7 @@ public class VersionList extends CamelCommand {
                             rows.stream()
                                     .map(row -> new VersionListDTO(
                                             row.coreVersion, 
runtime.runtime(), row.runtimeVersion,
-                                            vendor, row.jdks, row.kind,
+                                            row.quarkusVersion, vendor, 
row.jdks, row.kind,
                                             row.releaseDate, row.eolDate))
                                     .map(VersionListDTO::toMap)
                                     .collect(Collectors.toList())));
@@ -241,8 +248,11 @@ public class VersionList extends CamelCommand {
             printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, 
Arrays.asList(
                     new Column().header("CAMEL VERSION")
                             
.headerAlign(HorizontalAlign.CENTER).dataAlign(HorizontalAlign.CENTER).with(r 
-> r.coreVersion),
-                    new Column().header("QUARKUS").visible(RuntimeType.quarkus 
== runtime)
+                    new 
Column().header("CAMEL_QUARKUS").visible(RuntimeType.quarkus == runtime)
                             
.headerAlign(HorizontalAlign.CENTER).dataAlign(HorizontalAlign.CENTER).with(r 
-> r.runtimeVersion),
+                    new Column().header("QUARKUS").visible(RuntimeType.quarkus 
== runtime)
+                            
.headerAlign(HorizontalAlign.CENTER).dataAlign(HorizontalAlign.CENTER)
+                            .with(r -> r.quarkusVersion != null ? 
r.quarkusVersion : ""),
                     new 
Column().header("SPRING-BOOT").visible(RuntimeType.springBoot == runtime)
                             
.headerAlign(HorizontalAlign.CENTER).dataAlign(HorizontalAlign.CENTER).with(r 
-> r.runtimeVersion),
                     new Column().header("JDK")
@@ -611,9 +621,70 @@ public class VersionList extends CamelCommand {
         return null;
     }
 
+    /**
+     * Resolves the actual Quarkus platform version for each row by fetching 
the Quarkus platform registry and matching
+     * the Camel Quarkus major.minor version against stream IDs.
+     */
+    private void resolveQuarkusPlatformVersions(List<Row> rows) {
+        try {
+            HttpClient hc = HttpClient.newHttpClient();
+            HttpResponse<String> res = hc.send(
+                    HttpRequest.newBuilder(new URI(QUARKUS_PLATFORM_URL))
+                            .timeout(Duration.ofSeconds(2))
+                            .build(),
+                    HttpResponse.BodyHandlers.ofString());
+
+            if (res.statusCode() == 200) {
+                JsonObject json = (JsonObject) Jsoner.deserialize(res.body());
+                JsonArray platforms = json.getCollection("platforms");
+                if (platforms != null && !platforms.isEmpty()) {
+                    JsonObject platform = platforms.getMap(0);
+                    JsonArray streams = platform.getCollection("streams");
+                    if (streams != null) {
+                        // find the latest camel quarkus version per 
major.minor
+                        java.util.Map<String, Row> latestPerStream = new 
java.util.LinkedHashMap<>();
+                        for (Row row : rows) {
+                            if (row.runtimeVersion != null) {
+                                String majorMinor = 
VersionHelper.getMajorMinorVersion(row.runtimeVersion);
+                                Row existing = latestPerStream.get(majorMinor);
+                                if (existing == null
+                                        || 
VersionHelper.compare(row.runtimeVersion, existing.runtimeVersion) > 0) {
+                                    latestPerStream.put(majorMinor, row);
+                                }
+                            }
+                        }
+                        // only set quarkus version on the latest row per 
stream
+                        for (var entry : latestPerStream.entrySet()) {
+                            String majorMinor = entry.getKey();
+                            for (int i = 0; i < streams.size(); i++) {
+                                JsonObject stream = streams.getMap(i);
+                                String streamId = stream.getString("id");
+                                if (majorMinor.equals(streamId)) {
+                                    JsonArray releases = 
stream.getCollection("releases");
+                                    if (releases != null && 
!releases.isEmpty()) {
+                                        JsonObject release = 
releases.getMap(0);
+                                        String quarkusCoreVersion
+                                                = 
release.getString("quarkus-core-version");
+                                        if (quarkusCoreVersion != null) {
+                                            entry.getValue().quarkusVersion = 
quarkusCoreVersion;
+                                        }
+                                    }
+                                    break;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        } catch (Exception e) {
+            // ignore - if the registry is not reachable within 2 seconds, skip
+        }
+    }
+
     private static class Row {
         String coreVersion;
         String runtimeVersion;
+        String quarkusVersion;
         String releaseDate;
         long daysSince = -1;
         String eolDate;
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/VersionHelper.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/VersionHelper.java
index b7832e95dc58..0cd53f4e7435 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/VersionHelper.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/VersionHelper.java
@@ -130,6 +130,11 @@ public final class VersionHelper {
         return s.compareTo(t);
     }
 
+    public static String getMajorMinorVersion(String version) {
+        String[] parts = version.split("\\.");
+        return parts[0] + "." + parts[1];
+    }
+
     public static String extractCamelVersion() {
         return org.apache.camel.main.util.VersionHelper.extractCamelVersion();
     }
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/model/VersionListDTO.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/model/VersionListDTO.java
index 3ee26e3f6b22..bd90e1474344 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/model/VersionListDTO.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/model/VersionListDTO.java
@@ -25,6 +25,7 @@ public class VersionListDTO {
     private String camelVersion;
     private String runtime;
     private String runtimeVersion;
+    private String quarkusVersion;
     private String vendor;
     private String jdkVersion;
     private String kind;
@@ -34,12 +35,13 @@ public class VersionListDTO {
     public VersionListDTO() {
     }
 
-    public VersionListDTO(String camelVersion, String runtime, String 
runtimeVersion,
+    public VersionListDTO(String camelVersion, String runtime, String 
runtimeVersion, String quarkusVersion,
                           String vendor, String jdkVersion, String kind,
                           String releaseDate, String eolDate) {
         this.camelVersion = camelVersion;
         this.runtime = runtime;
         this.runtimeVersion = runtimeVersion;
+        this.quarkusVersion = quarkusVersion;
         this.vendor = vendor;
         this.jdkVersion = jdkVersion;
         this.kind = kind;
@@ -71,6 +73,14 @@ public class VersionListDTO {
         this.runtimeVersion = runtimeVersion;
     }
 
+    public String getQuarkusVersion() {
+        return quarkusVersion;
+    }
+
+    public void setQuarkusVersion(String quarkusVersion) {
+        this.quarkusVersion = quarkusVersion;
+    }
+
     public String getVendor() {
         return vendor;
     }
@@ -118,6 +128,9 @@ public class VersionListDTO {
         if (runtimeVersion != null) {
             jo.put("runtimeVersion", runtimeVersion);
         }
+        if (quarkusVersion != null) {
+            jo.put("quarkusVersion", quarkusVersion);
+        }
         if (vendor != null) {
             jo.put("vendor", vendor);
         }
diff --git 
a/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/VersionTools.java
 
b/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/VersionTools.java
index eaced47c0bba..c3d27efaefbb 100644
--- 
a/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/VersionTools.java
+++ 
b/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/VersionTools.java
@@ -83,6 +83,7 @@ public class VersionTools {
                         v.getString("camelVersion"),
                         v.getString("runtime"),
                         v.getString("runtimeVersion"),
+                        v.getString("quarkusVersion"),
                         v.getString("jdkVersion"),
                         v.getString("kind"),
                         v.getString("releaseDate"),
@@ -114,6 +115,7 @@ public class VersionTools {
             String camelVersion,
             String runtime,
             String runtimeVersion,
+            String quarkusVersion,
             String jdkVersion,
             String kind,
             String releaseDate,

Reply via email to