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 2023/03/14 09:57:01 UTC

[camel] 02/04: CAMEL-19128: camel-jbang - version command to show release date/eol

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

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

commit 9444487087d89396aef8ef3d9473029dad1e7d16
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Tue Mar 14 09:52:43 2023 +0100

    CAMEL-19128: camel-jbang - version command to show release date/eol
---
 .../jbang/core/commands/version/VersionList.java   | 103 +++++++++++++--------
 1 file changed, 66 insertions(+), 37 deletions(-)

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 3946440410a..8cc69fa76aa 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
@@ -16,24 +16,32 @@
  */
 package org.apache.camel.dsl.jbang.core.commands.version;
 
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Date;
 import java.util.List;
+import java.util.Locale;
 import java.util.stream.Collectors;
 
 import com.github.freva.asciitable.AsciiTable;
 import com.github.freva.asciitable.Column;
 import com.github.freva.asciitable.HorizontalAlign;
+import org.apache.camel.catalog.CamelCatalog;
+import org.apache.camel.catalog.DefaultCamelCatalog;
 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.VersionHelper;
 import org.apache.camel.main.KameletMain;
 import org.apache.camel.main.download.MavenDependencyDownloader;
+import org.apache.camel.tooling.model.ReleaseModel;
 import picocli.CommandLine;
 
 @CommandLine.Command(name = "list", description = "Displays available Camel versions")
 public class VersionList extends CamelCommand {
 
+    private static final String YYYY_MM_DD = "yyyy-MM-dd";
+
     @CommandLine.Option(names = { "--sort" },
                         description = "Sort by version", defaultValue = "version")
     String sort;
@@ -92,17 +100,34 @@ public class VersionList extends CamelCommand {
             return 1;
         }
 
+        CamelCatalog catalog = new DefaultCamelCatalog();
+        List<ReleaseModel> releases = catalog.camelReleases();
+
         List<Row> rows = new ArrayList<>();
         for (String[] v : versions) {
             Row row = new Row();
             rows.add(row);
             row.coreVersion = v[0];
             row.runtimeVersion = v[1];
+
+            // enrich with details from catalog (if we can find any)
+            ReleaseModel rm = releases.stream().filter(r -> v[0].equals(r.getVersion())).findFirst().orElse(null);
+            if (rm != null) {
+                row.releaseDate = rm.getDate();
+                row.eolDate = rm.getEol();
+                row.jdks = rm.getJdk();
+                row.kind = rm.getKind();
+            }
+        }
+
+        if (lts) {
+            rows.removeIf(r -> !"lts".equalsIgnoreCase(r.kind));
         }
 
         // sort rows
         rows.sort(this::sortRow);
 
+        // camel-quarkus is not LTS and have its own release schedule
         System.out.println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, Arrays.asList(
                 new Column().header("CAMEL VERSION")
                         .headerAlign(HorizontalAlign.CENTER).dataAlign(HorizontalAlign.CENTER).with(r -> r.coreVersion),
@@ -112,8 +137,12 @@ public class VersionList extends CamelCommand {
                         .headerAlign(HorizontalAlign.CENTER).dataAlign(HorizontalAlign.CENTER).with(r -> r.runtimeVersion),
                 new Column().header("JDK")
                         .headerAlign(HorizontalAlign.CENTER).dataAlign(HorizontalAlign.RIGHT).with(this::jdkVersion),
-                new Column().header("SUPPORT")
-                        .headerAlign(HorizontalAlign.CENTER).dataAlign(HorizontalAlign.CENTER).with(this::lts))));
+                new Column().header("KIND").visible(!"quarkus".equalsIgnoreCase(runtime))
+                        .headerAlign(HorizontalAlign.CENTER).dataAlign(HorizontalAlign.CENTER).with(this::kind),
+                new Column().header("RELEASED").visible(!"quarkus".equalsIgnoreCase(runtime))
+                        .headerAlign(HorizontalAlign.CENTER).dataAlign(HorizontalAlign.RIGHT).with(this::releaseDate),
+                new Column().header("SUPPORTED UNTIL").visible(!"quarkus".equalsIgnoreCase(runtime))
+                        .headerAlign(HorizontalAlign.CENTER).dataAlign(HorizontalAlign.RIGHT).with(this::eolDate))));
 
         return 0;
     }
@@ -134,58 +163,58 @@ public class VersionList extends CamelCommand {
     }
 
     private String jdkVersion(Row r) {
-        if (VersionHelper.isGE(r.coreVersion, "4.0")) {
-            return "17";
-        } else if (VersionHelper.isGE(r.coreVersion, "3.15")) {
-            return "11, 17";
-        } else if (VersionHelper.isGE(r.coreVersion, "3.15")) {
-            return "11, 17";
-        } else if (VersionHelper.isGE(r.coreVersion, "3.0")) {
-            return "8, 11";
-        } else {
-            return "8";
+        return r.jdks;
+    }
+
+    private String kind(Row r) {
+        if (r.kind != null) {
+            return r.kind.toUpperCase(Locale.ROOT);
         }
+        return "";
     }
 
-    private String lts(Row r) {
-        return isLtsRelease(r.coreVersion) ? "LTS" : "";
+    private String releaseDate(Row r) {
+        try {
+            if (r.releaseDate != null) {
+                SimpleDateFormat sdf = new SimpleDateFormat(YYYY_MM_DD);
+                Date d = sdf.parse(r.releaseDate);
+                SimpleDateFormat sdf2 = new SimpleDateFormat("MMMM yyyy", Locale.US);
+                return sdf2.format(d);
+            }
+        } catch (Exception e) {
+            // ignore
+        }
+        return r.releaseDate != null ? r.releaseDate : "";
     }
 
-    private static boolean isLtsRelease(String version) {
-        if (VersionHelper.isBetween(version, "4.0.0", "4.1")) {
-            return true;
-        } else if (VersionHelper.isBetween(version, "3.20", "3.99")) {
-            return true;
-        } else if (VersionHelper.isBetween(version, "3.18", "3.19")) {
-            return true;
-        } else if (VersionHelper.isBetween(version, "3.14", "3.15")) {
-            return true;
-        } else if (VersionHelper.isBetween(version, "3.11", "3.12")) {
-            return true;
-        } else if (VersionHelper.isBetween(version, "3.11", "3.12")) {
-            return true;
-        } else if (VersionHelper.isBetween(version, "3.7", "3.8")) {
-            return true;
-        } else if (VersionHelper.isBetween(version, "3.4", "3.5")) {
-            return true;
+    private String eolDate(Row r) {
+        try {
+            if (r.eolDate != null) {
+                SimpleDateFormat sdf = new SimpleDateFormat(YYYY_MM_DD);
+                Date d = sdf.parse(r.eolDate);
+                SimpleDateFormat sdf2 = new SimpleDateFormat("MMMM yyyy", Locale.US);
+                return sdf2.format(d);
+            }
+        } catch (Exception e) {
+            // ignore
         }
-        return false;
+        return r.eolDate != null ? r.eolDate : "";
     }
 
     private boolean acceptVersion(String version) {
         if (version == null) {
             return false;
         }
-        boolean accept = VersionHelper.isGE(version, minimumVersion);
-        if (accept && lts) {
-            accept = isLtsRelease(version);
-        }
-        return accept;
+        return VersionHelper.isGE(version, minimumVersion);
     }
 
     private static class Row {
         String coreVersion;
         String runtimeVersion;
+        String releaseDate;
+        String eolDate;
+        String kind;
+        String jdks;
     }
 
 }