This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 7320b93bf106 camel-jbang - Download GitHub examples to local temp dir
before running (#23625)
7320b93bf106 is described below
commit 7320b93bf1062203ae755400b71d5d45e3fb5c80
Author: Claus Ibsen <[email protected]>
AuthorDate: Fri May 29 10:33:02 2026 +0200
camel-jbang - Download GitHub examples to local temp dir before running
(#23625)
* camel-jbang - Download GitHub examples to local temp dir before running
Co-Authored-By: Claude <[email protected]>
* camel-jbang - Use system proxy for downloading GitHub examples
Co-Authored-By: Claude <[email protected]>
* camel-jbang - Use system proxy for all HTTP clients
Co-Authored-By: Claude <[email protected]>
---------
Co-authored-by: Claude <[email protected]>
---
.../apache/camel/dsl/jbang/core/commands/Run.java | 33 ++++++----------------
.../jbang/core/commands/version/VersionList.java | 3 +-
.../camel/dsl/jbang/core/common/ExampleHelper.java | 32 +++++++++++++++++++++
.../camel/dsl/jbang/core/common/GistHelper.java | 3 +-
.../camel/dsl/jbang/core/common/GitHubHelper.java | 3 +-
.../camel/dsl/jbang/core/common/QuarkusHelper.java | 5 ++--
6 files changed, 49 insertions(+), 30 deletions(-)
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
index 0068b0c10523..96ccca6b7ede 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
@@ -482,48 +482,31 @@ public class Run extends CamelCommand {
private int runGithubExample(JsonObject entry) throws Exception {
String eName = entry.getString("name");
- String url = ExampleHelper.getGithubUrl(entry);
+ List<String> exampleFiles = ExampleHelper.getFiles(entry);
printer().println("Fetching example from GitHub: " + eName);
if (ExampleHelper.requiresDocker(entry)) {
printer().println("Note: this example requires Docker/Podman");
}
- StringJoiner routes = new StringJoiner(",");
- StringJoiner kamelets = new StringJoiner(",");
- StringJoiner properties = new StringJoiner(",");
+ Path tempDir;
try {
- fetchGithubUrls(url, routes, kamelets, properties);
+ tempDir = ExampleHelper.downloadGithubExample(entry);
} catch (Exception e) {
printer().printErr("Failed to fetch example from GitHub: " +
e.getMessage());
printer().printErr("This example requires an internet
connection.");
return 1;
}
- if (routes.length() == 0 && kamelets.length() == 0 &&
properties.length() == 0) {
- printer().printErr("No files found for example: " + eName);
- return 1;
- }
-
- if (routes.length() > 0) {
- for (String r : routes.toString().split(",")) {
- files.add(r);
- }
- }
- if (kamelets.length() > 0) {
- for (String k : kamelets.toString().split(",")) {
- files.add(k);
- }
- }
- if (properties.length() > 0) {
- for (String p : properties.toString().split(",")) {
- files.add(p);
- }
+ for (String f : exampleFiles) {
+ files.add(tempDir.resolve(f).toString());
}
if ("CamelJBang".equals(name)) {
name = eName;
}
+ exportBaseDir = tempDir;
+
if (!exportRun) {
printConfigurationValues("Running integration with the following
configuration:");
}
@@ -1137,7 +1120,7 @@ public class Run extends CamelCommand {
});
StringBuilder locations = new StringBuilder();
for (String file : names) {
- if (!file.startsWith("file:")) {
+ if (!file.startsWith("file:") && !file.startsWith("github:")
&& !file.startsWith("gist:")) {
if (!file.startsWith("/")) {
file =
Paths.get(FileSystems.getDefault().getPath("").toAbsolutePath().toString(),
file).toString();
}
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 ffe8276d378b..3f0025c298c8 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
@@ -20,6 +20,7 @@ import java.io.IOException;
import java.io.LineNumberReader;
import java.io.StringReader;
import java.io.UncheckedIOException;
+import java.net.ProxySelector;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.http.HttpClient;
@@ -567,7 +568,7 @@ public class VersionList extends CamelCommand {
String gitUrl = String.format(RuntimeType.quarkus == runtime ?
GIT_CAMEL_QUARKUS_URL : GIT_CAMEL_URL, coreVersion);
try {
- HttpClient hc = HttpClient.newHttpClient();
+ HttpClient hc =
HttpClient.newBuilder().proxy(ProxySelector.getDefault()).build();
HttpResponse<String> res = hc.send(HttpRequest.newBuilder(new
URI(gitUrl)).timeout(Duration.ofSeconds(20)).build(),
HttpResponse.BodyHandlers.ofString());
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/ExampleHelper.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/ExampleHelper.java
index 5e934d366d66..5c194c9095a3 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/ExampleHelper.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/ExampleHelper.java
@@ -17,8 +17,14 @@
package org.apache.camel.dsl.jbang.core.common;
import java.io.InputStream;
+import java.net.ProxySelector;
+import java.net.URI;
+import java.net.http.HttpClient;
+import java.net.http.HttpRequest;
+import java.net.http.HttpResponse;
import java.nio.file.Files;
import java.nio.file.Path;
+import java.time.Duration;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@@ -33,6 +39,8 @@ public final class ExampleHelper {
private static final String CATALOG_RESOURCE =
"examples/camel-jbang-example-catalog.json";
private static final String GITHUB_EXAMPLES_URL
= "https://github.com/apache/camel-jbang-examples/tree/main/";
+ private static final String GITHUB_RAW_URL
+ =
"https://raw.githubusercontent.com/apache/camel-jbang-examples/main/%s/%s";
private ExampleHelper() {
}
@@ -171,6 +179,30 @@ public final class ExampleHelper {
return tempDir;
}
+ public static Path downloadGithubExample(JsonObject entry) throws
Exception {
+ String name = entry.getString("name");
+ List<String> fileNames = getFiles(entry);
+ Path tempDir = Files.createTempDirectory("camel-example-");
+
+ HttpClient hc =
HttpClient.newBuilder().proxy(ProxySelector.getDefault()).build();
+ for (String fileName : fileNames) {
+ String rawUrl = String.format(GITHUB_RAW_URL, name, fileName);
+ HttpResponse<String> res = hc.send(
+ HttpRequest.newBuilder(new
URI(rawUrl)).timeout(Duration.ofSeconds(20)).build(),
+ HttpResponse.BodyHandlers.ofString());
+ if (res.statusCode() == 200) {
+ Path targetFile = tempDir.resolve(fileName);
+ Files.createDirectories(targetFile.getParent());
+ Files.writeString(targetFile, res.body());
+ targetFile.toFile().deleteOnExit();
+ targetFile.getParent().toFile().deleteOnExit();
+ }
+ }
+
+ tempDir.toFile().deleteOnExit();
+ return tempDir;
+ }
+
public static String getGithubUrl(JsonObject entry) {
return GITHUB_EXAMPLES_URL + entry.getString("name");
}
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/GistHelper.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/GistHelper.java
index a171e09f24d9..bc89f5639642 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/GistHelper.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/GistHelper.java
@@ -16,6 +16,7 @@
*/
package org.apache.camel.dsl.jbang.core.common;
+import java.net.ProxySelector;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
@@ -83,7 +84,7 @@ public final class GistHelper {
throws Exception {
// use JDK http client to call github api
- HttpClient hc = HttpClient.newHttpClient();
+ HttpClient hc =
HttpClient.newBuilder().proxy(ProxySelector.getDefault()).build();
HttpResponse<String> res = hc.send(HttpRequest.newBuilder(new
URI(url)).timeout(Duration.ofSeconds(20)).build(),
HttpResponse.BodyHandlers.ofString());
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/GitHubHelper.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/GitHubHelper.java
index b6dfa0972cd6..fe1f96ba6757 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/GitHubHelper.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/GitHubHelper.java
@@ -16,6 +16,7 @@
*/
package org.apache.camel.dsl.jbang.core.common;
+import java.net.ProxySelector;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
@@ -104,7 +105,7 @@ public final class GitHubHelper {
throws Exception {
// use JDK http client to call github api
- HttpClient hc = HttpClient.newHttpClient();
+ HttpClient hc =
HttpClient.newBuilder().proxy(ProxySelector.getDefault()).build();
HttpResponse<String> res = hc.send(HttpRequest.newBuilder(new
URI(url)).timeout(Duration.ofSeconds(20)).build(),
HttpResponse.BodyHandlers.ofString());
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/QuarkusHelper.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/QuarkusHelper.java
index 4dca359e1fb2..9e38839d0665 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/QuarkusHelper.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/QuarkusHelper.java
@@ -20,6 +20,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.UncheckedIOException;
import java.math.BigInteger;
+import java.net.ProxySelector;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.http.HttpClient;
@@ -206,10 +207,10 @@ public final class QuarkusHelper {
}
}
- HttpClient hc = HttpClient.newHttpClient();
+ HttpClient hc =
HttpClient.newBuilder().proxy(ProxySelector.getDefault()).build();
HttpResponse<String> res = hc.send(
HttpRequest.newBuilder(uri)
- .timeout(Duration.ofSeconds(2))
+ .timeout(Duration.ofSeconds(20))
.build(),
HttpResponse.BodyHandlers.ofString());