This is an automated email from the ASF dual-hosted git repository. fmariani pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
commit f03c91c010c5983d31561577063a01d1382476fa Author: Croway <[email protected]> AuthorDate: Mon Feb 16 18:17:50 2026 +0100 camel-jbang version list - include Quarkus and Camel Quarkus versions --- .../dsl/jbang/core/commands/update/UpdateList.java | 11 +-- .../jbang/core/commands/version/VersionList.java | 79 ++++++++++++++++++++-- .../camel/dsl/jbang/core/common/VersionHelper.java | 5 ++ .../camel/dsl/jbang/core/model/VersionListDTO.java | 16 ++++- .../dsl/jbang/core/commands/mcp/VersionTools.java | 2 + 5 files changed, 100 insertions(+), 13 deletions(-) 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 813b2dbd1b89..82ee0cb73afd 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" }, @@ -177,6 +179,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); + } + if (lts) { rows.removeIf(r -> !"lts".equalsIgnoreCase(r.kind)); } @@ -226,17 +233,20 @@ public class VersionList extends CamelCommand { Jsoner.serialize( rows.stream() .map(row -> new VersionListDTO( - row.coreVersion, runtime.runtime(), row.runtimeVersion, row.jdks, row.kind, - row.releaseDate, - row.eolDate)) + row.coreVersion, runtime.runtime(), row.runtimeVersion, + row.quarkusVersion, row.jdks, row.kind, + row.releaseDate, row.eolDate)) .map(VersionListDTO::toMap) .collect(Collectors.toList()))); } else { 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") @@ -599,9 +609,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 1cc805181e4a..e69965ff4c19 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 jdkVersion; private String kind; private String releaseDate; @@ -33,12 +34,14 @@ public class VersionListDTO { public VersionListDTO() { } - public VersionListDTO(String camelVersion, String runtime, String runtimeVersion, String jdkVersion, String kind, + public VersionListDTO(String camelVersion, String runtime, String runtimeVersion, String quarkusVersion, + String jdkVersion, String kind, String releaseDate, String eolDate) { this.camelVersion = camelVersion; this.runtime = runtime; this.runtimeVersion = runtimeVersion; + this.quarkusVersion = quarkusVersion; this.jdkVersion = jdkVersion; this.kind = kind; this.releaseDate = releaseDate; @@ -69,6 +72,14 @@ public class VersionListDTO { this.runtimeVersion = runtimeVersion; } + public String getQuarkusVersion() { + return quarkusVersion; + } + + public void setQuarkusVersion(String quarkusVersion) { + this.quarkusVersion = quarkusVersion; + } + public String getJdkVersion() { return jdkVersion; } @@ -108,6 +119,9 @@ public class VersionListDTO { if (runtimeVersion != null) { jo.put("runtimeVersion", runtimeVersion); } + if (quarkusVersion != null) { + jo.put("quarkusVersion", quarkusVersion); + } if (jdkVersion != null) { jo.put("jdkVersion", jdkVersion); } 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 e248331082b6..4e9aec34b76c 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"), @@ -120,6 +121,7 @@ public class VersionTools { String camelVersion, String runtime, String runtimeVersion, + String quarkusVersion, String jdkVersion, String kind, String releaseDate,
