Skip to content

Commit 2f2d65b

Browse files
committed
Allow multiple links in libraries DSL
Update our libraries DSL to support multiple links with the same name. This will allow us to reference libraries that publish multiple API sites with each of their releases. See gh-41614
1 parent 0bd1ff7 commit 2f2d65b

File tree

5 files changed

+33
-23
lines changed

5 files changed

+33
-23
lines changed

buildSrc/src/main/java/org/springframework/boot/build/antora/AntoraAsciidocAttributes.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -185,16 +185,16 @@ private void addUrlJava(Map<String, String> attributes) {
185185
private void addUrlLibraryLinkAttributes(Map<String, String> attributes) {
186186
Map<String, String> packageAttributes = new LinkedHashMap<>();
187187
this.libraries.forEach((library) -> {
188-
String prefix = "url-" + library.getLinkRootName() + "-";
189-
library.getLinks().forEach((name, link) -> {
190-
String linkName = prefix + name;
188+
library.getLinks().forEach((name, links) -> links.forEach((link) -> {
189+
String linkRootName = (link.rootName() != null) ? link.rootName() : library.getLinkRootName();
190+
String linkName = "url-" + linkRootName + "-" + name;
191191
attributes.put(linkName, link.url(library));
192192
link.packages()
193193
.stream()
194194
.map(this::packageAttributeName)
195195
.forEach((packageAttributeName) -> packageAttributes.put(packageAttributeName,
196196
"{" + linkName + "}"));
197-
});
197+
}));
198198
});
199199
attributes.putAll(packageAttributes);
200200
}

buildSrc/src/main/java/org/springframework/boot/build/bom/BomExtension.java

+13-3
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ public static class LibraryHandler {
256256

257257
private String linkRootName;
258258

259-
private final Map<String, Link> links = new HashMap<>();
259+
private final Map<String, List<Link>> links = new HashMap<>();
260260

261261
@Inject
262262
public LibraryHandler(Project project, String version) {
@@ -459,7 +459,7 @@ public void managedBy(String managedBy) {
459459

460460
public static class LinksHandler {
461461

462-
private final Map<String, Link> links = new HashMap<>();
462+
private final Map<String, List<Link>> links = new HashMap<>();
463463

464464
public void site(String linkTemplate) {
465465
site(asFactory(linkTemplate));
@@ -501,6 +501,10 @@ public void javadoc(Function<LibraryVersion, String> linkFactory, String... pack
501501
add("javadoc", linkFactory, packages);
502502
}
503503

504+
public void javadoc(String rootName, Function<LibraryVersion, String> linkFactory, String... packages) {
505+
add(rootName, "javadoc", linkFactory, packages);
506+
}
507+
504508
public void releaseNotes(String linkTemplate) {
505509
releaseNotes(asFactory(linkTemplate));
506510
}
@@ -518,7 +522,13 @@ public void add(String name, Function<LibraryVersion, String> linkFactory) {
518522
}
519523

520524
public void add(String name, Function<LibraryVersion, String> linkFactory, String[] packages) {
521-
this.links.put(name, new Link(linkFactory, (packages != null) ? List.of(packages) : null));
525+
add(null, name, linkFactory, packages);
526+
}
527+
528+
private void add(String rootName, String name, Function<LibraryVersion, String> linkFactory,
529+
String[] packages) {
530+
Link link = new Link(rootName, linkFactory, (packages != null) ? List.of(packages) : null);
531+
this.links.computeIfAbsent(name, (key) -> new ArrayList<>()).add(link);
522532
}
523533

524534
private Function<LibraryVersion, String> asFactory(String linkTemplate) {

buildSrc/src/main/java/org/springframework/boot/build/bom/CheckLinks.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ void releaseNotes() {
5959
RestTemplate restTemplate = new RestTemplate(requestFactory);
6060
restTemplate.setErrorHandler(new IgnoringErrorHandler());
6161
for (Library library : this.bom.getLibraries()) {
62-
library.getLinks().forEach((name, link) -> {
62+
library.getLinks().forEach((name, links) -> links.forEach((link) -> {
6363
URI uri;
6464
try {
6565
uri = new URI(link.url(library));
@@ -70,7 +70,7 @@ void releaseNotes() {
7070
catch (URISyntaxException ex) {
7171
throw new RuntimeException(ex);
7272
}
73-
});
73+
}));
7474
}
7575
}
7676

buildSrc/src/main/java/org/springframework/boot/build/bom/Library.java

+13-7
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public class Library {
6868

6969
private final String linkRootName;
7070

71-
private final Map<String, Link> links;
71+
private final Map<String, List<Link>> links;
7272

7373
/**
7474
* Create a new {@code Library} with the given {@code name}, {@code version}, and
@@ -89,7 +89,7 @@ public class Library {
8989
*/
9090
public Library(String name, String calendarName, LibraryVersion version, List<Group> groups,
9191
List<ProhibitedVersion> prohibitedVersions, boolean considerSnapshots, VersionAlignment versionAlignment,
92-
String alignsWithBom, String linkRootName, Map<String, Link> links) {
92+
String alignsWithBom, String linkRootName, Map<String, List<Link>> links) {
9393
this.name = name;
9494
this.calendarName = (calendarName != null) ? calendarName : name;
9595
this.version = version;
@@ -148,16 +148,22 @@ public String getAlignsWithBom() {
148148
return this.alignsWithBom;
149149
}
150150

151-
public Map<String, Link> getLinks() {
151+
public Map<String, List<Link>> getLinks() {
152152
return this.links;
153153
}
154154

155155
public String getLinkUrl(String name) {
156-
Link link = getLink(name);
157-
return (link != null) ? link.url(this) : null;
156+
List<Link> links = getLinks(name);
157+
if (links == null || links.isEmpty()) {
158+
return null;
159+
}
160+
if (links.size() > 1) {
161+
throw new IllegalStateException("Expected a single '%s' link for %s".formatted(name, getName()));
162+
}
163+
return links.get(0).url(this);
158164
}
159165

160-
public Link getLink(String name) {
166+
public List<Link> getLinks(String name) {
161167
return this.links.get(name);
162168
}
163169

@@ -524,7 +530,7 @@ public String toString() {
524530

525531
}
526532

527-
public record Link(Function<LibraryVersion, String> factory, List<String> packages) {
533+
public record Link(String rootName, Function<LibraryVersion, String> factory, List<String> packages) {
528534

529535
private static final Pattern PACKAGE_EXPAND = Pattern.compile("^(.*)\\[(.*)\\]$");
530536

buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/UpgradeBom.java

+1-7
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828

2929
import org.springframework.boot.build.bom.BomExtension;
3030
import org.springframework.boot.build.bom.Library.LibraryVersion;
31-
import org.springframework.boot.build.bom.Library.Link;
3231
import org.springframework.boot.build.bom.bomr.github.Issue;
3332
import org.springframework.boot.build.properties.BuildProperties;
3433

@@ -77,7 +76,7 @@ protected String commitMessage(Upgrade upgrade, int issueNumber) {
7776
@Override
7877
protected String issueBody(Upgrade upgrade, Issue existingUpgrade) {
7978
LibraryVersion upgradeVersion = new LibraryVersion(upgrade.getVersion());
80-
String releaseNotesLink = getReleaseNotesLink(upgrade, upgradeVersion);
79+
String releaseNotesLink = upgrade.getLibrary().getLinkUrl("releaseNotes");
8180
List<String> lines = new ArrayList<>();
8281
String description = upgrade.getLibrary().getName() + " " + upgradeVersion;
8382
if (releaseNotesLink != null) {
@@ -92,9 +91,4 @@ protected String issueBody(Upgrade upgrade, Issue existingUpgrade) {
9291
return String.join("\\r\\n\\r\\n", lines);
9392
}
9493

95-
private String getReleaseNotesLink(Upgrade upgrade, LibraryVersion upgradeVersion) {
96-
Link releaseNotesLink = upgrade.getLibrary().getLink("releaseNotes");
97-
return (releaseNotesLink != null) ? releaseNotesLink.url(upgradeVersion) : null;
98-
}
99-
10094
}

0 commit comments

Comments
 (0)