Use internal attributes for values that aren't directly referenced

Update `AntoraAsciidocAttributes` so that internal attributes are
available for use in `antora-asciidoc-attributes.properties`. These
attributes don't end up in the final `antora.yml` file.

This commit also restore the `-version` properties for Spring Data.

Closes gh-43080
This commit is contained in:
Phillip Webb 2024-11-08 22:36:26 -08:00
parent d0e9168de0
commit 30efd52082
3 changed files with 66 additions and 45 deletions

View File

@ -83,13 +83,14 @@ public class AntoraAsciidocAttributes {
public Map<String, String> get() {
Map<String, String> attributes = new LinkedHashMap<>();
Map<String, String> internal = new LinkedHashMap<>();
addBuildTypeAttribute(attributes);
addGitHubAttributes(attributes);
addVersionAttributes(attributes);
addVersionAttributes(attributes, internal);
addArtifactAttributes(attributes);
addUrlJava(attributes);
addUrlLibraryLinkAttributes(attributes);
addPropertyAttributes(attributes);
addPropertyAttributes(attributes, internal);
return attributes;
}
@ -115,7 +116,7 @@ public class AntoraAsciidocAttributes {
return versionRoot.substring(0, lastDot) + ".x";
}
private void addVersionAttributes(Map<String, String> attributes) {
private void addVersionAttributes(Map<String, String> attributes, Map<String, String> internal) {
this.libraries.forEach((library) -> {
String name = "version-" + library.getLinkRootName();
String value = library.getVersion().toString();
@ -126,29 +127,33 @@ public class AntoraAsciidocAttributes {
addDependencyVersion(attributes, "jackson-annotations", "com.fasterxml.jackson.core:jackson-annotations");
addDependencyVersion(attributes, "jackson-core", "com.fasterxml.jackson.core:jackson-core");
addDependencyVersion(attributes, "jackson-databind", "com.fasterxml.jackson.core:jackson-databind");
addSpringDataDependencyVersion(attributes, "spring-data-commons");
addSpringDataDependencyVersion(attributes, "spring-data-couchbase");
addSpringDataDependencyVersion(attributes, "spring-data-cassandra");
addSpringDataDependencyVersion(attributes, "spring-data-elasticsearch");
addSpringDataDependencyVersion(attributes, "spring-data-jdbc");
addSpringDataDependencyVersion(attributes, "spring-data-jpa");
addSpringDataDependencyVersion(attributes, "spring-data-mongodb");
addSpringDataDependencyVersion(attributes, "spring-data-neo4j");
addSpringDataDependencyVersion(attributes, "spring-data-r2dbc");
addSpringDataDependencyVersion(attributes, "spring-data-rest", "spring-data-rest-core");
addSpringDataDependencyVersion(attributes, "spring-data-ldap");
addSpringDataDependencyVersion(attributes, internal, "spring-data-commons");
addSpringDataDependencyVersion(attributes, internal, "spring-data-couchbase");
addSpringDataDependencyVersion(attributes, internal, "spring-data-cassandra");
addSpringDataDependencyVersion(attributes, internal, "spring-data-elasticsearch");
addSpringDataDependencyVersion(attributes, internal, "spring-data-jdbc");
addSpringDataDependencyVersion(attributes, internal, "spring-data-jpa");
addSpringDataDependencyVersion(attributes, internal, "spring-data-mongodb");
addSpringDataDependencyVersion(attributes, internal, "spring-data-neo4j");
addSpringDataDependencyVersion(attributes, internal, "spring-data-r2dbc");
addSpringDataDependencyVersion(attributes, internal, "spring-data-rest", "spring-data-rest-core");
addSpringDataDependencyVersion(attributes, internal, "spring-data-ldap");
}
private void addSpringDataDependencyVersion(Map<String, String> attributes, String artifactId) {
addSpringDataDependencyVersion(attributes, artifactId, artifactId);
private void addSpringDataDependencyVersion(Map<String, String> attributes, Map<String, String> internal,
String artifactId) {
addSpringDataDependencyVersion(attributes, internal, artifactId, artifactId);
}
private void addSpringDataDependencyVersion(Map<String, String> attributes, String name, String artifactId) {
String version = getVersion("org.springframework.data:" + artifactId);
private void addSpringDataDependencyVersion(Map<String, String> attributes, Map<String, String> internal,
String name, String artifactId) {
String groupAndArtifactId = "org.springframework.data:" + artifactId;
addDependencyVersion(attributes, name, groupAndArtifactId);
String version = getVersion(groupAndArtifactId);
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");
internal.put("antoraversion-" + name, antoraVersion);
internal.put("dotxversion-" + name, majorMinor + ".x");
}
private void addDependencyVersion(Map<String, String> attributes, String name, String groupAndArtifactId) {
@ -173,6 +178,7 @@ public class AntoraAsciidocAttributes {
}
private void addUrlLibraryLinkAttributes(Map<String, String> attributes) {
Map<String, String> packageAttributes = new LinkedHashMap<>();
this.libraries.forEach((library) -> {
String prefix = "url-" + library.getLinkRootName() + "-";
library.getLinks().forEach((name, link) -> {
@ -181,22 +187,24 @@ public class AntoraAsciidocAttributes {
link.packages()
.stream()
.map(this::packageAttributeName)
.forEach((packageAttributeName) -> attributes.put(packageAttributeName, "{" + linkName + "}"));
.forEach((packageAttributeName) -> packageAttributes.put(packageAttributeName,
"{" + linkName + "}"));
});
});
attributes.putAll(packageAttributes);
}
private String packageAttributeName(String packageName) {
return "javadoc-location-" + packageName.replace('.', '-');
}
private void addPropertyAttributes(Map<String, String> attributes) {
private void addPropertyAttributes(Map<String, String> attributes, Map<String, String> internal) {
Properties properties = new Properties() {
@Override
public synchronized Object put(Object key, Object value) {
// Put directly because order is important for us
return attributes.put(key.toString(), value.toString());
return attributes.put(key.toString(), resolve(value.toString(), internal));
}
};
@ -208,4 +216,11 @@ public class AntoraAsciidocAttributes {
}
}
private String resolve(String value, Map<String, String> internal) {
for (Map.Entry<String, String> entry : internal.entrySet()) {
value = value.replace("{" + entry.getKey() + "}", entry.getValue());
}
return value;
}
}

View File

@ -35,34 +35,34 @@ 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-javadoc}/api
url-spring-data-cassandra-javadoc=https://docs.spring.io/spring-data/cassandra/docs/{dotxversion-spring-data-cassandra}/api
url-spring-data-cassandra-site=https://spring.io/projects/spring-data-cassandra
url-spring-data-cassandra-docs=https://docs.spring.io/spring-data/cassandra/reference/{version-spring-data-cassandra-docs}
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-cassandra-docs=https://docs.spring.io/spring-data/cassandra/reference/{antoraversion-spring-data-cassandra}
url-spring-data-commons-javadoc=https://docs.spring.io/spring-data/commons/docs/{dotxversion-spring-data-commons}/api
url-spring-data-couchbase-docs=https://docs.spring.io/spring-data/couchbase/reference/{antoraversion-spring-data-couchbase}
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-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-couchbase-javadoc=https://docs.spring.io/spring-data/couchbase/docs/{dotxversion-spring-data-couchbase}/api
url-spring-data-elasticsearch-javadoc=https://docs.spring.io/spring-data/elasticsearch/docs/{dotxversion-spring-data-elasticsearch}/api
url-spring-data-elasticsearch-docs=https://docs.spring.io/spring-data/elasticsearch/reference/{antoraversion-spring-data-elasticsearch}
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-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-docs}
url-spring-data-jpa-javadoc=https://docs.spring.io/spring-data/jpa/docs/{version-spring-data-jpa-javadoc}/api
url-spring-data-jdbc-docs=https://docs.spring.io/spring-data/relational/reference/{antoraversion-spring-data-jdbc}
url-spring-data-jpa-javadoc=https://docs.spring.io/spring-data/jpa/docs/{dotxversion-spring-data-jpa}/api
url-spring-data-jpa-site=https://spring.io/projects/spring-data-jpa
url-spring-data-jpa-docs=https://docs.spring.io/spring-data/jpa/reference/{version-spring-data-jpa-docs}
url-spring-data-jpa-docs=https://docs.spring.io/spring-data/jpa/reference/{antoraversion-spring-data-jpa}
url-spring-data-ldap-site=https://spring.io/projects/spring-data-ldap
url-spring-data-ldap-docs=https://docs.spring.io/spring-data/ldap/reference/{version-spring-data-ldap-docs}
url-spring-data-mongodb-javadoc=https://docs.spring.io/spring-data/mongodb/docs/{version-spring-data-mongodb-javadoc}/api
url-spring-data-ldap-docs=https://docs.spring.io/spring-data/ldap/reference/{antoraversion-spring-data-ldap}
url-spring-data-mongodb-javadoc=https://docs.spring.io/spring-data/mongodb/docs/{dotxversion-spring-data-mongodb}/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-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-mongodb-docs=https://docs.spring.io/spring-data/mongodb/reference/{antoraversion-spring-data-mongodb}
url-spring-data-neo4j-javadoc=https://docs.spring.io/spring-data/neo4j/docs/{dotxversion-spring-data-neo4j}/api
url-spring-data-neo4j-docs=https://docs.spring.io/spring-data/neo4j/reference/{antoraversion-spring-data-neo4j}
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-javadoc}/api
url-spring-data-r2dbc-docs=https://docs.spring.io/spring-data/relational/reference/{version-spring-data-r2dbc-docs}
url-spring-data-r2dbc-javadoc=https://docs.spring.io/spring-data/r2dbc/docs/{dotxversion-spring-data-r2dbc}/api
url-spring-data-r2dbc-docs=https://docs.spring.io/spring-data/relational/reference/{antoraversion-spring-data-r2dbc}
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-javadoc}/api
url-spring-data-rest-javadoc=https://docs.spring.io/spring-data/rest/docs/{dotxversion-spring-data-rest}/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

@ -97,16 +97,22 @@ class AntoraAsciidocAttributesTests {
void versionReferenceFromSpringDataDependencyReleaseVersion() {
AntoraAsciidocAttributes attributes = new AntoraAsciidocAttributes("1.2.3", true, BuildType.OPEN_SOURCE, null,
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");
assertThat(attributes.get()).containsEntry("version-spring-data-mongodb", "3.2.5");
assertThat(attributes.get()).containsEntry("url-spring-data-mongodb-docs",
"https://docs.spring.io/spring-data/mongodb/reference/3.2");
assertThat(attributes.get()).containsEntry("url-spring-data-mongodb-javadoc",
"https://docs.spring.io/spring-data/mongodb/docs/3.2.x/api");
}
@Test
void versionReferenceFromSpringDataDependencySnapshotVersion() {
AntoraAsciidocAttributes attributes = new AntoraAsciidocAttributes("1.2.3", true, BuildType.OPEN_SOURCE, 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");
assertThat(attributes.get()).containsEntry("version-spring-data-mongodb", "3.2.0-SNAPSHOT");
assertThat(attributes.get()).containsEntry("url-spring-data-mongodb-docs",
"https://docs.spring.io/spring-data/mongodb/reference/3.2-SNAPSHOT");
assertThat(attributes.get()).containsEntry("url-spring-data-mongodb-javadoc",
"https://docs.spring.io/spring-data/mongodb/docs/3.2.x/api");
}
@Test