From 70a4bc80239c1c0a2eac72bde78818a86dac53b2 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 28 Mar 2024 22:00:48 -0700 Subject: [PATCH] Refine antora npx command Build the nox args directly to ensure the correct `--package` is used. See gh-40132 --- buildSrc/.idea/workspace.xml | 73 +++++++++++++++++++ .../boot/build/AntoraConventions.java | 42 +++++++---- 2 files changed, 102 insertions(+), 13 deletions(-) create mode 100644 buildSrc/.idea/workspace.xml diff --git a/buildSrc/.idea/workspace.xml b/buildSrc/.idea/workspace.xml new file mode 100644 index 0000000000..a5f4260636 --- /dev/null +++ b/buildSrc/.idea/workspace.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/buildSrc/src/main/java/org/springframework/boot/build/AntoraConventions.java b/buildSrc/src/main/java/org/springframework/boot/build/AntoraConventions.java index e082cdc8ed..1cba46bdb9 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/AntoraConventions.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/AntoraConventions.java @@ -19,6 +19,8 @@ package org.springframework.boot.build; import java.io.File; import java.io.IOException; import java.io.UncheckedIOException; +import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; @@ -29,9 +31,9 @@ import com.github.gradle.node.NodeExtension; import com.github.gradle.node.npm.task.NpmInstallTask; import io.spring.gradle.antora.GenerateAntoraYmlPlugin; import io.spring.gradle.antora.GenerateAntoraYmlTask; -import org.antora.gradle.AntoraExtension; import org.antora.gradle.AntoraPlugin; import org.antora.gradle.AntoraTask; +import org.gradle.StartParameter; import org.gradle.api.Project; import org.gradle.api.logging.LogLevel; import org.gradle.api.plugins.JavaBasePlugin; @@ -77,8 +79,6 @@ public class AntoraConventions { generateAntoraYmlTask, dependencyVersionsTask)); tasks.withType(AntoraTask.class, (antoraTask) -> configureAntoraTask(project, antoraTask, npmInstallTask, generateAntoraPlaybookTask)); - project.getExtensions() - .configure(AntoraExtension.class, (antoraExtension) -> configureAntoraExtension(project, antoraExtension)); project.getExtensions() .configure(NodeExtension.class, (nodeExtension) -> configureNodeExtension(project, nodeExtension)); } @@ -101,7 +101,7 @@ public class AntoraConventions { environment.put("npm_config_omit", "optional"); environment.put("npm_config_update_notifier", "false"); npmInstallTask.getEnvironment().set(environment); - npmInstallTask.getNpmCommand().set(List.of("ci")); + npmInstallTask.getNpmCommand().set(List.of("ci", "--quiet")); } private ExtractVersionConstraints addDependencyVersionsTask(Project project) { @@ -152,6 +152,7 @@ public class AntoraConventions { antoraTask.dependsOn(npmInstallTask, generateAntoraPlaybookTask); antoraTask.setPlaybook("antora-playbook.yml"); antoraTask.setUiBundleUrl(getUiBundleUrl(project)); + antoraTask.getArgs().set(project.provider(() -> getAntoraNpxArs(project, antoraTask))); project.getPlugins() .withType(JavaBasePlugin.class, (javaBasePlugin) -> project.getTasks() @@ -159,6 +160,30 @@ public class AntoraConventions { .dependsOn(antoraTask)); } + private List getAntoraNpxArs(Project project, AntoraTask antoraTask) { + logWarningIfNodeModulesInUserHome(project); + StartParameter startParameter = project.getGradle().getStartParameter(); + boolean showStacktrace = startParameter.getShowStacktrace().name().startsWith("ALWAYS"); + boolean debugLogging = project.getGradle().getStartParameter().getLogLevel() == LogLevel.DEBUG; + String playbookPath = antoraTask.getPlaybook(); + List arguments = new ArrayList<>(); + arguments.addAll(List.of("--package", "@antora/cli")); + arguments.add("antora"); + arguments.addAll((!showStacktrace) ? Collections.emptyList() : List.of("--stacktrace")); + arguments.addAll((!debugLogging) ? List.of("--quiet") : List.of("--log-level", "all")); + arguments.addAll(List.of("--ui-bundle-url", antoraTask.getUiBundleUrl())); + arguments.add(playbookPath); + return arguments; + } + + private void logWarningIfNodeModulesInUserHome(Project project) { + if (new File(System.getProperty("user.home"), "node_modules").exists()) { + project.getLogger() + .warn("Detected the existence of $HOME/node_modules. This directory is " + + "not compatible with this plugin. Please remove it."); + } + } + private String getUiBundleUrl(Project project) { try { File packageJson = project.getRootProject().file("antora/package.json"); @@ -174,15 +199,6 @@ public class AntoraConventions { } } - private void configureAntoraExtension(Project project, AntoraExtension antoraExtension) { - if (project.getGradle().getStartParameter().getLogLevel() != LogLevel.DEBUG) { - antoraExtension.getOptions().add("--quiet"); - } - else { - antoraExtension.getOptions().addAll("--log-level", "all"); - } - } - private void configureNodeExtension(Project project, NodeExtension nodeExtension) { File buildDir = project.getBuildDir(); nodeExtension.getWorkDir().set(buildDir.toPath().resolve(".gradle/nodejs").toFile());