Merge branch '4.0.x' into 4.1.x

Closes gh-51946
This commit is contained in:
Andy Wilkinson
2026-10-05 10:18:30 +01:00
3 changed files with 33 additions and 10 deletions
@@ -16,7 +16,11 @@
package org.springframework.boot.build.bom.bomr;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Map;
import java.util.function.BiFunction;
@@ -36,6 +40,7 @@ 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;
import org.springframework.boot.build.properties.BuildType;
import org.springframework.util.Assert;
/**
* A {@link Task} to move to snapshot dependencies.
@@ -89,7 +94,11 @@ public abstract class MoveToSnapshots extends UpgradeDependencies {
private BiFunction<Library, DependencyVersion, VersionOption> createOpenSourceVersionOptionResolver(
Milestone milestone) {
Map<String, List<Release>> scheduledReleases = getScheduledOpenSourceReleases(milestone);
OffsetDateTime releaseDate = (milestone.getDueOn() != null) ? milestone.getDueOn() : releaseTrainDate();
Assert.state(releaseDate != null,
"No release date available. Schedule the %s milestone or use --release-train to provide a release date"
.formatted(milestone.getName()));
Map<String, List<Release>> scheduledReleases = getScheduledOpenSourceReleases(releaseDate);
BiFunction<Library, DependencyVersion, VersionOption> resolver = super.createVersionOptionResolver(milestone);
return (library, dependencyVersion) -> {
VersionOption versionOption = resolver.apply(library, dependencyVersion);
@@ -106,16 +115,23 @@ public abstract class MoveToSnapshots extends UpgradeDependencies {
}
if (logger.isInfoEnabled()) {
logger.info("Ignoring {}. No release of {} scheduled before {}", dependencyVersion,
library.getName(), milestone.getDueOn());
library.getName(), releaseDate);
}
}
return null;
};
}
private Map<String, List<Release>> getScheduledOpenSourceReleases(Milestone milestone) {
private OffsetDateTime releaseTrainDate() {
return getReleaseTrain()
.map((releaseTrain) -> LocalDate.parse(releaseTrain, DateTimeFormatter.ofPattern("yyyy.MM.dd")))
.map((date) -> OffsetDateTime.of(date, LocalTime.of(23, 59, 59), ZoneOffset.UTC))
.getOrNull();
}
private Map<String, List<Release>> getScheduledOpenSourceReleases(OffsetDateTime releaseDate) {
ReleaseSchedule releaseSchedule = new ReleaseSchedule();
return releaseSchedule.releasesBetween(OffsetDateTime.now(), milestone.getDueOn());
return releaseSchedule.releasesBetween(OffsetDateTime.now(), releaseDate);
}
}
@@ -88,4 +88,12 @@ public abstract class UpgradeBom extends UpgradeDependencies {
System.out.println();
}
@Override
protected VersionResolver getVersionResolver() {
String releaseTrain = getReleaseTrain().getOrNull();
return (releaseTrain != null)
? new ReleaseTrainVersionResolver(createGitHub("bomr.github.release-train-token"), releaseTrain)
: super.getVersionResolver();
}
}
@@ -43,6 +43,7 @@ import org.gradle.api.internal.tasks.userinput.UserInputHandler;
import org.gradle.api.provider.ListProperty;
import org.gradle.api.provider.Property;
import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.Internal;
import org.gradle.api.tasks.Optional;
import org.gradle.api.tasks.TaskAction;
import org.gradle.api.tasks.TaskExecutionException;
@@ -215,7 +216,7 @@ public abstract class UpgradeDependencies extends DefaultTask {
return issueLabels;
}
private GitHub createGitHub(String passwordProperty) {
protected GitHub createGitHub(String passwordProperty) {
Properties bomrProperties = new Properties();
try (Reader reader = new FileReader(new File(System.getProperty("user.home"), ".bomr.properties"))) {
bomrProperties.load(reader);
@@ -268,11 +269,9 @@ public abstract class UpgradeDependencies extends DefaultTask {
return new MultithreadedLibraryUpdateResolver(getThreads().get(), libraryResolver);
}
private VersionResolver getVersionResolver() {
String releaseTrain = getReleaseTrain().getOrNull();
return (releaseTrain != null)
? new ReleaseTrainVersionResolver(createGitHub("bomr.github.release-train-token"), releaseTrain)
: new MavenMetadataVersionResolver(getRepositories());
@Internal
protected VersionResolver getVersionResolver() {
return new MavenMetadataVersionResolver(getRepositories());
}
private Collection<MavenArtifactRepository> getRepositories() {