You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by cl...@apache.org on 2024/03/07 09:32:39 UTC

(camel) branch revert-13193-upstream/main_ck_depfinder created (now 5b894cb8bf6)

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

claudio4j pushed a change to branch revert-13193-upstream/main_ck_depfinder
in repository https://gitbox.apache.org/repos/asf/camel.git


      at 5b894cb8bf6 Revert "camel-jbang-plugin-k: infer the dependencies by inspecting the route …"

This branch includes the following new commits:

     new 5b894cb8bf6 Revert "camel-jbang-plugin-k: infer the dependencies by inspecting the route …"

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(camel) 01/01: Revert "camel-jbang-plugin-k: infer the dependencies by inspecting the route …"

Posted by cl...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

claudio4j pushed a commit to branch revert-13193-upstream/main_ck_depfinder
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 5b894cb8bf6c86ff00af4a69a7c067486c8a67b3
Author: Claudio Miranda <cl...@redhat.com>
AuthorDate: Thu Mar 7 06:32:33 2024 -0300

    Revert "camel-jbang-plugin-k: infer the dependencies by inspecting the route …"
    
    This reverts commit 897b81481eca7f211821efa188d80e3f96a312b3.
---
 .../dsl/jbang/core/commands/k/IntegrationRun.java  | 162 ++++-----------------
 .../jbang/core/commands/k/IntegrationRunTest.java  |  58 --------
 .../dsl/jbang/core/commands/k/KubeBaseTest.java    |  13 --
 .../src/test/resources/Sample.java                 |  43 ------
 .../src/test/resources/route-deps.yaml             |  36 -----
 5 files changed, 31 insertions(+), 281 deletions(-)

diff --git a/dsl/camel-jbang/camel-jbang-plugin-k/src/main/java/org/apache/camel/dsl/jbang/core/commands/k/IntegrationRun.java b/dsl/camel-jbang/camel-jbang-plugin-k/src/main/java/org/apache/camel/dsl/jbang/core/commands/k/IntegrationRun.java
index 526bff0bc64..6d5b5a267ca 100644
--- a/dsl/camel-jbang/camel-jbang-plugin-k/src/main/java/org/apache/camel/dsl/jbang/core/commands/k/IntegrationRun.java
+++ b/dsl/camel-jbang/camel-jbang-plugin-k/src/main/java/org/apache/camel/dsl/jbang/core/commands/k/IntegrationRun.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.dsl.jbang.core.commands.k;
 
-import java.io.File;
 import java.io.FileInputStream;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -26,9 +25,7 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Optional;
-import java.util.Set;
 import java.util.StringJoiner;
-import java.util.TreeSet;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.stream.Collectors;
@@ -45,8 +42,6 @@ import org.apache.camel.github.GistResourceResolver;
 import org.apache.camel.github.GitHubResourceResolver;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.impl.engine.DefaultResourceResolvers;
-import org.apache.camel.main.KameletMain;
-import org.apache.camel.main.download.DownloadListener;
 import org.apache.camel.spi.ResourceResolver;
 import org.apache.camel.util.FileUtil;
 import org.apache.camel.util.IOHelper;
