From adcde4132234742959f6db4c967f49b587c0716e Mon Sep 17 00:00:00 2001 From: Melloware Date: Sat, 5 Oct 2024 10:48:32 -0400 Subject: [PATCH] LTS 3.15 (#783) --- .../lib/PackageManagerInstallFactory.java | 7 +-- .../frontend/lib/VertxFileDownloader.java | 4 +- .../quinoa/deployment/QuinoaProcessor.java | 19 ++------ .../quinoa/deployment/SslUtil.java | 18 +++---- .../deployment/config/DevServerConfig.java | 4 +- .../deployment/config/QuinoaConfig.java | 8 ++-- .../deployment/framework/FrameworkType.java | 17 +------ .../framework/override/NextFramework.java | 2 +- .../packagemanager/PackageManagerInstall.java | 32 ++++--------- .../packagemanager/PackageManagerRunner.java | 47 +++---------------- .../ROOT/pages/includes/attributes.adoc | 2 +- pom.xml | 2 +- .../QuinoaDevWebSocketProxyHandler.java | 4 +- .../io/quarkiverse/quinoa/QuinoaRecorder.java | 7 ++- 14 files changed, 51 insertions(+), 122 deletions(-) diff --git a/deployment/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/PackageManagerInstallFactory.java b/deployment/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/PackageManagerInstallFactory.java index f47d6b8a..84352605 100644 --- a/deployment/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/PackageManagerInstallFactory.java +++ b/deployment/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/PackageManagerInstallFactory.java @@ -7,8 +7,6 @@ public class PackageManagerInstallFactory { private static final Platform defaultPlatform = Platform.guess(); - private static final String DEFAULT_CACHE_PATH = "cache"; - private final Vertx vertx; private final Path uiDir; private final Path installDir; @@ -18,7 +16,6 @@ public class PackageManagerInstallFactory { private final String password; public PackageManagerInstallFactory(Vertx vertx, Path uiDir, Path installDir, String userName, String password) { - this.vertx = vertx; this.uiDir = uiDir; this.installDir = installDir; this.cacheResolver = getDefaultCacheResolver(installDir); @@ -63,8 +60,8 @@ private InstallConfig getInstallConfig() { return new DefaultInstallConfig(installDir.toFile(), uiDir.toFile(), this.cacheResolver, defaultPlatform); } - private static final CacheResolver getDefaultCacheResolver(Path root) { + private static CacheResolver getDefaultCacheResolver(Path root) { return new DirectoryCacheResolver(root.resolve("cache").toFile()); } -} +} \ No newline at end of file diff --git a/deployment/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/VertxFileDownloader.java b/deployment/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/VertxFileDownloader.java index 4d80bf1f..b801e9e7 100644 --- a/deployment/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/VertxFileDownloader.java +++ b/deployment/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/VertxFileDownloader.java @@ -55,6 +55,7 @@ public VertxFileDownloader(Vertx vertx) { if (proxyUser != null && proxyPassword != null) { options.getProxyOptions().setUsername(proxyUser).setPassword(proxyPassword); } + LOG.tracef("Using Proxy %", options.getProxyOptions().toString()); } this.webClient = WebClient.create(vertx, options); @@ -90,7 +91,8 @@ public void download(String downloadUrl, String destination, String userName, St .as(BodyCodec.pipe(destinationFile)) .send(); future.onComplete((r) -> latch.countDown()); - latch.await(5, TimeUnit.MINUTES); + boolean result = latch.await(5, TimeUnit.MINUTES); + LOG.tracef("Latch Result %", result); if (!future.succeeded()) { throw new DownloadException("Could not download " + downloadUrl, future.cause()); } diff --git a/deployment/src/main/java/io/quarkiverse/quinoa/deployment/QuinoaProcessor.java b/deployment/src/main/java/io/quarkiverse/quinoa/deployment/QuinoaProcessor.java index 2e4bbb86..bdb6ab2c 100644 --- a/deployment/src/main/java/io/quarkiverse/quinoa/deployment/QuinoaProcessor.java +++ b/deployment/src/main/java/io/quarkiverse/quinoa/deployment/QuinoaProcessor.java @@ -129,8 +129,8 @@ public InstalledPackageManagerBuildItem install( configuredQuinoa.uiDir(), consoleInstalledBuildItem, loggingSetupBuildItem); - packageManagerBinary = Optional.of(result.getPackageManagerBinary()); - paths.add(result.getNodeDirPath()); + packageManagerBinary = Optional.of(result.packageManagerBinary()); + paths.add(result.nodeDirPath()); } final PackageManagerRunner packageManagerRunner = autoDetectPackageManager(packageManagerBinary, @@ -175,7 +175,7 @@ && isDevServerMode(configuredQuinoa.resolvedConfig())) { && liveReload.getChangedResources().stream() .noneMatch(r -> r.startsWith(packageManagerRunner.getDirectory().toString())) && contextObject != null) { - return new TargetDirBuildItem(contextObject.getLocation()); + return new TargetDirBuildItem(contextObject.location()); } if (configuredQuinoa.resolvedConfig().runTests()) { packageManagerRunner.test(); @@ -452,16 +452,7 @@ public static Path initializeTargetDirectory(OutputTargetBuildItem outputTarget) return targetBuildDir; } - private static class QuinoaLiveContext { - private final Path location; - - private QuinoaLiveContext(Path location) { - this.location = location; - } - - public Path getLocation() { - return location; - } + private record QuinoaLiveContext(Path location) { } public static class ProjectDirs { @@ -482,4 +473,4 @@ public Path getUIDir() { } } -} +} \ No newline at end of file diff --git a/deployment/src/main/java/io/quarkiverse/quinoa/deployment/SslUtil.java b/deployment/src/main/java/io/quarkiverse/quinoa/deployment/SslUtil.java index 8b555bb1..8613c8dc 100644 --- a/deployment/src/main/java/io/quarkiverse/quinoa/deployment/SslUtil.java +++ b/deployment/src/main/java/io/quarkiverse/quinoa/deployment/SslUtil.java @@ -4,35 +4,37 @@ import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; -import java.security.cert.CertificateException; import java.security.cert.X509Certificate; -import javax.net.ssl.*; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLEngine; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509ExtendedTrustManager; public class SslUtil { private final static X509ExtendedTrustManager NON_VALIDATING_TRUST_MANAGER = new X509ExtendedTrustManager() { @Override - public void checkClientTrusted(X509Certificate[] chain, String authType, Socket socket) throws CertificateException { + public void checkClientTrusted(X509Certificate[] chain, String authType, Socket socket) { } @Override - public void checkServerTrusted(X509Certificate[] chain, String authType, Socket socket) throws CertificateException { + public void checkServerTrusted(X509Certificate[] chain, String authType, Socket socket) { } @Override - public void checkClientTrusted(X509Certificate[] chain, String authType, SSLEngine engine) throws CertificateException { + public void checkClientTrusted(X509Certificate[] chain, String authType, SSLEngine engine) { } @Override - public void checkServerTrusted(X509Certificate[] chain, String authType, SSLEngine engine) throws CertificateException { + public void checkServerTrusted(X509Certificate[] chain, String authType, SSLEngine engine) { } @Override - public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { + public void checkClientTrusted(X509Certificate[] chain, String authType) { } @Override - public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { + public void checkServerTrusted(X509Certificate[] chain, String authType) { } @Override diff --git a/deployment/src/main/java/io/quarkiverse/quinoa/deployment/config/DevServerConfig.java b/deployment/src/main/java/io/quarkiverse/quinoa/deployment/config/DevServerConfig.java index a7a961c6..c0bf275c 100644 --- a/deployment/src/main/java/io/quarkiverse/quinoa/deployment/config/DevServerConfig.java +++ b/deployment/src/main/java/io/quarkiverse/quinoa/deployment/config/DevServerConfig.java @@ -28,7 +28,7 @@ public interface DevServerConfig { /** * Port of the server to forward requests to. - * The dev server process (i.e npm start) is managed like a dev service by Quarkus. + * The dev server process (i.e. npm start) is managed like a dev service by Quarkus. * If the external server responds with a 404, it is ignored by Quinoa and processed like any other backend request. */ @ConfigDocDefault("framework detection or fallback to empty") @@ -138,4 +138,4 @@ static boolean isEqual(DevServerConfig d1, DevServerConfig d2) { } return true; } -} +} \ No newline at end of file diff --git a/deployment/src/main/java/io/quarkiverse/quinoa/deployment/config/QuinoaConfig.java b/deployment/src/main/java/io/quarkiverse/quinoa/deployment/config/QuinoaConfig.java index 689de4a2..c8b448c5 100644 --- a/deployment/src/main/java/io/quarkiverse/quinoa/deployment/config/QuinoaConfig.java +++ b/deployment/src/main/java/io/quarkiverse/quinoa/deployment/config/QuinoaConfig.java @@ -36,14 +36,14 @@ public interface QuinoaConfig { */ @WithParentName @ConfigDocDefault("enabled (disabled in test mode)") - public Optional enabled(); + Optional enabled(); /** * Indicate if Quinoa should just do the build part. * If true, Quinoa will NOT serve the Web UI built resources. * This is handy when the output of the build is used * to be served via something else (nginx, cdn, ...) - * Quinoa put the built files in 'target/quinoa/build' (or 'build/quinoa/build with Gradle). + * Quinoa put the built files in 'target/quinoa/build' (or 'build/quinoa/build' with Gradle). */ @WithDefault("false") boolean justBuild(); @@ -56,7 +56,7 @@ public interface QuinoaConfig { String uiRootPath(); /** - * Path to the Web UI (NodeJS) root directory (relative to the project root). + * Path to the Web UI (Node.js) root directory (relative to the project root). */ @WithDefault(DEFAULT_WEB_UI_DIR) String uiDir(); @@ -284,4 +284,4 @@ static boolean isEqual(QuinoaConfig q1, QuinoaConfig q2) { return true; } -} +} \ No newline at end of file diff --git a/deployment/src/main/java/io/quarkiverse/quinoa/deployment/framework/FrameworkType.java b/deployment/src/main/java/io/quarkiverse/quinoa/deployment/framework/FrameworkType.java index 44618579..4b8d0ae7 100644 --- a/deployment/src/main/java/io/quarkiverse/quinoa/deployment/framework/FrameworkType.java +++ b/deployment/src/main/java/io/quarkiverse/quinoa/deployment/framework/FrameworkType.java @@ -175,17 +175,7 @@ private static FrameworkType resolveFramework(String script) { return null; } - static class DetectedFramework { - public final FrameworkType type; - - public final String devScript; - public final boolean isCustomized; - - public DetectedFramework(FrameworkType type, String devScript, boolean isCustomized) { - this.type = type; - this.devScript = devScript; - this.isCustomized = isCustomized; - } + record DetectedFramework(FrameworkType type, String devScript, boolean isCustomized) { @Override public boolean equals(Object o) { @@ -197,11 +187,6 @@ public boolean equals(Object o) { return isCustomized == that.isCustomized && type == that.type && Objects.equals(devScript, that.devScript); } - @Override - public int hashCode() { - return Objects.hash(type, devScript, isCustomized); - } - @Override public String toString() { return new StringJoiner(", ", DetectedFramework.class.getSimpleName() + "[", "]") diff --git a/deployment/src/main/java/io/quarkiverse/quinoa/deployment/framework/override/NextFramework.java b/deployment/src/main/java/io/quarkiverse/quinoa/deployment/framework/override/NextFramework.java index c2da3a59..1b466f8d 100644 --- a/deployment/src/main/java/io/quarkiverse/quinoa/deployment/framework/override/NextFramework.java +++ b/deployment/src/main/java/io/quarkiverse/quinoa/deployment/framework/override/NextFramework.java @@ -23,7 +23,7 @@ public NextFramework() { public QuinoaConfig override(QuinoaConfig delegate, Optional packageJson, Optional detectedDevScript, boolean isCustomized) { - if (delegate.packageManagerCommand().build().equals("run build") && packageJson.isPresent()) { + if (delegate.packageManagerCommand().build().orElse("???").equals("run build") && packageJson.isPresent()) { JsonObject scripts = packageJson.get().getJsonObject("scripts"); if (scripts != null) { String buildScript = scripts.getString("build"); diff --git a/deployment/src/main/java/io/quarkiverse/quinoa/deployment/packagemanager/PackageManagerInstall.java b/deployment/src/main/java/io/quarkiverse/quinoa/deployment/packagemanager/PackageManagerInstall.java index 70b42fe1..70a84f03 100644 --- a/deployment/src/main/java/io/quarkiverse/quinoa/deployment/packagemanager/PackageManagerInstall.java +++ b/deployment/src/main/java/io/quarkiverse/quinoa/deployment/packagemanager/PackageManagerInstall.java @@ -7,6 +7,7 @@ import java.io.UncheckedIOException; import java.nio.file.DirectoryNotEmptyException; import java.nio.file.Path; +import java.util.Objects; import java.util.Optional; import java.util.Set; @@ -74,7 +75,7 @@ public static Installation install(PackageManagerInstallConfig config, } } } finally { - vertx.close(); + Objects.requireNonNull(vertx).close(); } throw new RuntimeException("Error while installing NodeJS", thrown); @@ -107,7 +108,7 @@ private static Installation attemptInstall(PackageManagerInstallConfig config, P nodeInstallerLogCompressor = new StartupLogCompressor("node installer", consoleInstalledBuildItem, loggingSetupBuildItem); factory.getNodeInstaller() - .setNodeVersion("v" + config.nodeVersion().get()) + .setNodeVersion("v" + config.nodeVersion().orElse("???")) .setNodeDownloadRoot(config.nodeDownloadRoot()) .setNpmVersion(config.npmVersion()) .install(); @@ -122,7 +123,7 @@ private static Installation attemptInstall(PackageManagerInstallConfig config, P } } - // Use npm if npmVersion is different from provided or if no other version is set (then it will use the version provided by nodejs) + // Use npm if npmVersion is different from provided or if no other version is set (then it will use the version provided by Node.js) String executionPath = NPM_PATH; final String npmVersion = config.npmVersion(); boolean isNpmProvided = PackageManagerInstallConfig.NPM_PROVIDED.equalsIgnoreCase(npmVersion); @@ -132,7 +133,7 @@ private static Installation attemptInstall(PackageManagerInstallConfig config, P npmInstallerLogCompressor = new StartupLogCompressor("npm installer", consoleInstalledBuildItem, loggingSetupBuildItem); factory.getNPMInstaller() - .setNodeVersion("v" + config.nodeVersion().get()) + .setNodeVersion("v" + config.nodeVersion().orElse("???")) .setNpmVersion(npmVersion) .setNpmDownloadRoot(config.npmDownloadRoot()) .install(); @@ -149,7 +150,7 @@ private static Installation attemptInstall(PackageManagerInstallConfig config, P executionPath = YARN_PATH; factory.getYarnInstaller() .setIsYarnBerry(isYarnBerry(uiDir)) - .setYarnVersion("v" + config.yarnVersion().get()) + .setYarnVersion("v" + config.yarnVersion().orElse("???")) .setYarnDownloadRoot(config.yarnDownloadRoot()) .setIsYarnBerry(true) .install(); @@ -160,7 +161,7 @@ private static Installation attemptInstall(PackageManagerInstallConfig config, P if (pnpmVersion.isPresent() && isNpmProvided && yarnVersion.isEmpty()) { executionPath = PNPM_PATH; factory.getPnpmInstaller() - .setNodeVersion("v" + config.nodeVersion().get()) + .setNodeVersion("v" + config.nodeVersion().orElse("???")) .setPnpmVersion(pnpmVersion.get()) .setPnpmDownloadRoot(config.pnpmDownloadRoot()) .install(); @@ -201,22 +202,7 @@ public static String quotePathWithSpaces(String path) { return path.contains(" ") ? "\"".concat(path).concat("\"") : path; } - public static class Installation { - private final String nodeDirPath; - private final String packageManagerBinary; - - public Installation(String nodeDirPath, String packageManagerBinary) { - this.nodeDirPath = nodeDirPath; - this.packageManagerBinary = packageManagerBinary; - } - - public String getNodeDirPath() { - return nodeDirPath; - } - - public String getPackageManagerBinary() { - return packageManagerBinary; - } + public record Installation(String nodeDirPath, String packageManagerBinary) { } -} +} \ No newline at end of file diff --git a/deployment/src/main/java/io/quarkiverse/quinoa/deployment/packagemanager/PackageManagerRunner.java b/deployment/src/main/java/io/quarkiverse/quinoa/deployment/packagemanager/PackageManagerRunner.java index 270e332f..9dccc16c 100644 --- a/deployment/src/main/java/io/quarkiverse/quinoa/deployment/packagemanager/PackageManagerRunner.java +++ b/deployment/src/main/java/io/quarkiverse/quinoa/deployment/packagemanager/PackageManagerRunner.java @@ -23,9 +23,7 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Predicate; -import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HttpsURLConnection; -import javax.net.ssl.SSLSession; import org.jboss.logging.Logger; @@ -167,16 +165,12 @@ public DevServer dev(Optional consoleInstalled, Loggi loggingSetup, DEV_PROCESS_THREAD_PREDICATE); Process p = process(dev); - Runtime.getRuntime().addShutdownHook(new Thread() { - public void run() { - stopDev(p); - } - }); + Runtime.getRuntime().addShutdownHook(new Thread(() -> stopDev(p))); if (checkPath == null) { LOG.infof("Quinoa is configured to continue without check if the live coding server is up"); return new DevServer(p, network.getHost(), logCompressor); } - String ipAddress = null; + String ipAddress; try { int i = 0; while ((ipAddress = isDevServerUp(network, checkPath)) == null) { @@ -219,7 +213,7 @@ public static boolean isWindows() { } private Process process(PackageManager.Command command) { - Process process = null; + Process process; final ProcessBuilder builder = new ProcessBuilder() .directory(directory.toFile()) .command(runner(command)); @@ -235,7 +229,7 @@ private Process process(PackageManager.Command command) { } private boolean exec(PackageManager.Command command) { - Process process = null; + Process process; HandleOutput handleOutput = null; try { final ProcessBuilder processBuilder = new ProcessBuilder(); @@ -259,7 +253,7 @@ private boolean exec(PackageManager.Command command) { handleOutput.close(); } } - return process != null && process.exitValue() == 0; + return process.exitValue() == 0; } private String[] runner(PackageManager.Command command) { @@ -336,12 +330,7 @@ public static String isDevServerUp(QuinoaNetworkConfiguration network, String pa HttpsURLConnection httpsConnection = (HttpsURLConnection) url.openConnection(); if (network.isTlsAllowInsecure()) { httpsConnection.setSSLSocketFactory(SslUtil.createNonValidatingSslContext().getSocketFactory()); - httpsConnection.setHostnameVerifier(new HostnameVerifier() { - @Override - public boolean verify(String hostname, SSLSession session) { - return true; - } - }); + httpsConnection.setHostnameVerifier((hostname, session) -> true); } connection = httpsConnection; } else { @@ -367,28 +356,6 @@ public boolean verify(String hostname, SSLSession session) { return null; } - public static class DevServer { - private final Process process; - private final String hostIPAddress; - - private final StartupLogCompressor logCompressor; - - public DevServer(Process process, String hostIPAddress, StartupLogCompressor logCompressor) { - this.process = process; - this.hostIPAddress = hostIPAddress; - this.logCompressor = logCompressor; - } - - public Process process() { - return process; - } - - public String hostIPAddress() { - return hostIPAddress; - } - - public StartupLogCompressor logCompressor() { - return logCompressor; - } + public record DevServer(Process process, String hostIPAddress, StartupLogCompressor logCompressor) { } } diff --git a/docs/modules/ROOT/pages/includes/attributes.adoc b/docs/modules/ROOT/pages/includes/attributes.adoc index 5fe54c6b..a15cabc6 100644 --- a/docs/modules/ROOT/pages/includes/attributes.adoc +++ b/docs/modules/ROOT/pages/includes/attributes.adoc @@ -1,4 +1,4 @@ -:quarkus-version: 3.12.0 +:quarkus-version: 3.15.1 :quarkus-quinoa-version: 2.4.9 :maven-version: 3.8.1+ :extension-status: stable diff --git a/pom.xml b/pom.xml index 520e9208..4487cf55 100644 --- a/pom.xml +++ b/pom.xml @@ -36,7 +36,7 @@ 17 UTF-8 UTF-8 - 3.12.0 + 3.15.1 1.0.0 3.26.3 1.15.1 diff --git a/runtime/src/main/java/io/quarkiverse/quinoa/QuinoaDevWebSocketProxyHandler.java b/runtime/src/main/java/io/quarkiverse/quinoa/QuinoaDevWebSocketProxyHandler.java index 054970ed..f3768829 100644 --- a/runtime/src/main/java/io/quarkiverse/quinoa/QuinoaDevWebSocketProxyHandler.java +++ b/runtime/src/main/java/io/quarkiverse/quinoa/QuinoaDevWebSocketProxyHandler.java @@ -70,7 +70,7 @@ public void handle(final RoutingContext ctx) { LOG.infof("Quinoa Dev WebSocket Client Connected: %s:%s%s", networkConfiguration.getHost(), networkConfiguration.getPort(), forwardUri); clientWs.set(clientContext.result()); - // messages from NodeJS forwarded back to browser + // messages from Node.js forwarded back to browser clientWs.get().exceptionHandler( (e) -> LOG.errorf(e, "Quinoa Dev WebSocket Client closed with error: %s", e.getMessage())) .closeHandler((__) -> { @@ -81,7 +81,7 @@ public void handle(final RoutingContext ctx) { serverWs.writeTextMessage(msg); }); - // messages from browser forwarded to NodeJS + // messages from browser forwarded to Node.js serverWs.textMessageHandler((msg) -> { LOG.debugf("Quinoa Dev WebSocket Server message: %s", msg); final WebSocket w = clientWs.get(); diff --git a/runtime/src/main/java/io/quarkiverse/quinoa/QuinoaRecorder.java b/runtime/src/main/java/io/quarkiverse/quinoa/QuinoaRecorder.java index 3027053b..791a3756 100644 --- a/runtime/src/main/java/io/quarkiverse/quinoa/QuinoaRecorder.java +++ b/runtime/src/main/java/io/quarkiverse/quinoa/QuinoaRecorder.java @@ -2,7 +2,6 @@ import static io.quarkus.vertx.http.runtime.RouteConstants.ROUTE_ORDER_DEFAULT; -import java.io.IOException; import java.util.List; import java.util.Objects; import java.util.Set; @@ -35,7 +34,7 @@ public Handler quinoaProxyDevHandler(final QuinoaDevProxyHandler return new QuinoaDevProxyHandler(handlerConfig, vertx.get(), network); } - public Handler quinoaSPARoutingHandler(List ignoredPathPrefixes) throws IOException { + public Handler quinoaSPARoutingHandler(List ignoredPathPrefixes) { if (LOG.isDebugEnabled()) { LOG.debug("Quinoa SPA routing handler is ignoring paths starting with: " + String.join(", ", ignoredPathPrefixes)); } @@ -105,9 +104,9 @@ static boolean shouldHandleMethod(RoutingContext ctx) { } static void next(ClassLoader cl, RoutingContext ctx) { - // make sure we don't lose the correct TCCL to Vert.x... + // make sure we don't lose the correct thread context to Vert.x... Thread.currentThread().setContextClassLoader(cl); ctx.next(); } -} \ No newline at end of file +}