Skip to content

Commit 6983ef5

Browse files
committed
Bundle Javadoc with Antora
- Remove javadoc related tasks from root project - Add aggregated javadoc task to spring-shell-docs - Various antora version updates - Bundle javadoc via collector into antora build - Remove refs to distZip in workflows - Relates #1132
1 parent 208e41b commit 6983ef5

File tree

11 files changed

+66
-258
lines changed

11 files changed

+66
-258
lines changed

.github/workflows/ci.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -68,5 +68,5 @@ jobs:
6868
GRADLE_ENTERPRISE_CACHE_PASSWORD: ${{ secrets.GRADLE_ENTERPRISE_CACHE_PASSWORD }}
6969
GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_SECRET_ACCESS_KEY }}
7070
run: |
71-
jf rt gradle build distZip artifactoryPublish
71+
jf rt gradle build artifactoryPublish
7272
jf rt build-publish

.github/workflows/release-ga.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ jobs:
5959
GRADLE_ENTERPRISE_CACHE_PASSWORD: ${{ secrets.GRADLE_ENTERPRISE_CACHE_PASSWORD }}
6060
GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_SECRET_ACCESS_KEY }}
6161
run: |
62-
jf rt gradle build distZip artifactoryPublish
62+
jf rt gradle build artifactoryPublish
6363
jf rt build-publish
6464
- name: Push Release
6565
env:

.github/workflows/release-milestone.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ jobs:
6363
GRADLE_ENTERPRISE_CACHE_PASSWORD: ${{ secrets.GRADLE_ENTERPRISE_CACHE_PASSWORD }}
6464
GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_SECRET_ACCESS_KEY }}
6565
run: |
66-
jf rt gradle build distZip artifactoryPublish
66+
jf rt gradle build artifactoryPublish
6767
jf rt build-publish
6868
- name: Push Release
6969
env:

build.gradle

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
plugins {
22
id "base"
3-
id 'org.springframework.shell.root'
43
}
54

65
description = 'Spring Shell'

buildSrc/build.gradle

