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
This commit is contained in:
parent
0bd1ff7747
commit
2f2d65b7a3
|
|
@ -185,16 +185,16 @@ 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) -> {
|
||||
String linkName = prefix + name;
|
||||
library.getLinks().forEach((name, links) -> links.forEach((link) -> {
|
||||
String linkRootName = (link.rootName() != null) ? link.rootName() : library.getLinkRootName();
|
||||
String linkName = "url-" + linkRootName + "-" + name;
|
||||
attributes.put(linkName, link.url(library));
|
||||
link.packages()
|
||||
.stream()
|
||||
.map(this::packageAttributeName)
|
||||
.forEach((packageAttributeName) -> packageAttributes.put(packageAttributeName,
|
||||
"{" + linkName + "}"));
|
||||
});
|
||||
}));
|
||||
});
|
||||
attributes.putAll(packageAttributes);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -256,7 +256,7 @@ public class BomExtension {
|
|||
|
||||
private String linkRootName;
|
||||
|
||||
private final Map<String, Link> links = new HashMap<>();
|
||||
private final Map<String, List<Link>> links = new HashMap<>();
|
||||
|
||||
@Inject
|
||||
public LibraryHandler(Project project, String version) {
|
||||
|
|
@ -459,7 +459,7 @@ public class BomExtension {
|
|||
|
||||
public static class LinksHandler {
|
||||
|
||||
private final Map<String, Link> links = new HashMap<>();
|
||||
private final Map<String, List<Link>> links = new HashMap<>();
|
||||
|
||||
public void site(String linkTemplate) {
|
||||
site(asFactory(linkTemplate));
|
||||
|
|
@ -501,6 +501,10 @@ public class BomExtension {
|
|||
add("javadoc", linkFactory, packages);
|
||||
}
|
||||
|
||||
public void javadoc(String rootName, Function<LibraryVersion, String> linkFactory, String... packages) {
|
||||
add(rootName, "javadoc", linkFactory, packages);
|
||||
}
|
||||
|
||||
public void releaseNotes(String linkTemplate) {
|
||||
releaseNotes(asFactory(linkTemplate));
|
||||
}
|
||||
|
|
@ -518,7 +522,13 @@ public class BomExtension {
|
|||
}
|
||||
|
||||
public void add(String name, Function<LibraryVersion, String> linkFactory, String[] packages) {
|
||||
this.links.put(name, new Link(linkFactory, (packages != null) ? List.of(packages) : null));
|
||||
add(null, name, linkFactory, packages);
|
||||
}
|
||||
|
||||
private void add(String rootName, String name, Function<LibraryVersion, String> linkFactory,
|
||||
String[] packages) {
|
||||
Link link = new Link(rootName, linkFactory, (packages != null) ? List.of(packages) : null);
|
||||
this.links.computeIfAbsent(name, (key) -> new ArrayList<>()).add(link);
|
||||
}
|
||||
|
||||
private Function<LibraryVersion, String> asFactory(String linkTemplate) {
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ public abstract class CheckLinks extends DefaultTask {
|
|||
RestTemplate restTemplate = new RestTemplate(requestFactory);
|
||||
restTemplate.setErrorHandler(new IgnoringErrorHandler());
|
||||
for (Library library : this.bom.getLibraries()) {
|
||||
library.getLinks().forEach((name, link) -> {
|
||||
library.getLinks().forEach((name, links) -> links.forEach((link) -> {
|
||||
URI uri;
|
||||
try {
|
||||
uri = new URI(link.url(library));
|
||||
|
|
@ -70,7 +70,7 @@ public abstract class CheckLinks extends DefaultTask {
|
|||
catch (URISyntaxException ex) {
|
||||
throw new RuntimeException(ex);
|
||||
}
|
||||
});
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ public class Library {
|
|||
|
||||
private final String linkRootName;
|
||||
|
||||
private final Map<String, Link> links;
|
||||
private final Map<String, List<Link>> links;
|
||||
|
||||
/**
|
||||
* Create a new {@code Library} with the given {@code name}, {@code version}, and
|
||||
|
|
@ -89,7 +89,7 @@ public class Library {
|
|||
*/
|
||||
public Library(String name, String calendarName, LibraryVersion version, List<Group> groups,
|
||||
List<ProhibitedVersion> prohibitedVersions, boolean considerSnapshots, VersionAlignment versionAlignment,
|
||||
String alignsWithBom, String linkRootName, Map<String, Link> links) {
|
||||
String alignsWithBom, String linkRootName, Map<String, List<Link>> links) {
|
||||
this.name = name;
|
||||
this.calendarName = (calendarName != null) ? calendarName : name;
|
||||
this.version = version;
|
||||
|
|
@ -148,16 +148,22 @@ public class Library {
|
|||
return this.alignsWithBom;
|
||||
}
|
||||
|
||||
public Map<String, Link> getLinks() {
|
||||
public Map<String, List<Link>> getLinks() {
|
||||
return this.links;
|
||||
}
|
||||
|
||||
public String getLinkUrl(String name) {
|
||||
Link link = getLink(name);
|
||||
return (link != null) ? link.url(this) : null;
|
||||
List<Link> links = getLinks(name);
|
||||
if (links == null || links.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
if (links.size() > 1) {
|
||||
throw new IllegalStateException("Expected a single '%s' link for %s".formatted(name, getName()));
|
||||
}
|
||||
return links.get(0).url(this);
|
||||
}
|
||||
|
||||
public Link getLink(String name) {
|
||||
public List<Link> getLinks(String name) {
|
||||
return this.links.get(name);
|
||||
}
|
||||
|
||||
|
|
@ -524,7 +530,7 @@ public class Library {
|
|||
|
||||
}
|
||||
|
||||
public record Link(Function<LibraryVersion, String> factory, List<String> packages) {
|
||||
public record Link(String rootName, Function<LibraryVersion, String> factory, List<String> packages) {
|
||||
|
||||
private static final Pattern PACKAGE_EXPAND = Pattern.compile("^(.*)\\[(.*)\\]$");
|
||||
|
||||
|
|
|
|||
|
|
@ -28,7 +28,6 @@ import org.gradle.api.artifacts.repositories.MavenArtifactRepository;
|
|||
|
||||
import org.springframework.boot.build.bom.BomExtension;
|
||||
import org.springframework.boot.build.bom.Library.LibraryVersion;
|
||||
import org.springframework.boot.build.bom.Library.Link;
|
||||
import org.springframework.boot.build.bom.bomr.github.Issue;
|
||||
import org.springframework.boot.build.properties.BuildProperties;
|
||||
|
||||
|
|
@ -77,7 +76,7 @@ public abstract class UpgradeBom extends UpgradeDependencies {
|
|||
@Override
|
||||
protected String issueBody(Upgrade upgrade, Issue existingUpgrade) {
|
||||
LibraryVersion upgradeVersion = new LibraryVersion(upgrade.getVersion());
|
||||
String releaseNotesLink = getReleaseNotesLink(upgrade, upgradeVersion);
|
||||
String releaseNotesLink = upgrade.getLibrary().getLinkUrl("releaseNotes");
|
||||
List<String> lines = new ArrayList<>();
|
||||
String description = upgrade.getLibrary().getName() + " " + upgradeVersion;
|
||||
if (releaseNotesLink != null) {
|
||||
|
|
@ -92,9 +91,4 @@ public abstract class UpgradeBom extends UpgradeDependencies {
|
|||
return String.join("\\r\\n\\r\\n", lines);
|
||||
}
|
||||
|
||||
private String getReleaseNotesLink(Upgrade upgrade, LibraryVersion upgradeVersion) {
|
||||
Link releaseNotesLink = upgrade.getLibrary().getLink("releaseNotes");
|
||||
return (releaseNotesLink != null) ? releaseNotesLink.url(upgradeVersion) : null;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue