Merge branch '3.2.x' into 3.3.x

Closes gh-42269
This commit is contained in:
Stéphane Nicoll 2024-09-11 18:56:35 +02:00
commit 726ee27cce
7 changed files with 133 additions and 61 deletions

View File

@ -19,11 +19,13 @@ package org.springframework.boot.build.antora;
import java.io.IOException;
import java.io.InputStream;
import java.io.UncheckedIOException;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.stream.Collectors;
import org.gradle.api.Project;
@ -130,13 +132,21 @@ public class AntoraAsciidocAttributes {
}
private void addSpringDataDependencyVersion(Map<String, String> attributes, String name, String artifactId) {
addDependencyVersion(attributes, name, "org.springframework.data:" + artifactId);
String version = getVersion("org.springframework.data:" + artifactId);
String majorMinor = Arrays.stream(version.split("\\.")).limit(2).collect(Collectors.joining("."));
String antoraVersion = version.endsWith(DASH_SNAPSHOT) ? majorMinor + DASH_SNAPSHOT : majorMinor;
attributes.put("version-" + name + "-docs", antoraVersion);
attributes.put("version-" + name + "-javadoc", majorMinor + ".x");
}
private void addDependencyVersion(Map<String, String> attributes, String name, String groupAndArtifactId) {
attributes.put("version-" + name, getVersion(groupAndArtifactId));
}
private String getVersion(String groupAndArtifactId) {
String version = this.dependencyVersions.get(groupAndArtifactId);
Assert.notNull(version, () -> "No version found for " + groupAndArtifactId);
attributes.put("version-" + name, version);
return version;
}
private void addArtifactAttributes(Map<String, String> attributes) {

View File

@ -253,6 +253,15 @@ public class Library {
return result;
}
public String forMajorMinorGeneration() {
String[] parts = parts();
String result = parts[0] + "." + parts[1] + ".x";
if (toString().endsWith("SNAPSHOT")) {
result += "-SNAPSHOT";
}
return result;
}
private String[] parts() {
return toString().split("[.-]");
}

View File

@ -33,33 +33,33 @@ url-paketo-docs=https://paketo.io/docs
url-paketo-docs-java-buildpack={url-paketo-docs}/buildpacks/language-family-buildpacks/java
url-spring-boot-for-apache-geode-docs=https://docs.spring.io/spring-boot-data-geode-build/2.0.x/reference/html5
url-spring-boot-for-apache-geode-site=https://github.com/spring-projects/spring-boot-data-geode
url-spring-data-cassandra-javadoc=https://docs.spring.io/spring-data/cassandra/docs/{version-spring-data-cassandra}/api
url-spring-data-cassandra-javadoc=https://docs.spring.io/spring-data/cassandra/docs/{version-spring-data-cassandra-javadoc}/api
url-spring-data-cassandra-site=https://spring.io/projects/spring-data-cassandra
url-spring-data-commons-javadoc=https://docs.spring.io/spring-data/commons/docs/{version-spring-data-commons}/api
url-spring-data-couchbase-docs=https://docs.spring.io/spring-data/couchbase/reference/{version-spring-data-couchbase}
url-spring-data-commons-javadoc=https://docs.spring.io/spring-data/commons/docs/{version-spring-data-commons-javadoc}/api
url-spring-data-couchbase-docs=https://docs.spring.io/spring-data/couchbase/reference/{version-spring-data-couchbase-docs}
url-spring-data-couchbase-site=https://spring.io/projects/spring-data-couchbase
url-spring-data-couchbase-javadoc=https://docs.spring.io/spring-data/couchbase/docs/{version-spring-data-couchbase}/api
url-spring-data-elasticsearch-javadoc=https://docs.spring.io/spring-data/elasticsearch/docs/{version-spring-data-elasticsearch}/api
url-spring-data-elasticsearch-docs=https://docs.spring.io/spring-data/elasticsearch/reference/{version-spring-data-elasticsearch}
url-spring-data-couchbase-javadoc=https://docs.spring.io/spring-data/couchbase/docs/{version-spring-data-couchbase-javadoc}/api
url-spring-data-elasticsearch-javadoc=https://docs.spring.io/spring-data/elasticsearch/docs/{version-spring-data-elasticsearch-javadoc}/api
url-spring-data-elasticsearch-docs=https://docs.spring.io/spring-data/elasticsearch/reference/{version-spring-data-elasticsearch-docs}
url-spring-data-elasticsearch-site=https://spring.io/projects/spring-data-elasticsearch
url-spring-data-envers-site=https://spring.io/projects/spring-data-envers
url-spring-data-gemfire-site=https://spring.io/projects/spring-data-gemfire
url-spring-data-geode-site=https://spring.io/projects/spring-data-geode
url-spring-data-jdbc-docs=https://docs.spring.io/spring-data/relational/reference/{version-spring-data-jdbc}
url-spring-data-jpa-javadoc=https://docs.spring.io/spring-data/jpa/docs/{version-spring-data-jpa}/api
url-spring-data-jdbc-docs=https://docs.spring.io/spring-data/relational/reference/{version-spring-data-jdbc-docs}
url-spring-data-jpa-javadoc=https://docs.spring.io/spring-data/jpa/docs/{version-spring-data-jpa-javadoc}/api
url-spring-data-jpa-site=https://spring.io/projects/spring-jpa
url-spring-data-jpa-docs=https://docs.spring.io/spring-data/jpa/reference/{version-spring-data-jpa}
url-spring-data-jpa-docs=https://docs.spring.io/spring-data/jpa/reference/{version-spring-data-jpa-docs}
url-spring-data-ldap-site=https://spring.io/projects/spring-data-ldap
url-spring-data-mongodb-javadoc=https://docs.spring.io/spring-data/mongodb/docs/{version-spring-data-mongodb}/api
url-spring-data-mongodb-javadoc=https://docs.spring.io/spring-data/mongodb/docs/{version-spring-data-mongodb-javadoc}/api
url-spring-data-mongodb-site=https://spring.io/projects/spring-data-mongodb
url-spring-data-mongodb-docs=https://docs.spring.io/spring-data/mongodb/reference/{version-spring-data-mongodb}
url-spring-data-neo4j-javadoc=https://docs.spring.io/spring-data/neo4j/docs/{version-spring-data-neo4j}/api
url-spring-data-neo4j-docs=https://docs.spring.io/spring-data/neo4j/reference/{version-spring-data-neo4j}
url-spring-data-mongodb-docs=https://docs.spring.io/spring-data/mongodb/reference/{version-spring-data-mongodb-docs}
url-spring-data-neo4j-javadoc=https://docs.spring.io/spring-data/neo4j/docs/{version-spring-data-neo4j-javadoc}/api
url-spring-data-neo4j-docs=https://docs.spring.io/spring-data/neo4j/reference/{version-spring-data-neo4j-docs}
url-spring-data-neo4j-site=https://spring.io/projects/spring-data-neo4j
url-spring-data-r2dbc-javadoc=https://docs.spring.io/spring-data/r2dbc/docs/{version-spring-data-r2dbc}/api
url-spring-data-r2dbc-docs=https://docs.spring.io/spring-data/relational/reference/{version-spring-data-r2dbc}
url-spring-data-r2dbc-javadoc=https://docs.spring.io/spring-data/r2dbc/docs/{version-spring-data-r2dbc-javadoc}/api
url-spring-data-r2dbc-docs=https://docs.spring.io/spring-data/relational/reference/{version-spring-data-r2dbc-docs}
url-spring-data-redis-site=https://spring.io/projects/spring-data-redis
url-spring-data-rest-javadoc=https://docs.spring.io/spring-data/rest/docs/{version-spring-data-rest}/api
url-spring-data-rest-javadoc=https://docs.spring.io/spring-data/rest/docs/{version-spring-data-rest-javadoc}/api
url-spring-data-site=https://spring.io/projects/spring-data
url-jackson-annotations=https://javadoc.io/doc/com.fasterxml.jackson.core/jackson-annotations/{version-jackson-annotations}
url-jackson-core=https://javadoc.io/doc/com.fasterxml.jackson.core/jackson-core/{version-jackson-core}

View File

@ -38,6 +38,7 @@ import static org.assertj.core.api.Assertions.assertThat;
* Tests for {@link AntoraAsciidocAttributes}.
*
* @author Phillip Webb
* @author Stephane Nicoll
*/
class AntoraAsciidocAttributesTests {
@ -78,10 +79,19 @@ class AntoraAsciidocAttributesTests {
}
@Test
void versionReferenceFromSpringDataDependencyVersion() {
void versionReferenceFromSpringDataDependencyReleaseVersion() {
AntoraAsciidocAttributes attributes = new AntoraAsciidocAttributes("1.2.3", true, null,
mockDependencyVersions(), null);
assertThat(attributes.get()).containsEntry("version-spring-data-mongodb", "1.2.3");
mockDependencyVersions("3.2.5"), null);
assertThat(attributes.get()).containsEntry("version-spring-data-mongodb-docs", "3.2");
assertThat(attributes.get()).containsEntry("version-spring-data-mongodb-javadoc", "3.2.x");
}
@Test
void versionReferenceFromSpringDataDependencySnapshotVersion() {
AntoraAsciidocAttributes attributes = new AntoraAsciidocAttributes("1.2.3", true, null,
mockDependencyVersions("3.2.0-SNAPSHOT"), null);
assertThat(attributes.get()).containsEntry("version-spring-data-mongodb-docs", "3.2-SNAPSHOT");
assertThat(attributes.get()).containsEntry("version-spring-data-mongodb-javadoc", "3.2.x");
}
@Test
@ -173,29 +183,33 @@ class AntoraAsciidocAttributesTests {
}
private Map<String, String> mockDependencyVersions() {
return mockDependencyVersions("1.2.3");
}
private Map<String, String> mockDependencyVersions(String version) {
Map<String, String> versions = new LinkedHashMap<>();
addMockSpringDataVersion(versions, "spring-data-commons");
addMockSpringDataVersion(versions, "spring-data-cassandra");
addMockSpringDataVersion(versions, "spring-data-couchbase");
addMockSpringDataVersion(versions, "spring-data-elasticsearch");
addMockSpringDataVersion(versions, "spring-data-jdbc");
addMockSpringDataVersion(versions, "spring-data-jpa");
addMockSpringDataVersion(versions, "spring-data-mongodb");
addMockSpringDataVersion(versions, "spring-data-neo4j");
addMockSpringDataVersion(versions, "spring-data-r2dbc");
addMockSpringDataVersion(versions, "spring-data-rest-core");
addMockJacksonVersion(versions, "jackson-annotations");
addMockJacksonVersion(versions, "jackson-core");
addMockJacksonVersion(versions, "jackson-databind");
addMockSpringDataVersion(versions, "spring-data-commons", version);
addMockSpringDataVersion(versions, "spring-data-cassandra", version);
addMockSpringDataVersion(versions, "spring-data-couchbase", version);
addMockSpringDataVersion(versions, "spring-data-elasticsearch", version);
addMockSpringDataVersion(versions, "spring-data-jdbc", version);
addMockSpringDataVersion(versions, "spring-data-jpa", version);
addMockSpringDataVersion(versions, "spring-data-mongodb", version);
addMockSpringDataVersion(versions, "spring-data-neo4j", version);
addMockSpringDataVersion(versions, "spring-data-r2dbc", version);
addMockSpringDataVersion(versions, "spring-data-rest-core", version);
addMockJacksonVersion(versions, "jackson-annotations", version);
addMockJacksonVersion(versions, "jackson-core", version);
addMockJacksonVersion(versions, "jackson-databind", version);
return versions;
}
private void addMockSpringDataVersion(Map<String, String> versions, String artifactId) {
versions.put("org.springframework.data:" + artifactId, "1.2.3");
private void addMockSpringDataVersion(Map<String, String> versions, String artifactId, String version) {
versions.put("org.springframework.data:" + artifactId, version);
}
private void addMockJacksonVersion(Map<String, String> versions, String artifactId) {
versions.put("com.fasterxml.jackson.core:" + artifactId, "2.3.4");
private void addMockJacksonVersion(Map<String, String> versions, String artifactId, String version) {
versions.put("com.fasterxml.jackson.core:" + artifactId, version);
}
}

View File

@ -72,4 +72,16 @@ class LibraryTests {
assertThat(library.getLinkRootName()).isEqualTo("spring-data");
}
@Test
void toMajorMinorGenerationWithRelease() {
LibraryVersion version = new LibraryVersion(DependencyVersion.parse("1.2.3"));
assertThat(version.forMajorMinorGeneration()).isEqualTo("1.2.x");
}
@Test
void toMajorMinorGenerationWithSnapshot() {
LibraryVersion version = new LibraryVersion(DependencyVersion.parse("2.0.0-SNAPSHOT"));
assertThat(version.forMajorMinorGeneration()).isEqualTo("2.0.x-SNAPSHOT");
}
}

View File

@ -1911,8 +1911,10 @@ bom {
links {
site("https://spring.io/projects/spring-amqp")
github("https://github.com/spring-projects/spring-amqp")
javadoc("https://docs.spring.io/spring-amqp/docs/{version}/api")
docs("https://docs.spring.io/spring-amqp/reference/{version}")
javadoc { version -> "https://docs.spring.io/spring-amqp/docs/%s/api"
.formatted(version.forMajorMinorGeneration()) }
docs { version -> "https://docs.spring.io/spring-amqp/reference/%s"
.formatted(version.forAntora()) }
releaseNotes("https://github.com/spring-projects/spring-amqp/releases/tag/v{version}")
}
}
@ -1926,7 +1928,8 @@ bom {
links {
site("https://spring.io/projects/spring-authorization-server")
github("https://github.com/spring-projects/spring-authorization-server")
javadoc("https://docs.spring.io/spring-authorization-server/docs/{version}/api")
javadoc {version -> "https://docs.spring.io/spring-authorization-server/docs/%s/api"
.formatted(version.forMajorMinorGeneration()) }
docs { version -> "https://docs.spring.io/spring-authorization-server/reference/%s"
.formatted(version.forAntora()) }
releaseNotes("https://github.com/spring-projects/spring-authorization-server/releases/tag/{version}")
@ -1942,7 +1945,8 @@ bom {
links {
site("https://spring.io/projects/spring-batch")
github("https://github.com/spring-projects/spring-batch")
javadoc("https://docs.spring.io/spring-batch/docs/{version}/api")
javadoc { version -> "https://docs.spring.io/spring-batch/docs/%s/api"
.formatted(version.forMajorMinorGeneration()) }
docs { version -> "https://docs.spring.io/spring-batch/reference/%s"
.formatted(version.forAntora()) }
releaseNotes("https://github.com/spring-projects/spring-batch/releases/tag/v{version}")
@ -1972,8 +1976,10 @@ bom {
links {
site("https://spring.io/projects/spring-framework")
github("https://github.com/spring-projects/spring-framework")
javadoc("https://docs.spring.io/spring-framework/docs/{version}/javadoc-api")
docs("https://docs.spring.io/spring-framework/reference/{version}")
javadoc { version ->"https://docs.spring.io/spring-framework/docs/%s/javadoc-api"
.formatted(version.forMajorMinorGeneration()) }
docs { version -> "https://docs.spring.io/spring-framework/reference/%s"
.formatted(version.forAntora()) }
releaseNotes("https://github.com/spring-projects/spring-framework/releases/tag/v{version}")
}
}
@ -1988,7 +1994,8 @@ bom {
links {
site("https://spring.io/projects/spring-graphql")
github("https://github.com/spring-projects/spring-graphql")
javadoc("https://docs.spring.io/spring-graphql/docs/{version}/api")
javadoc { version -> "https://docs.spring.io/spring-graphql/docs/%s/api"
.formatted(version.forMajorMinorGeneration()) }
docs { version -> "https://docs.spring.io/spring-graphql/reference/%s"
.formatted(version.forAntora()) }
releaseNotes("https://github.com/spring-projects/spring-graphql/releases/tag/v{version}")
@ -2004,8 +2011,10 @@ bom {
links {
site("https://spring.io/projects/spring-hateoas")
github("https://github.com/spring-projects/spring-hateoas")
javadoc("https://docs.spring.io/spring-hateoas/docs/{version}/api")
docs("https://docs.spring.io/spring-hateoas/docs/{version}/reference/html")
javadoc { version -> "https://docs.spring.io/spring-hateoas/docs/%s/api"
.formatted(version.forMajorMinorGeneration()) }
docs { version -> "https://docs.spring.io/spring-hateoas/docs/%s/reference/html"
.formatted(version.forMajorMinorGeneration()) }
releaseNotes("https://github.com/spring-projects/spring-hateoas/releases/tag/{version}")
}
}
@ -2019,7 +2028,8 @@ bom {
links {
site("https://spring.io/projects/spring-integration")
github("https://github.com/spring-projects/spring-integration")
javadoc("https://docs.spring.io/spring-integration/docs/{version}/api")
javadoc { version -> "https://docs.spring.io/spring-integration/docs/%s/api"
.formatted(version.forMajorMinorGeneration()) }
docs { version -> "https://docs.spring.io/spring-integration/reference/%s"
.formatted(version.forAntora()) }
releaseNotes("https://github.com/spring-projects/spring-integration/releases/tag/v{version}")
@ -2036,7 +2046,8 @@ bom {
links {
site("https://spring.io/projects/spring-kafka")
github("https://github.com/spring-projects/spring-kafka")
javadoc("https://docs.spring.io/spring-kafka/docs/{version}/api")
javadoc { version -> "https://docs.spring.io/spring-kafka/docs/%s/api"
.formatted(version.forMajorMinorGeneration()) }
docs { version -> "https://docs.spring.io/spring-kafka/reference/%s"
.formatted(version.forAntora()) }
releaseNotes("https://github.com/spring-projects/spring-kafka/releases/tag/v{version}")
@ -2055,8 +2066,10 @@ bom {
links {
site("https://spring.io/projects/spring-ldap")
github("https://github.com/spring-projects/spring-ldap")
javadoc("https://docs.spring.io/spring-ldap/docs/{version}/api")
docs("https://docs.spring.io/spring-ldap/reference/{version}")
javadoc { version -> "https://docs.spring.io/spring-ldap/docs/%s/api"
.formatted(version.forMajorMinorGeneration()) }
docs { version -> "https://docs.spring.io/spring-ldap/reference/%s"
.formatted(version.forAntora()) }
releaseNotes("https://github.com/spring-projects/spring-ldap/releases/tag/{version}")
}
}
@ -2070,8 +2083,10 @@ bom {
links {
site("https://spring.io/projects/spring-pulsar")
github("https://github.com/spring-projects/spring-pulsar")
javadoc("https://docs.spring.io/spring-pulsar/docs/{version}/api/")
docs("https://docs.spring.io/spring-pulsar/docs/{version}/reference")
javadoc { version -> "https://docs.spring.io/spring-pulsar/docs/%s/api/"
.formatted(version.forMajorMinorGeneration()) }
docs { version -> "https://docs.spring.io/spring-pulsar/docs/%s/reference"
.formatted(version.forMajorMinorGeneration()) }
releaseNotes("https://github.com/spring-projects/spring-pulsar/releases/tag/v{version}")
}
}
@ -2085,8 +2100,10 @@ bom {
links {
site("https://spring.io/projects/spring-restdocs")
github("https://github.com/spring-projects/spring-restdocs")
javadoc("https://docs.spring.io/spring-restdocs/docs/{version}/api/")
docs("https://docs.spring.io/spring-restdocs/docs/{version}/reference/htmlsingle/")
javadoc { version -> "https://docs.spring.io/spring-restdocs/docs/%s/api/"
.formatted(version.forMajorMinorGeneration()) }
docs { version -> "https://docs.spring.io/spring-restdocs/docs/%s/reference/htmlsingle/"
.formatted(version.forMajorMinorGeneration()) }
releaseNotes("https://github.com/spring-projects/spring-restdocs/releases/tag/v{version}")
}
}
@ -2112,7 +2129,8 @@ bom {
links {
site("https://spring.io/projects/spring-security")
github("https://github.com/spring-projects/spring-security")
javadoc("https://docs.spring.io/spring-security/site/docs/{version}/api")
javadoc { version -> "https://docs.spring.io/spring-security/site/docs/%s/api"
.formatted(version.forMajorMinorGeneration()) }
docs { version -> "https://docs.spring.io/spring-security/reference/%s"
.formatted(version.forAntora()) }
releaseNotes("https://github.com/spring-projects/spring-security/releases/tag/{version}")
@ -2132,7 +2150,8 @@ bom {
links {
site("https://spring.io/projects/spring-session")
github("https://github.com/spring-projects/spring-session")
javadoc("https://docs.spring.io/spring-session/docs/{version}/api")
javadoc { version -> "https://docs.spring.io/spring-session/docs/%s/api"
.formatted(version.forMajorMinorGeneration()) }
docs { version -> "https://docs.spring.io/spring-session/reference/%s"
.formatted(version.forAntora()) }
releaseNotes("https://github.com/spring-projects/spring-session/releases/tag/{version}")
@ -2148,8 +2167,10 @@ bom {
links("spring-webservices") {
site("https://spring.io/projects/spring-ws")
github("https://github.com/spring-projects/spring-ws")
javadoc("https://docs.spring.io/spring-ws/docs/{version}/api")
docs("https://docs.spring.io/spring-ws/docs/{version}/reference/html")
javadoc { version -> "https://docs.spring.io/spring-ws/docs/%s/api"
.formatted(version.forMajorMinorGeneration()) }
docs { version -> "https://docs.spring.io/spring-ws/docs/%s/reference/html"
.formatted(version.forMajorMinorGeneration()) }
releaseNotes("https://github.com/spring-projects/spring-ws/releases/tag/v{version}")
}
}

View File

@ -223,12 +223,18 @@ task aggregatedJavadoc(type: Javadoc) {
}
doFirst {
def versionConstraints = dependencyVersions.versionConstraints
def toMajorMinorVersion = version -> {
String formatted = version.split("\\.").take(2).join('.') + '.x'
return version.endsWith("-SNAPSHOT") ? formatted + "-SNAPSHOT" : formatted
}
def springFrameworkVersion = toMajorMinorVersion(versionConstraints["org.springframework:spring-core"])
def springSecurityVersion = toMajorMinorVersion(versionConstraints["org.springframework.security:spring-security-core"])
def tomcatVersion = "${versionConstraints["org.apache.tomcat:tomcat-annotations-api"]}"
def tomcatDocsVersion = tomcatVersion.substring(0, tomcatVersion.lastIndexOf("."));
options.links = [
"https://docs.oracle.com/en/java/javase/17/docs/api/",
"https://docs.spring.io/spring-framework/docs/${versionConstraints["org.springframework:spring-core"]}/javadoc-api/",
"https://docs.spring.io/spring-security/site/docs/${versionConstraints["org.springframework.security:spring-security-core"]}/api/",
"https://docs.spring.io/spring-framework/docs/${springFrameworkVersion}/javadoc-api/",
"https://docs.spring.io/spring-security/site/docs/${springSecurityVersion}/api/",
"https://jakarta.ee/specifications/platform/9/apidocs/",
"https://tomcat.apache.org/tomcat-${tomcatDocsVersion}-doc/api/",
] as String[]