@@ -72,11 +67,6 @@ import picocli.CommandLine.Command;
 @Command(name = "run", description = "Run Camel integrations on Kubernetes", sortOptions = false)
 public class IntegrationRun extends KubeBaseCommand {
 
-    // ignored list of dependencies, can be either groupId or artifactId
-    // as camel-k loads dependencies from the catalog produced by camel-k-runtime, some camel core dependencies
-    // are not available, so we have to skip them
-    private static final String[] SKIP_DEPS = new String[] { "camel-core-languages", "camel-endpointdsl" };
-
     @CommandLine.Parameters(description = "The Camel file(s) to run.",
                             arity = "0..9", paramLabel = "<files>")
     String[] filePaths;
@@ -180,7 +170,6 @@ public class IntegrationRun extends KubeBaseCommand {
 
     public IntegrationRun(CamelJBangMain main) {
         super(main);
-        Arrays.sort(SKIP_DEPS);
     }
 
     public Integer doCall() throws Exception {
@@ -193,6 +182,17 @@ public class IntegrationRun extends KubeBaseCommand {
         integration.getMetadata()
                 .setName(getIntegrationName(integrationSources));
 
+        if (dependencies != null && dependencies.length > 0) {
+            List<String> deps = new ArrayList<>();
+            for (String dependency : dependencies) {
+                String normalized = normalizeDependency(dependency);
+                validateDependency(normalized, printer());
+                deps.add(normalized);
+            }
+
+            integration.getSpec().setDependencies(deps);
+        }
+
         if (kit != null) {
             IntegrationKit integrationKit = new IntegrationKit();
             integrationKit.setName(kit);
@@ -246,17 +246,6 @@ public class IntegrationRun extends KubeBaseCommand {
         } else {
             List<Source> resolvedSources = resolveSources(integrationSources);
 
-            Set<String> intDependencies = calculateDependencies(resolvedSources);
-            if (dependencies != null && dependencies.length > 0) {
-                for (String dependency : dependencies) {
-                    String normalized = normalizeDependency(dependency);
-                    validateDependency(normalized, printer());
-                    intDependencies.add(normalized);
-                }
-            }
-            List<String> deps = new ArrayList<>(intDependencies);
-            integration.getSpec().setDependencies(deps);
-
             List<Flows> flows = new ArrayList<>();
             List<Sources> sources = new ArrayList<>();
             for (Source source : resolvedSources) {
@@ -415,22 +404,22 @@ public class IntegrationRun extends KubeBaseCommand {
         }
     }
 
-    private List<Source> resolveSources(List<String> sourcePaths) {
+    private List<Source> resolveSources(List<String> sources) {
         List<Source> resolved = new ArrayList<>();
-        for (String sourcePath : sourcePaths) {
-            SourceScheme sourceScheme = SourceScheme.fromUri(sourcePath);
-            String fileExtension = FileUtil.onlyExt(sourcePath);
-            String fileName = SourceScheme.onlyName(FileUtil.onlyName(sourcePath)) + "." + fileExtension;
+        for (String source : sources) {
+            SourceScheme sourceScheme = SourceScheme.fromUri(source);
+            String fileExtension = FileUtil.onlyExt(source);
+            String fileName = SourceScheme.onlyName(FileUtil.onlyName(source)) + "." + fileExtension;
             try {
                 switch (sourceScheme) {
                     case GIST -> {
                         StringJoiner all = new StringJoiner(",");
-                        GistHelper.fetchGistUrls(sourcePath, all);
+                        GistHelper.fetchGistUrls(source, all);
 
                         try (ResourceResolver resolver = new GistResourceResolver()) {
                             for (String uri : all.toString().split(",")) {
                                 resolved.add(new Source(
-                                        fileName, sourcePath,
+                                        fileName,
                                         IOHelper.loadText(resolver.resolve(uri).getInputStream()),
                                         fileExtension, compression, false));
                             }
@@ -439,24 +428,24 @@ public class IntegrationRun extends KubeBaseCommand {
                     case HTTP -> {
                         try (ResourceResolver resolver = new DefaultResourceResolvers.HttpResolver()) {
                             resolved.add(new Source(
-                                    fileName, sourcePath,
-                                    IOHelper.loadText(resolver.resolve(sourcePath).getInputStream()),
+                                    fileName,
+                                    IOHelper.loadText(resolver.resolve(source).getInputStream()),
                                     fileExtension, compression, false));
                         }
                     }
                     case HTTPS -> {
                         try (ResourceResolver resolver = new DefaultResourceResolvers.HttpsResolver()) {
                             resolved.add(new Source(
-                                    fileName, sourcePath,
-                                    IOHelper.loadText(resolver.resolve(sourcePath).getInputStream()),
+                                    fileName,
+                                    IOHelper.loadText(resolver.resolve(source).getInputStream()),
                                     fileExtension, compression, false));
                         }
                     }
                     case FILE -> {
                         try (ResourceResolver resolver = new DefaultResourceResolvers.FileResolver()) {
                             resolved.add(new Source(
-                                    fileName, sourcePath,
-                                    IOHelper.loadText(resolver.resolve(sourcePath).getInputStream()),
+                                    fileName,
+                                    IOHelper.loadText(resolver.resolve(source).getInputStream()),
                                     fileExtension, compression, true));
                         }
                     }
@@ -464,28 +453,27 @@ public class IntegrationRun extends KubeBaseCommand {
                         try (ResourceResolver resolver = new DefaultResourceResolvers.ClasspathResolver()) {
                             resolver.setCamelContext(new DefaultCamelContext());
                             resolved.add(new Source(
-                                    fileName, sourcePath,
-                                    IOHelper.loadText(resolver.resolve(sourcePath).getInputStream()),
+                                    fileName,
+                                    IOHelper.loadText(resolver.resolve(source).getInputStream()),
                                     fileExtension, compression, true));
                         }
                     }
                     case GITHUB, RAW_GITHUB -> {
                         StringJoiner all = new StringJoiner(",");
-                        GitHubHelper.fetchGithubUrls(sourcePath, all);
+                        GitHubHelper.fetchGithubUrls(source, all);
 
                         try (ResourceResolver resolver = new GitHubResourceResolver()) {
                             for (String uri : all.toString().split(",")) {
                                 resolved.add(new Source(
-                                        fileName, sourcePath,
+                                        fileName,
                                         IOHelper.loadText(resolver.resolve(uri).getInputStream()),
                                         fileExtension, compression, false));
                             }
                         }
                     }
                     case UNKNOWN -> {
-                        try (FileInputStream fis = new FileInputStream(sourcePath)) {
-                            resolved.add(
-                                    new Source(fileName, sourcePath, IOHelper.loadText(fis), fileExtension, compression, true));
+                        try (FileInputStream fis = new FileInputStream(source)) {
+                            resolved.add(new Source(fileName, IOHelper.loadText(fis), fileExtension, compression, true));
                         }
                     }
                 }
@@ -552,7 +540,7 @@ public class IntegrationRun extends KubeBaseCommand {
         }
     }
 
-    private record Source(String name, String path, String content, String extension, boolean compressed, boolean local) {
+    private record Source(String name, String content, String extension, boolean compressed, boolean local) {
 
         /**
          * Provides source contant and automatically handles compression of content when enabled.
@@ -580,92 +568,4 @@ public class IntegrationRun extends KubeBaseCommand {
         }
     }
 
-    private Set<String> calculateDependencies(List<Source> resolvedSources) throws Exception {
-        List<String> files = new ArrayList<>();
-        for (Source s : resolvedSources) {
-            if (s.local && !s.path.startsWith("classpath:")) {
-                // get the absolute path for a local file
-                files.add("file://" + new File(s.path).getAbsolutePath());
-            } else {
-                files.add(s.path);
-            }
-        }
-        final KameletMain main = new KameletMain();
-        //        main.setDownload(false);
-        main.setFresh(false);
-        RunDownloadListener downloadListener = new RunDownloadListener(resolvedSources);
-        main.setDownloadListener(downloadListener);
-        main.setSilent(true);
-        // enable stub in silent mode so we do not use real components
-        main.setStubPattern("*");
-        // do not run for very long in silent run
-        main.addInitialProperty("camel.main.autoStartup", "false");
-        main.addInitialProperty("camel.main.durationMaxSeconds", "1");
-        main.addInitialProperty("camel.jbang.verbose", "false");
-        main.addInitialProperty("camel.main.routesIncludePattern", String.join(",", files));
-
-        main.start();
-        main.run();
-
-        main.stop();
-        main.shutdown();
-        return downloadListener.getDependencies();
-    }
-
-    private static class RunDownloadListener implements DownloadListener {
-
-        final Set<String> dependencies = new TreeSet<>();
-        private final List<Source> resolvedSources;
-
-        public RunDownloadListener(List<Source> resolvedSources) {
-            this.resolvedSources = resolvedSources;
-        }
-
-        @Override
-        public void onDownloadDependency(String groupId, String artifactId, String version) {
-            if (!skipArtifact(groupId, artifactId)) {
-                // format: camel:<component name>
-                // KameletMain is used to resolve the dependencies and it already contains
-                // camel-kamelets and camel-rest artifacts, then the source code must be inspected
-                // to actually add them if they are used in the route.
-                if ("camel-rest".equals(artifactId) && routeContainsEndpoint("rest")) {
-                    dependencies.add("camel:" + artifactId.replace("camel-", ""));
-                }
-                if (("camel-kamelet".equals(artifactId) || "camel-yaml-dsl".equals(artifactId))
-                        && routeContainsEndpoint("kamelet")) {
-                    dependencies.add("camel:" + artifactId.replace("camel-", ""));
-                }
-                if (!"camel-rest".equals(artifactId) && !"camel-kamelet".equals(artifactId)
-                        && !"camel-yaml-dsl".equals(artifactId)) {
-                    dependencies.add("camel:" + artifactId.replace("camel-", ""));
-                }
-            }
-        }
-
-        private boolean skipArtifact(String groupId, String artifactId) {
-            return Arrays.binarySearch(SKIP_DEPS, artifactId) >= 0 || Arrays.binarySearch(SKIP_DEPS, groupId) >= 0;
-        }
-
-        // inspect the source code to determine if it contains a specific endpoint
-        private boolean routeContainsEndpoint(String componentName) {
-            boolean contains = false;
-            for (Source source : resolvedSources) {
-                // find if the route contains the component with the format: <component>:
-                if (source.content.contains(componentName + ":")) {
-                    contains = true;
-                    break;
-                }
-            }
-            return contains;
-        }
-
-        @Override
-        public void onAlreadyDownloadedDependency(String groupId, String artifactId, String version) {
-        }
-
-        private Set<String> getDependencies() {
-            return dependencies;
-        }
-    }
-
 }
diff --git a/dsl/camel-jbang/camel-jbang-plugin-k/src/test/java/org/apache/camel/dsl/jbang/core/commands/k/IntegrationRunTest.java b/dsl/camel-jbang/camel-jbang-plugin-k/src/test/java/org/apache/camel/dsl/jbang/core/commands/k/IntegrationRunTest.java
index d32c97a2815..aaf3e182098 100644
--- a/dsl/camel-jbang/camel-jbang-plugin-k/src/test/java/org/apache/camel/dsl/jbang/core/commands/k/IntegrationRunTest.java
+++ b/dsl/camel-jbang/camel-jbang-plugin-k/src/test/java/org/apache/camel/dsl/jbang/core/commands/k/IntegrationRunTest.java
@@ -17,7 +17,6 @@
 
 package org.apache.camel.dsl.jbang.core.commands.k;
 
-import java.util.Arrays;
 import java.util.regex.Pattern;
 
 import org.apache.camel.RuntimeCamelException;
@@ -200,63 +199,6 @@ class IntegrationRunTest extends KubeBaseTest {
                   traits: {}""", printer.getOutput());
     }
 
-    @Test
-    public void shouldInferDependenciesYamlRoute() throws Exception {
-        IntegrationRun command = createCommand();
-        command.filePaths = new String[] { "classpath:route-deps.yaml" };
-        command.output = "yaml";
-        command.doCall();
-
-        String[] specDependencies = getDependencies(printer.getOutput());
-        String[] deps = new String[] {
-                "camel:caffeine", "camel:http", "camel:jackson", "camel:jsonpath", "camel:log", "camel:timer" };
-        Assertions.assertArrayEquals(deps, specDependencies, "Dependencies don't match: " + Arrays.toString(specDependencies));
-    }
-
-    @Test
-    public void shouldAddComplexDependenciesYamlRoute() throws Exception {
-        IntegrationRun command = createCommand();
-        command.filePaths = new String[] { "classpath:route-deps.yaml" };
-        command.dependencies = new String[] { "camel-twitter", "mvn:foo:bar:1.0" };
-        command.output = "yaml";
-        command.doCall();
-
-        String[] specDependencies = getDependencies(printer.getOutput());
-        String[] deps = new String[] {
-                "camel:caffeine", "camel:http", "camel:jackson", "camel:jsonpath", "camel:log", "camel:timer", "camel:twitter",
-                "mvn:foo:bar:1.0" };
-        Assertions.assertArrayEquals(deps, specDependencies, "Dependencies don't match: " + Arrays.toString(specDependencies));
-    }
-
-    @Test
-    public void shouldInferDependenciesJavaRoute() throws Exception {
-        IntegrationRun command = createCommand();
-        command.filePaths = new String[] { "classpath:Sample.java" };
-        command.output = "yaml";
-        command.doCall();
-
-        String[] specDependencies = getDependencies(printer.getOutput());
-        String[] deps = new String[] {
-                "camel:aws2-s3", "camel:caffeine", "camel:dropbox", "camel:jacksonxml", "camel:java-joor-dsl", "camel:kafka",
-                "camel:mongodb", "camel:telegram", "camel:zipfile" };
-        Assertions.assertArrayEquals(deps, specDependencies, "Dependencies don't match: " + Arrays.toString(specDependencies));
-    }
-
-    @Test
-    public void shouldAddComplexDependenciesJavaRoute() throws Exception {
-        IntegrationRun command = createCommand();
-        command.filePaths = new String[] { "classpath:Sample.java" };
-        command.dependencies = new String[] { "camel-twitter", "mvn:foo:bar:1.0" };
-        command.output = "yaml";
-        command.doCall();
-
-        String[] specDependencies = getDependencies(printer.getOutput());
-        String[] deps = new String[] {
-                "camel:aws2-s3", "camel:caffeine", "camel:dropbox", "camel:jacksonxml", "camel:java-joor-dsl", "camel:kafka",
-                "camel:mongodb", "camel:telegram", "camel:twitter", "camel:zipfile", "mvn:foo:bar:1.0" };
-        Assertions.assertArrayEquals(deps, specDependencies, "Dependencies don't match: " + Arrays.toString(specDependencies));
-    }
-
     @Test
     public void shouldAddEnvVars() throws Exception {
         IntegrationRun command = createCommand();
diff --git a/dsl/camel-jbang/camel-jbang-plugin-k/src/test/java/org/apache/camel/dsl/jbang/core/commands/k/KubeBaseTest.java b/dsl/camel-jbang/camel-jbang-plugin-k/src/test/java/org/apache/camel/dsl/jbang/core/commands/k/KubeBaseTest.java
index bcc1e0929c7..ab3dde9278f 100644
--- a/dsl/camel-jbang/camel-jbang-plugin-k/src/test/java/org/apache/camel/dsl/jbang/core/commands/k/KubeBaseTest.java
+++ b/dsl/camel-jbang/camel-jbang-plugin-k/src/test/java/org/apache/camel/dsl/jbang/core/commands/k/KubeBaseTest.java
@@ -19,8 +19,6 @@ package org.apache.camel.dsl.jbang.core.commands.k;
 
 import java.io.IOException;
 import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
 
 import io.fabric8.kubernetes.client.KubernetesClient;
 import io.fabric8.kubernetes.client.server.mock.KubernetesCrudDispatcher;
@@ -38,7 +36,6 @@ import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.TestInstance;
-import org.yaml.snakeyaml.Yaml;
 
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public class KubeBaseTest {
@@ -93,14 +90,4 @@ public class KubeBaseTest {
         return created;
     }
 
-    protected String[] getDependencies(String yamlSource) {
-        Yaml yaml = new Yaml();
-        Map<String, Object> obj = yaml.load(yamlSource);
-        //noinspection unchecked
-        obj = (Map<String, Object>) obj.get("spec");
-        //noinspection unchecked
-        List<String> specDeps = (List<String>) obj.get("dependencies");
-        return specDeps.toArray(new String[specDeps.size()]);
-    }
-
 }
diff --git a/dsl/camel-jbang/camel-jbang-plugin-k/src/test/resources/Sample.java b/dsl/camel-jbang/camel-jbang-plugin-k/src/test/resources/Sample.java
deleted file mode 100644
index 1e1ba626c7e..00000000000
--- a/dsl/camel-jbang/camel-jbang-plugin-k/src/test/resources/Sample.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import java.lang.Exception;
-import java.lang.Override;
-import org.apache.camel.Exchange;
-import org.apache.camel.builder.RouteBuilder;
-
-public class Sample extends RouteBuilder {
-
-    String s = "random";
-
-    @Override
-    public void configure() throws Exception {
-        String params = "random_string";
-        from("telegram:" + params)
-            .setHeader("test",simple("${in.header.fileName}"))
-            .pollEnrich()
-                .simple("aws2-s3://data?fileName=${in.header.fileName}&deleteAfterRead=false")
-                .unmarshal().jacksonXml()
-                .to("mongodb:test")
-            .end()
-            .unmarshal().zipFile()
-            .to("dropbox:random")
-            .toD("caffeine-cache:" + s)
-            .to("kafka:test");
-    }
-}
-
diff --git a/dsl/camel-jbang/camel-jbang-plugin-k/src/test/resources/route-deps.yaml b/dsl/camel-jbang/camel-jbang-plugin-k/src/test/resources/route-deps.yaml
deleted file mode 100644
index d7eb7a9c4e1..00000000000
--- a/dsl/camel-jbang/camel-jbang-plugin-k/src/test/resources/route-deps.yaml
+++ /dev/null
@@ -1,36 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-- from:
-    uri: "timer:sample"
-    parameters:
-      period: "2s"
-    steps:
-    - toD: "caffeine-cache:cache-${routeId}?key=lastUpdate"
-    - toD: "https://test/fdsnws/event/1/query"
-    - unmarshal:
-        json: {}
-    - claimCheck:
-        operation: Push
-    - toD: "caffeine-cache:cache-${routeId}?key=lastUpdate"
-    - split:
-        jsonpath: "$.features"
-        steps:
-          - marshal:
-              json: {}
-          - to: "log:info"
-