17
17
package org .springframework .boot .build ;
18
18
19
19
import java .io .File ;
20
+ import java .util .HashMap ;
20
21
import java .util .LinkedHashMap ;
21
22
import java .util .List ;
22
23
import java .util .Map ;
23
24
24
25
import com .github .gradle .node .NodeExtension ;
26
+ import com .github .gradle .node .npm .task .NpmInstallTask ;
25
27
import io .spring .gradle .antora .GenerateAntoraYmlPlugin ;
26
28
import io .spring .gradle .antora .GenerateAntoraYmlTask ;
27
29
import org .antora .gradle .AntoraExtension ;
28
30
import org .antora .gradle .AntoraPlugin ;
29
31
import org .antora .gradle .AntoraTask ;
30
32
import org .gradle .api .Project ;
31
- import org .gradle .api .file .RegularFile ;
32
- import org .gradle .api .file .RegularFileProperty ;
33
33
import org .gradle .api .logging .LogLevel ;
34
34
import org .gradle .api .plugins .JavaBasePlugin ;
35
- import org .gradle .api .provider . Provider ;
35
+ import org .gradle .api .tasks . Copy ;
36
36
import org .gradle .api .tasks .TaskContainer ;
37
37
38
38
import org .springframework .boot .build .antora .AntoraAsciidocAttributes ;
39
- import org .springframework .boot .build .antora .Extensions ;
40
39
import org .springframework .boot .build .antora .GenerateAntoraPlaybook ;
41
40
import org .springframework .boot .build .bom .BomExtension ;
42
41
import org .springframework .boot .build .constraints .ExtractVersionConstraints ;
@@ -51,8 +50,6 @@ public class AntoraConventions {
51
50
52
51
private static final String DEPENDENCIES_PATH = ":spring-boot-project:spring-boot-dependencies" ;
53
52
54
- private static final String ANTORA_VERSION = "3.2.0-alpha.4" ;
55
-
56
53
private static final String ANTORA_SOURCE_DIR = "src/docs/antora" ;
57
54
58
55
private static final List <String > NAV_FILES = List .of ("nav.adoc" , "local-nav.adoc" );
@@ -67,18 +64,42 @@ private void apply(Project project, AntoraPlugin antoraPlugin) {
67
64
TaskContainer tasks = project .getTasks ();
68
65
GenerateAntoraPlaybook generateAntoraPlaybookTask = tasks .create ("generateAntoraPlaybook" ,
69
66
GenerateAntoraPlaybook .class );
67
+ configureGenerateAntoraPlaybookTask (project , generateAntoraPlaybookTask );
68
+ Copy copyAntoraPackageJsonTask = tasks .create ("copyAntoraPackageJson" , Copy .class );
69
+ configureCopyAntoraPackageJsonTask (project , copyAntoraPackageJsonTask );
70
+ NpmInstallTask npmInstallTask = tasks .create ("antoraNpmInstall" , NpmInstallTask .class );
71
+ configureNpmInstallTask (project , npmInstallTask , copyAntoraPackageJsonTask );
70
72
tasks .withType (GenerateAntoraYmlTask .class , (generateAntoraYmlTask ) -> configureGenerateAntoraYmlTask (project ,
71
73
generateAntoraYmlTask , dependencyVersionsTask ));
72
74
tasks .withType (AntoraTask .class ,
73
- (antoraTask ) -> configureAntoraTask (project , antoraTask , generateAntoraPlaybookTask ));
74
- project .getExtensions ().configure (AntoraExtension .class , (antoraExtension ) -> {
75
- RegularFileProperty outputFile = generateAntoraPlaybookTask .getOutputFile ();
76
- configureAntoraExtension (project , antoraExtension , outputFile );
77
- });
75
+ (antoraTask ) -> configureAntoraTask (project , antoraTask , npmInstallTask , generateAntoraPlaybookTask ));
76
+ project .getExtensions ()
77
+ .configure (AntoraExtension .class , (antoraExtension ) -> configureAntoraExtension (project , antoraExtension ));
78
78
project .getExtensions ()
79
79
.configure (NodeExtension .class , (nodeExtension ) -> configureNodeExtension (project , nodeExtension ));
80
80
}
81
81
82
+ private void configureGenerateAntoraPlaybookTask (Project project ,
83
+ GenerateAntoraPlaybook generateAntoraPlaybookTask ) {
84
+ File nodeProjectDir = getNodeProjectDir (project .getBuildDir ());
85
+ generateAntoraPlaybookTask .getOutputFile ().set (new File (nodeProjectDir , "antora-playbook.yml" ));
86
+ }
87
+
88
+ private void configureCopyAntoraPackageJsonTask (Project project , Copy copyAntoraPackageJsonTask ) {
89
+ copyAntoraPackageJsonTask
90
+ .from (project .getRootProject ().file ("antora" ), (spec ) -> spec .include ("package.json" , "package-lock.json" ))
91
+ .into (getNodeProjectDir (project .getBuildDir ()));
92
+ }
93
+
94
+ private void configureNpmInstallTask (Project project , NpmInstallTask npmInstallTask , Copy copyAntoraPackageJson ) {
95
+ npmInstallTask .dependsOn (copyAntoraPackageJson );
96
+ Map <String , String > environment = new HashMap <>();
97
+ environment .put ("npm_config_omit" , "optional" );
98
+ environment .put ("npm_config_update_notifier" , "false" );
99
+ npmInstallTask .getEnvironment ().set (environment );
100
+ npmInstallTask .getNpmCommand ().set (List .of ("ci" ));
101
+ }
102
+
82
103
private ExtractVersionConstraints addDependencyVersionsTask (Project project ) {
83
104
return project .getTasks ()
84
105
.create ("dependencyVersions" , ExtractVersionConstraints .class ,
@@ -121,22 +142,19 @@ private Map<String, String> getAsciidocAttributes(Project project,
121
142
return attributes .get ();
122
143
}
123
144
124
- private void configureAntoraTask (Project project , AntoraTask antoraTask ,
145
+ private void configureAntoraTask (Project project , AntoraTask antoraTask , NpmInstallTask npmInstallTask ,
125
146
GenerateAntoraPlaybook generateAntoraPlaybookTask ) {
126
147
antoraTask .setGroup ("Documentation" );
127
- antoraTask .getDependsOn ().add (generateAntoraPlaybookTask );
148
+ antoraTask .dependsOn (npmInstallTask , generateAntoraPlaybookTask );
149
+ antoraTask .setPlaybook ("antora-playbook.yml" );
128
150
project .getPlugins ()
129
151
.withType (JavaBasePlugin .class ,
130
152
(javaBasePlugin ) -> project .getTasks ()
131
153
.getByName (JavaBasePlugin .CHECK_TASK_NAME )
132
154
.dependsOn (antoraTask ));
133
155
}
134
156
135
- private void configureAntoraExtension (Project project , AntoraExtension antoraExtension ,
136
- Provider <RegularFile > playbook ) {
137
- antoraExtension .getVersion ().convention (ANTORA_VERSION );
138
- antoraExtension .getPackages ().convention (Extensions .packages ());
139
- antoraExtension .getPlaybook ().convention (playbook .map (RegularFile ::getAsFile ));
157
+ private void configureAntoraExtension (Project project , AntoraExtension antoraExtension ) {
140
158
if (project .getGradle ().getStartParameter ().getLogLevel () != LogLevel .DEBUG ) {
141
159
antoraExtension .getOptions ().add ("--quiet" );
142
160
}
@@ -149,6 +167,11 @@ private void configureNodeExtension(Project project, NodeExtension nodeExtension
149
167
File buildDir = project .getBuildDir ();
150
168
nodeExtension .getWorkDir ().set (buildDir .toPath ().resolve (".gradle/nodejs" ).toFile ());
151
169
nodeExtension .getNpmWorkDir ().set (buildDir .toPath ().resolve (".gradle/npm" ).toFile ());
170
+ nodeExtension .getNodeProjectDir ().set (getNodeProjectDir (buildDir ));
171
+ }
172
+
173
+ private File getNodeProjectDir (File buildDir ) {
174
+ return buildDir .toPath ().resolve (".gradle/nodeproject" ).toFile ();
152
175
}
153
176
154
177
}
0 commit comments