-5
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ dependencies {
2626
implementation(platform("org.springframework.boot:spring-boot-dependencies:${springBootVersion}"))
2727
implementation "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}"
2828
implementation("org.springframework:spring-core")
29-
implementation 'org.asciidoctor:asciidoctor-gradle-jvm:3.3.2'
3029
implementation 'org.jfrog.buildinfo:build-info-extractor-gradle:4.29.0'
3130
implementation "org.graalvm.buildtools:native-gradle-plugin:${nativeBuildToolsVersion}"
3231
}
@@ -49,10 +48,6 @@ gradlePlugin {
4948
id = "org.springframework.shell.docs"
5049
implementationClass = "org.springframework.shell.gradle.DocsPlugin"
5150
}
52-
distPlugin {
53-
id = "org.springframework.shell.root"
54-
implementationClass = "org.springframework.shell.gradle.RootPlugin"
55-
}
5651
samplePlugin {
5752
id = "org.springframework.shell.sample"
5853
implementationClass = "org.springframework.shell.gradle.SamplePlugin"
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2022-2023 the original author or authors.
2+
* Copyright 2022-2024 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -16,166 +16,67 @@
1616
package org.springframework.shell.gradle;
1717

1818
import java.io.File;
19-
import java.time.LocalDate;
20-
import java.util.Collections;
21-
import java.util.HashMap;
22-
import java.util.Map;
2319

24-
import org.asciidoctor.gradle.base.AsciidoctorAttributeProvider;
25-
import org.asciidoctor.gradle.jvm.AbstractAsciidoctorTask;
26-
import org.asciidoctor.gradle.jvm.AsciidoctorJExtension;
27-
import org.asciidoctor.gradle.jvm.AsciidoctorJPlugin;
28-
import org.asciidoctor.gradle.jvm.AsciidoctorTask;
29-
import org.gradle.api.Action;
3020
import org.gradle.api.Plugin;
3121
import org.gradle.api.Project;
32-
import org.gradle.api.Task;
3322
import org.gradle.api.plugins.JavaLibraryPlugin;
3423
import org.gradle.api.plugins.JavaPlugin;
24+
import org.gradle.api.plugins.JavaPluginConvention;
3525
import org.gradle.api.plugins.PluginManager;
3626
import org.gradle.api.publish.tasks.GenerateModuleMetadata;
37-
import org.gradle.api.tasks.PathSensitivity;
38-
import org.gradle.api.tasks.Sync;
39-
import org.springframework.util.StringUtils;
27+
import org.gradle.api.tasks.SourceSet;
28+
import org.gradle.api.tasks.javadoc.Javadoc;
29+
import org.gradle.external.javadoc.CoreJavadocOptions;
30+
import org.gradle.external.javadoc.JavadocMemberLevel;
31+
import org.gradle.external.javadoc.JavadocOutputLevel;
4032

4133
/**
4234
* @author Janne Valkealahti
4335
*/
4436
class DocsPlugin implements Plugin<Project> {
4537

46-
private static final String ASCIIDOCTORJ_VERSION = "2.4.3";
47-
private static final String EXTENSIONS_CONFIGURATION_NAME = "asciidoctorExtensions";
48-
4938
@Override
5039
public void apply(Project project) {
5140
PluginManager pluginManager = project.getPluginManager();
5241
pluginManager.apply(JavaPlugin.class);
5342
pluginManager.apply(JavaLibraryPlugin.class);
5443
pluginManager.apply(ManagementConfigurationPlugin.class);
5544
pluginManager.apply(SpringMavenPlugin.class);
56-
pluginManager.apply(AsciidoctorJPlugin.class);
5745

58-
ExtractVersionConstraints dependencyVersions = project.getTasks().create("dependencyVersions",
59-
ExtractVersionConstraints.class, task -> {
60-
task.enforcedPlatform(":spring-shell-management");
61-
});
46+
createApiTask(project);
6247

63-
project.getPlugins().withType(AsciidoctorJPlugin.class, (asciidoctorPlugin) -> {
64-
// makeAllWarningsFatal(project);
65-
upgradeAsciidoctorJVersion(project);
66-
createAsciidoctorExtensionsConfiguration(project);
67-
project.getTasks()
68-
.withType(AbstractAsciidoctorTask.class,
69-
(asciidoctorTask) -> configureAsciidoctorTask(project, asciidoctorTask, dependencyVersions));
70-
});
7148
project.getTasks().withType(GenerateModuleMetadata.class, metadata -> {
7249
metadata.setEnabled(false);
7350
});
7451
}
7552

76-
private void upgradeAsciidoctorJVersion(Project project) {
77-
project.getExtensions().getByType(AsciidoctorJExtension.class).setVersion(ASCIIDOCTORJ_VERSION);
78-
}
79-
80-
private void createAsciidoctorExtensionsConfiguration(Project project) {
81-
project.getConfigurations().create(EXTENSIONS_CONFIGURATION_NAME, (configuration) -> {
82-
configuration.getDependencies()
83-
.add(project.getDependencies()
84-
.create("io.spring.asciidoctor.backends:spring-asciidoctor-backends:0.0.5"));
53+
private Javadoc createApiTask(Project project) {
54+
Javadoc api = project.getTasks().create("aggregatedJavadoc", Javadoc.class, a -> {
55+
a.setGroup("Documentation");
56+
a.setDescription("Generates aggregated Javadoc API documentation.");
57+
a.setDestinationDir(new File(project.getBuildDir(), "generated-antora-javadocs/modules/ROOT/assets/attachments/api/java"));
58+
a.setTitle(String.format("Spring Shell %s API", project.getVersion()));
59+
CoreJavadocOptions options = (CoreJavadocOptions) a.getOptions();
60+
options.windowTitle(String.format("Spring Shell %s API", project.getVersion()));
61+
options.setMemberLevel(JavadocMemberLevel.PROTECTED);
62+
options.setOutputLevel(JavadocOutputLevel.QUIET);
63+
options.addStringOption("Xdoclint:none", "-quiet");
8564
});
86-
}
8765

88-
private void configureAsciidoctorTask(Project project, AbstractAsciidoctorTask asciidoctorTask, ExtractVersionConstraints dependencyVersions) {
89-
asciidoctorTask.configurations(EXTENSIONS_CONFIGURATION_NAME);
90-
configureCommonAttributes(project, asciidoctorTask, dependencyVersions);
91-
configureOptions(asciidoctorTask);
92-
asciidoctorTask.baseDirFollowsSourceDir();
93-
createSyncDocumentationSourceTask(project, asciidoctorTask, dependencyVersions);
94-
if (asciidoctorTask instanceof AsciidoctorTask task) {
95-
task.outputOptions((outputOptions) -> outputOptions.backends("spring-html"));
96-
}
97-
}
98-
99-
private void configureOptions(AbstractAsciidoctorTask asciidoctorTask) {
100-
asciidoctorTask.options(Collections.singletonMap("doctype", "book"));
101-
}
66+
project.getRootProject().getSubprojects().forEach(p -> {
67+
p.getPlugins().withType(ModulePlugin.class, m -> {
68+
JavaPluginConvention java = p.getConvention().getPlugin(JavaPluginConvention.class);
69+
SourceSet mainSourceSet = java.getSourceSets().getByName("main");
10270

103-
private Sync createSyncDocumentationSourceTask(Project project, AbstractAsciidoctorTask asciidoctorTask, ExtractVersionConstraints dependencyVersions) {
104-
Sync syncDocumentationSource = project.getTasks()
105-
.create("syncDocumentationSourceFor" + StringUtils.capitalize(asciidoctorTask.getName()), Sync.class);
106-
syncDocumentationSource.preserve(filter -> {
107-
filter.include("**/*");
108-
});
109-
File syncedSource = new File(project.getBuildDir(), "docs/src/" + asciidoctorTask.getName());
110-
syncDocumentationSource.setDestinationDir(syncedSource);
111-
syncDocumentationSource.from("src/main/");
112-
asciidoctorTask.dependsOn(syncDocumentationSource);
113-
asciidoctorTask.dependsOn(dependencyVersions);
114-
Sync snippetsResources = createSnippetsResourcesTask(project);
115-
asciidoctorTask.dependsOn(snippetsResources);
116-
asciidoctorTask.getInputs()
117-
.dir(syncedSource)
118-
.withPathSensitivity(PathSensitivity.RELATIVE)
119-
.withPropertyName("synced source");
120-
asciidoctorTask.setSourceDir(project.relativePath(new File(syncedSource, "asciidoc/")));
121-
return syncDocumentationSource;
122-
}
71+
api.setSource(api.getSource().plus(mainSourceSet.getAllJava()));
12372

124-
private Sync createSnippetsResourcesTask(Project project) {
125-
Sync sync = project.getTasks().create("snippetResources", Sync.class, s -> {
126-
s.from(new File(project.getRootProject().getRootDir(), "spring-shell-docs/src/test/java/org/springframework/shell"), spec -> {
127-
spec.include("docs/*");
128-
});
129-
s.preserve(filter -> {
130-
filter.include("**/*");
131-
});
132-
File destination = new File(project.getBuildDir(), "docs/src/asciidoctor/asciidoc");
133-
s.into(destination);
134-
});
135-
return sync;
136-
}
137-
138-
private void configureCommonAttributes(Project project, AbstractAsciidoctorTask asciidoctorTask,
139-
ExtractVersionConstraints dependencyVersions) {
140-
asciidoctorTask.doFirst(new Action<Task>() {
141-
142-
@Override
143-
public void execute(Task arg0) {
144-
asciidoctorTask.getAttributeProviders().add(new AsciidoctorAttributeProvider() {
145-
@Override
146-
public Map<String, Object> getAttributes() {
147-
Map<String, String> versionConstraints = dependencyVersions.getVersionConstraints();
148-
Map<String, Object> attrs = new HashMap<>();
149-
attrs.put("spring-version", versionConstraints.get("org.springframework:spring-core"));
150-
attrs.put("spring-boot-version", versionConstraints.get("org.springframework.boot:spring-boot"));
151-
return attrs;
152-
}
73+
p.getTasks().withType(Javadoc.class, j -> {
74+
api.setClasspath(api.getClasspath().plus(j.getClasspath()));
15375
});
154-
}
76+
});
15577
});
15678

157-
Map<String, Object> attributes = new HashMap<>();
158-
attributes.put("toc", "left");
159-
attributes.put("icons", "font");
160-
attributes.put("idprefix", "");
161-
attributes.put("idseparator", "-");
162-
attributes.put("docinfo", "shared");
163-
attributes.put("sectanchors", "");
164-
attributes.put("sectnums", "");
165-
attributes.put("today-year", LocalDate.now().getYear());
166-
attributes.put("snippets", "docs");
167-
168-
asciidoctorTask.getAttributeProviders().add(new AsciidoctorAttributeProvider() {
169-
@Override
170-
public Map<String, Object> getAttributes() {
171-
Object version = project.getVersion();
172-
Map<String, Object> attrs = new HashMap<>();
173-
if (version != null && version.toString() != Project.DEFAULT_VERSION) {
174-
attrs.put("project-version", version);
175-
}
176-
return attrs;
177-
}
178-
});
179-
asciidoctorTask.attributes(attributes);
79+
return api;
18080
}
81+
18182
}

buildSrc/src/main/java/org/springframework/shell/gradle/RootPlugin.java

-102
This file was deleted.

spring-shell-docs/antora-playbook.yml

+2-6
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,7 @@
33
# The purpose of this Antora playbook is to build the docs in the current branch.
44
antora:
55
extensions:
6-
- '@springio/antora-extensions/partial-build-extension'
7-
- require: '@springio/antora-extensions/latest-version-extension'
8-
- require: '@springio/antora-extensions/inject-collector-cache-config-extension'
9-
- '@antora/collector-extension'
10-
- '@antora/atlas-extension'
11-
- require: '@springio/antora-extensions/root-component-extension'
6+
- require: '@springio/antora-extensions'
127
root_component_name: 'shell'
138
- require: '@springio/antora-extensions/asciinema-extension'
149
site:
@@ -30,6 +25,7 @@ asciidoc:
3025
extensions:
3126
- '@asciidoctor/tabs'
3227
- '@springio/asciidoctor-extensions'
28+
- '@springio/asciidoctor-extensions/javadoc-extension'
3329
sourcemap: true
3430
urls:
3531
latest_version_segment: ''

spring-shell-docs/antora.yml

+10-5
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,16 @@ nav:
55
- modules/ROOT/nav.adoc
66
ext:
77
collector:
8-
run:
9-
command: gradlew -q "-Dorg.gradle.jvmargs=-Xmx3g -XX:+HeapDumpOnOutOfMemoryError" :spring-shell-docs:generateAntoraYml
10-
local: true
11-
scan:
12-
dir: ./build/generated-antora-resources
8+
- run:
9+
command: gradlew -q "-Dorg.gradle.jvmargs=-Xmx3g -XX:+HeapDumpOnOutOfMemoryError" :spring-shell-docs:generateAntoraYml
10+
local: true
11+
scan:
12+
dir: ./build/generated-antora-resources
13+
- run:
14+
command: gradlew -q "-Dorg.gradle.jvmargs=-Xmx3g -XX:+HeapDumpOnOutOfMemoryError" :spring-shell-docs:aggregatedJavadoc
15+
local: true
16+
scan:
17+
dir: ./build/generated-antora-javadocs
1318

1419
asciidoc:
1520
attributes:

0 commit comments

Comments
 (0)