diff --git a/buildSrc/src/main/java/org/springframework/boot/build/bom/Library.java b/buildSrc/src/main/java/org/springframework/boot/build/bom/Library.java index f8598f46697..23958ee4183 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/bom/Library.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/bom/Library.java @@ -146,8 +146,12 @@ public class Library { } public Map getLinks() { + return getLinks(this.version); + } + + public Map getLinks(LibraryVersion version) { Map links = new TreeMap<>(); - this.links.forEach((name, linkFactory) -> links.put(name, linkFactory.apply(this.version))); + this.links.forEach((name, linkFactory) -> links.put(name, linkFactory.apply(version))); return Collections.unmodifiableMap(links); } diff --git a/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/MoveToSnapshots.java b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/MoveToSnapshots.java index 7bd03366c6d..ff61db29d95 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/MoveToSnapshots.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/MoveToSnapshots.java @@ -17,6 +17,7 @@ package org.springframework.boot.build.bom.bomr; import java.time.OffsetDateTime; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.function.BiPredicate; @@ -32,6 +33,7 @@ import org.slf4j.LoggerFactory; import org.springframework.boot.build.bom.BomExtension; import org.springframework.boot.build.bom.Library; import org.springframework.boot.build.bom.bomr.ReleaseSchedule.Release; +import org.springframework.boot.build.bom.bomr.github.Issue; import org.springframework.boot.build.bom.bomr.github.Milestone; import org.springframework.boot.build.bom.bomr.version.DependencyVersion; import org.springframework.boot.build.properties.BuildProperties; @@ -67,20 +69,33 @@ public abstract class MoveToSnapshots extends UpgradeDependencies { @Override protected String issueTitle(Upgrade upgrade) { + return "Upgrade to " + description(upgrade); + } + + private String description(Upgrade upgrade) { String snapshotVersion = upgrade.getVersion().toString(); String releaseVersion = snapshotVersion.substring(0, snapshotVersion.length() - "-SNAPSHOT".length()); - return "Upgrade to " + upgrade.getLibrary().getName() + " " + releaseVersion; + return upgrade.getLibrary().getName() + " " + releaseVersion; + } + + @Override + protected String issueBody(Upgrade upgrade, Issue existingUpgrade) { + String releaseNotes = upgrade.getLibrary().getLinks().get("releaseNotes"); + List lines = new ArrayList<>(); + String description = description(upgrade); + if (releaseNotes != null) { + lines.add("Upgrade to [%s](%s).".formatted(description, releaseNotes)); + } + lines.add("Upgrade to %s.".formatted(description)); + if (existingUpgrade != null) { + lines.add("Supersedes #" + existingUpgrade.getNumber()); + } + return String.join("\\r\\n\\r\\n", lines); } @Override protected String commitMessage(Upgrade upgrade, int issueNumber) { - return "Start building against " + upgrade.getLibrary().getName() + " " + releaseVersion(upgrade) + " snapshots" - + "\n\nSee gh-" + issueNumber; - } - - private String releaseVersion(Upgrade upgrade) { - String snapshotVersion = upgrade.getVersion().toString(); - return snapshotVersion.substring(0, snapshotVersion.length() - "-SNAPSHOT".length()); + return "Start building against " + description(upgrade) + " snapshots" + "\n\nSee gh-" + issueNumber; } @Override diff --git a/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/UpgradeBom.java b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/UpgradeBom.java index 80052ef1209..cfa3c687029 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/UpgradeBom.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/UpgradeBom.java @@ -16,6 +16,9 @@ package org.springframework.boot.build.bom.bomr; +import java.util.ArrayList; +import java.util.List; + import javax.inject.Inject; import org.gradle.api.Task; @@ -24,6 +27,8 @@ import org.gradle.api.artifacts.dsl.RepositoryHandler; 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.bomr.github.Issue; import org.springframework.boot.build.properties.BuildProperties; /** @@ -68,4 +73,23 @@ public abstract class UpgradeBom extends UpgradeDependencies { return issueTitle(upgrade) + "\n\nCloses gh-" + issueNumber; } + @Override + protected String issueBody(Upgrade upgrade, Issue existingUpgrade) { + String releaseNotes = upgrade.getLibrary() + .getLinks(new LibraryVersion(upgrade.getVersion())) + .get("releaseNotes"); + List lines = new ArrayList<>(); + String description = upgrade.getLibrary().getName() + " " + upgrade.getVersion(); + if (releaseNotes != null) { + lines.add("Upgrade to [%s](%s).".formatted(description, releaseNotes)); + } + else { + lines.add("Upgrade to %s.".formatted(description)); + } + if (existingUpgrade != null) { + lines.add("Supersedes #" + existingUpgrade.getNumber()); + } + return String.join("\\r\\n\\r\\n", lines); + } + } diff --git a/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/UpgradeDependencies.java b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/UpgradeDependencies.java index 1b7cb3f8e6b..5d236b2e1fb 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/UpgradeDependencies.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/UpgradeDependencies.java @@ -119,11 +119,12 @@ public abstract class UpgradeDependencies extends DefaultTask { System.out.println(""); for (Upgrade upgrade : upgrades) { System.out.println(upgrade.getLibrary().getName() + " " + upgrade.getVersion()); - String title = issueTitle(upgrade); Issue existingUpgradeIssue = findExistingUpgradeIssue(existingUpgradeIssues, upgrade); try { Path modified = this.upgradeApplicator.apply(upgrade); - int issueNumber = getOrOpenUpgradeIssue(repository, issueLabels, milestone, title, + String title = issueTitle(upgrade); + String body = issueBody(upgrade, existingUpgradeIssue); + int issueNumber = getOrOpenUpgradeIssue(repository, issueLabels, milestone, title, body, existingUpgradeIssue); if (existingUpgradeIssue != null && existingUpgradeIssue.getState() == Issue.State.CLOSED) { existingUpgradeIssue.label(Arrays.asList("type: task", "status: superseded")); @@ -151,11 +152,10 @@ public abstract class UpgradeDependencies extends DefaultTask { } private int getOrOpenUpgradeIssue(GitHubRepository repository, List issueLabels, Milestone milestone, - String title, Issue existingUpgradeIssue) { + String title, String body, Issue existingUpgradeIssue) { if (existingUpgradeIssue != null && existingUpgradeIssue.getState() == Issue.State.OPEN) { return existingUpgradeIssue.getNumber(); } - String body = (existingUpgradeIssue != null) ? "Supersedes #" + existingUpgradeIssue.getNumber() : ""; return repository.openIssue(title, body, issueLabels, milestone); } @@ -289,4 +289,6 @@ public abstract class UpgradeDependencies extends DefaultTask { protected abstract String commitMessage(Upgrade upgrade, int issueNumber); + protected abstract String issueBody(Upgrade upgrade, Issue existingUpgrade); + }