Skip to content

Commit cc0aa83

Browse files
committed
Add support for per-library upgrade policies
Closes gh-46369
1 parent ea8af9a commit cc0aa83

File tree

8 files changed

+42
-18
lines changed

8 files changed

+42
-18
lines changed

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

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,9 +111,9 @@ public void library(String name, String version, Action<LibraryHandler> action)
111111
action.execute(libraryHandler);
112112
LibraryVersion libraryVersion = new LibraryVersion(DependencyVersion.parse(libraryHandler.version));
113113
addLibrary(new Library(name, libraryHandler.calendarName, libraryVersion, libraryHandler.groups,
114-
libraryHandler.prohibitedVersions, libraryHandler.considerSnapshots, versionAlignment(libraryHandler),
115-
libraryHandler.alignWith.dependencyManagementDeclaredIn, libraryHandler.linkRootName,
116-
libraryHandler.links));
114+
libraryHandler.upgradePolicy, libraryHandler.prohibitedVersions, libraryHandler.considerSnapshots,
115+
versionAlignment(libraryHandler), libraryHandler.alignWith.dependencyManagementDeclaredIn,
116+
libraryHandler.linkRootName, libraryHandler.links));
117117
}
118118

119119
private VersionAlignment versionAlignment(LibraryHandler libraryHandler) {
@@ -196,6 +196,8 @@ public static class LibraryHandler {
196196

197197
private final List<Group> groups = new ArrayList<>();
198198

199+
private UpgradePolicy upgradePolicy;
200+
199201
private final List<ProhibitedVersion> prohibitedVersions = new ArrayList<>();
200202

201203
private final AlignWithHandler alignWith;
@@ -236,6 +238,10 @@ public void group(String id, Action<GroupHandler> action) {
236238
.add(new Group(groupHandler.id, groupHandler.modules, groupHandler.plugins, groupHandler.imports));
237239
}
238240

241+
public void setUpgradePolicy(UpgradePolicy upgradePolicy) {
242+
this.upgradePolicy = upgradePolicy;
243+
}
244+
239245
public void prohibit(Action<ProhibitedHandler> action) {
240246
ProhibitedHandler handler = new ProhibitedHandler();
241247
action.execute(handler);

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

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ public class Library {
6666

6767
private final String versionProperty;
6868

69+
private final UpgradePolicy upgradePolicy;
70+
6971
private final List<ProhibitedVersion> prohibitedVersions;
7072

7173
private final boolean considerSnapshots;
@@ -86,6 +88,8 @@ public class Library {
8688
* be {@code null} in which case the {@code name} is used.
8789
* @param version version of the library
8890
* @param groups groups in the library
91+
* @param upgradePolicy the upgrade policy of the library, or {@code null} to use the
92+
* containing bom's policy
8993
* @param prohibitedVersions version of the library that are prohibited
9094
* @param considerSnapshots whether to consider snapshots
9195
* @param versionAlignment version alignment, if any, for the library
@@ -96,14 +100,16 @@ public class Library {
96100
* @param links a list of HTTP links relevant to the library
97101
*/
98102
public Library(String name, String calendarName, LibraryVersion version, List<Group> groups,
99-
List<ProhibitedVersion> prohibitedVersions, boolean considerSnapshots, VersionAlignment versionAlignment,
100-
String alignsWithBom, String linkRootName, Map<String, List<Link>> links) {
103+
UpgradePolicy upgradePolicy, List<ProhibitedVersion> prohibitedVersions, boolean considerSnapshots,
104+
VersionAlignment versionAlignment, String alignsWithBom, String linkRootName,
105+
Map<String, List<Link>> links) {
101106
this.name = name;
102107
this.calendarName = (calendarName != null) ? calendarName : name;
103108
this.version = version;
104109
this.groups = groups;
105110
this.versionProperty = "Spring Boot".equals(name) ? null
106111
: name.toLowerCase(Locale.ENGLISH).replace(' ', '-') + ".version";
112+
this.upgradePolicy = upgradePolicy;
107113
this.prohibitedVersions = prohibitedVersions;
108114
this.considerSnapshots = considerSnapshots;
109115
this.versionAlignment = versionAlignment;
@@ -136,6 +142,10 @@ public String getVersionProperty() {
136142
return this.versionProperty;
137143
}
138144

145+
public UpgradePolicy getUpgradePolicy() {
146+
return this.upgradePolicy;
147+
}
148+
139149
public List<ProhibitedVersion> getProhibitedVersions() {
140150
return this.prohibitedVersions;
141151
}
@@ -180,8 +190,9 @@ public String getNameAndVersion() {
180190
}
181191

182192
public Library withVersion(LibraryVersion version) {
183-
return new Library(this.name, this.calendarName, version, this.groups, this.prohibitedVersions,
184-
this.considerSnapshots, this.versionAlignment, this.alignsWithBom, this.linkRootName, this.links);
193+
return new Library(this.name, this.calendarName, version, this.groups, this.upgradePolicy,
194+
this.prohibitedVersions, this.considerSnapshots, this.versionAlignment, this.alignsWithBom,
195+
this.linkRootName, this.links);
185196
}
186197

187198
/**

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848

4949
import org.springframework.boot.build.bom.BomExtension;
5050
import org.springframework.boot.build.bom.Library;
51+
import org.springframework.boot.build.bom.UpgradePolicy;
5152
import org.springframework.boot.build.bom.bomr.github.GitHub;
5253
import org.springframework.boot.build.bom.bomr.github.GitHubRepository;
5354
import org.springframework.boot.build.bom.bomr.github.Issue;
@@ -255,7 +256,11 @@ protected List<BiPredicate<Library, DependencyVersion>> determineUpdatePredicate
255256
}
256257

257258
private boolean compliesWithUpgradePolicy(Library library, DependencyVersion candidate) {
258-
return this.bom.getUpgrade().getPolicy().test(candidate, library.getVersion().getVersion());
259+
UpgradePolicy upgradePolicy = library.getUpgradePolicy();
260+
if (upgradePolicy == null) {
261+
upgradePolicy = this.bom.getUpgrade().getPolicy();
262+
}
263+
return upgradePolicy.test(candidate, library.getVersion().getVersion());
259264
}
260265

261266
private boolean isAnUpgrade(Library library, DependencyVersion candidate) {

buildSrc/src/test/java/org/springframework/boot/build/antora/AntoraAsciidocAttributesTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ private Library mockLibrary(Map<String, List<Link>> links) {
237237
VersionAlignment versionAlignment = null;
238238
String alignsWithBom = null;
239239
String linkRootName = null;
240-
Library library = new Library(name, calendarName, version, groups, prohibitedVersion, considerSnapshots,
240+
Library library = new Library(name, calendarName, version, groups, null, prohibitedVersion, considerSnapshots,
241241
versionAlignment, alignsWithBom, linkRootName, links);
242242
return library;
243243
}

buildSrc/src/test/java/org/springframework/boot/build/bom/LibraryTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ void getLinkRootNameWhenNoneSpecified() {
5050
String alignsWithBom = null;
5151
String linkRootName = null;
5252
Map<String, List<Link>> links = Collections.emptyMap();
53-
Library library = new Library(name, calendarName, version, groups, prohibitedVersion, considerSnapshots,
53+
Library library = new Library(name, calendarName, version, groups, null, prohibitedVersion, considerSnapshots,
5454
versionAlignment, alignsWithBom, linkRootName, links);
5555
assertThat(library.getLinkRootName()).isEqualTo("spring-framework");
5656
}
@@ -67,7 +67,7 @@ void getLinkRootNameWhenSpecified() {
6767
String alignsWithBom = null;
6868
String linkRootName = "spring-data";
6969
Map<String, List<Link>> links = Collections.emptyMap();
70-
Library library = new Library(name, calendarName, version, groups, prohibitedVersion, considerSnapshots,
70+
Library library = new Library(name, calendarName, version, groups, null, prohibitedVersion, considerSnapshots,
7171
versionAlignment, alignsWithBom, linkRootName, links);
7272
assertThat(library.getLinkRootName()).isEqualTo("spring-data");
7373
}

buildSrc/src/test/java/org/springframework/boot/build/bom/bomr/InteractiveUpgradeResolverTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ void resolveUpgradeUpdateVersionNumberInLibrary() {
4848
List<Library> libraries = new ArrayList<>();
4949
DependencyVersion version = DependencyVersion.parse("1.0.0");
5050
LibraryVersion libraryVersion = new LibraryVersion(version);
51-
Library library = new Library("test", null, libraryVersion, null, null, false, null, null, null, null);
51+
Library library = new Library("test", null, libraryVersion, null, null, null, false, null, null, null, null);
5252
libraries.add(library);
5353
List<Library> librariesToUpgrade = new ArrayList<>();
5454
librariesToUpgrade.add(library);

buildSrc/src/test/java/org/springframework/boot/build/bom/bomr/UpgradeApplicatorTests.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ void whenUpgradeIsAppliedToLibraryWithVersionThenBomIsUpdated() throws IOExcepti
5555
new UpgradeApplicator(bom.toPath(), gradleProperties.toPath()).apply(
5656
new Upgrade(
5757
new Library("ActiveMQ", null, new LibraryVersion(DependencyVersion.parse("5.15.11")), null,
58-
null, false, null, null, null, Collections.emptyMap()),
58+
null, null, false, null, null, null, Collections.emptyMap()),
5959
DependencyVersion.parse("5.16")));
6060
String bomContents = Files.readString(bom.toPath());
6161
assertThat(bomContents).hasSize(originalContents.length() - 3);
@@ -67,9 +67,11 @@ void whenUpgradeIsAppliedToLibraryWithVersionPropertyThenGradlePropertiesIsUpdat
6767
FileCopyUtils.copy(new File("src/test/resources/bom.gradle"), bom);
6868
File gradleProperties = new File(this.temp, "gradle.properties");
6969
FileCopyUtils.copy(new File("src/test/resources/gradle.properties"), gradleProperties);
70-
new UpgradeApplicator(bom.toPath(), gradleProperties.toPath())
71-
.apply(new Upgrade(new Library("Kotlin", null, new LibraryVersion(DependencyVersion.parse("1.3.70")), null,
72-
null, false, null, null, null, Collections.emptyMap()), DependencyVersion.parse("1.4")));
70+
new UpgradeApplicator(bom.toPath(), gradleProperties.toPath()).apply(
71+
new Upgrade(
72+
new Library("Kotlin", null, new LibraryVersion(DependencyVersion.parse("1.3.70")), null, null,
73+
null, false, null, null, null, Collections.emptyMap()),
74+
DependencyVersion.parse("1.4")));
7375
Properties properties = new Properties();
7476
try (InputStream in = new FileInputStream(gradleProperties)) {
7577
properties.load(in);

buildSrc/src/test/java/org/springframework/boot/build/bom/bomr/UpgradeTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class UpgradeTests {
3333

3434
@Test
3535
void createToRelease() {
36-
Library from = new Library("Test", null, new LibraryVersion(DependencyVersion.parse("1.0.0")), null, null,
36+
Library from = new Library("Test", null, new LibraryVersion(DependencyVersion.parse("1.0.0")), null, null, null,
3737
false, null, null, null, null);
3838
Upgrade upgrade = new Upgrade(from, DependencyVersion.parse("1.0.1"));
3939
assertThat(upgrade.from().getNameAndVersion()).isEqualTo("Test 1.0.0");
@@ -43,7 +43,7 @@ void createToRelease() {
4343

4444
@Test
4545
void createToSnapshot() {
46-
Library from = new Library("Test", null, new LibraryVersion(DependencyVersion.parse("1.0.0")), null, null,
46+
Library from = new Library("Test", null, new LibraryVersion(DependencyVersion.parse("1.0.0")), null, null, null,
4747
false, null, null, null, null);
4848
Upgrade upgrade = new Upgrade(from, DependencyVersion.parse("1.0.1-SNAPSHOT"));
4949
assertThat(upgrade.from().getNameAndVersion()).isEqualTo("Test 1.0.0");

0 commit comments

Comments
 (0)