Skip gracefully dependency versions that cannot be parsed.

See #159
This commit is contained in:
Mark Paluch
2021-01-12 13:50:27 +01:00
parent fdde67d4ae
commit 19c10e053a
3 changed files with 34 additions and 15 deletions

View File

@@ -108,15 +108,15 @@ public class DependencyCommands extends TimedCommand {
public void upgrade(@CliOption(key = "", mandatory = true) TrainIteration iteration) public void upgrade(@CliOption(key = "", mandatory = true) TrainIteration iteration)
throws IOException, InterruptedException { throws IOException, InterruptedException {
git.checkout(iteration.getTrain(), false);
logger.log(iteration, "Applying dependency upgrades to Spring Data Build"); logger.log(iteration, "Applying dependency upgrades to Spring Data Build");
ModuleIteration module = iteration.getModule(Projects.BUILD); ModuleIteration module = iteration.getModule(Projects.BUILD);
DependencyVersions dependencyVersions = loadDependencyUpgrades(module); DependencyVersions dependencyVersions = loadDependencyUpgrades(module);
operations.createUpgradeTickets(module, dependencyVersions); git.checkout(iteration.getTrain(), false);
Tickets tickets = operations.upgradeDependencies(module, dependencyVersions);
Tickets tickets = operations.createUpgradeTickets(module, dependencyVersions);
operations.upgradeDependencies(tickets, module, dependencyVersions);
git.push(module); git.push(module);

View File

@@ -34,6 +34,7 @@ import java.util.function.Function;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.springframework.data.release.CliComponent; import org.springframework.data.release.CliComponent;
import org.springframework.data.release.build.Pom; import org.springframework.data.release.build.Pom;
@@ -112,8 +113,9 @@ public class DependencyOperations {
* *
* @param module * @param module
* @param dependencyVersions * @param dependencyVersions
* @return
*/ */
public void createUpgradeTickets(ModuleIteration module, DependencyVersions dependencyVersions) { public Tickets createUpgradeTickets(ModuleIteration module, DependencyVersions dependencyVersions) {
Project project = module.getProject(); Project project = module.getProject();
DependencyVersions upgrades = getDependencyUpgradesToApply(project, dependencyVersions); DependencyVersions upgrades = getDependencyUpgradesToApply(project, dependencyVersions);
@@ -121,6 +123,8 @@ public class DependencyOperations {
IssueTracker tracker = this.tracker.getRequiredPluginFor(project); IssueTracker tracker = this.tracker.getRequiredPluginFor(project);
Tickets tickets = tracker.getTicketsFor(module); Tickets tickets = tracker.getTicketsFor(module);
List<Ticket> upgradeTickets = new ArrayList<>();
upgrades.forEach((dependency, dependencyVersion) -> { upgrades.forEach((dependency, dependencyVersion) -> {
String upgradeTicketSummary = getUpgradeTicketSummary(dependency, dependencyVersion); String upgradeTicketSummary = getUpgradeTicketSummary(dependency, dependencyVersion);
@@ -128,24 +132,33 @@ public class DependencyOperations {
if (upgradeTicket.isPresent()) { if (upgradeTicket.isPresent()) {
logger.log(project, "Found upgrade ticket %s", upgradeTicket.get()); logger.log(project, "Found upgrade ticket %s", upgradeTicket.get());
upgradeTicket.ifPresent(it -> {
tracker.assignTicketToMe(project, it);
upgradeTickets.add(it);
});
} else { } else {
logger.log(module, "Creating upgrade ticket for %s", upgradeTicketSummary); logger.log(module, "Creating upgrade ticket for %s", upgradeTicketSummary);
tracker.createTicket(module, upgradeTicketSummary, IssueTracker.TicketType.DependencyUpgrade); Ticket ticket = tracker.createTicket(module, upgradeTicketSummary, IssueTracker.TicketType.DependencyUpgrade,
true);
upgradeTickets.add(ticket);
} }
}); });
// flush cache // flush cache
tracker.reset(); tracker.reset();
return new Tickets(upgradeTickets);
} }
/** /**
* Verifies dependencies to upgrade, applies the upgrade, creates a commit. * Verifies dependencies to upgrade, applies the upgrade, creates a commit.
* *
* @param tickets
* @param module * @param module
* @param dependencyVersions * @param dependencyVersions
*/ */
public Tickets upgradeDependencies(ModuleIteration module, DependencyVersions dependencyVersions) { public Tickets upgradeDependencies(Tickets tickets, ModuleIteration module, DependencyVersions dependencyVersions) {
Project project = module.getProject(); Project project = module.getProject();
DependencyVersions upgrades = getDependencyUpgradesToApply(project, dependencyVersions); DependencyVersions upgrades = getDependencyUpgradesToApply(project, dependencyVersions);
@@ -155,15 +168,12 @@ public class DependencyOperations {
logger.log(module, "No dependency upgrades to apply"); logger.log(module, "No dependency upgrades to apply");
} }
IssueTracker tracker = this.tracker.getRequiredPluginFor(project);
Tickets tickets = tracker.getTicketsFor(module);
List<Ticket> ticketsToClose = new ArrayList<>(); List<Ticket> ticketsToClose = new ArrayList<>();
upgrades.forEach((dependency, dependencyVersion) -> { upgrades.forEach((dependency, dependencyVersion) -> {
String upgradeTicketSummary = getUpgradeTicketSummary(dependency, dependencyVersion); String upgradeTicketSummary = getUpgradeTicketSummary(dependency, dependencyVersion);
Ticket upgradeTicket = getDependencyUpgradeTicket(tickets, upgradeTicketSummary).get(); Ticket upgradeTicket = getDependencyUpgradeTicket(tickets, upgradeTicketSummary).get();
tracker.assignTicketToMe(project, upgradeTicket);
String versionProperty = dependencies.getVersionPropertyFor(dependency); String versionProperty = dependencies.getVersionPropertyFor(dependency);
File pom = getPomFile(project); File pom = getPomFile(project);
@@ -340,7 +350,15 @@ public class DependencyOperations {
MavenMetadata metadata = io.read(MavenMetadata.class); MavenMetadata metadata = io.read(MavenMetadata.class);
return metadata.getVersions().stream().filter(dependency::shouldInclude).map(DependencyVersion::of).map(it -> { return metadata.getVersions().stream().filter(dependency::shouldInclude).flatMap(s -> {
try {
return Stream.of(DependencyVersion.of(s));
} catch (Exception e) {
logger.log(dependency.toString(), "Cannot parse dependency version " + s);
return Stream.empty();
}
}).map(it -> {
if (creationDates.containsKey(it.getIdentifier())) { if (creationDates.containsKey(it.getIdentifier())) {
return it.withCreatedAt(creationDates.get(it.getIdentifier())); return it.withCreatedAt(creationDates.get(it.getIdentifier()));
@@ -351,7 +369,7 @@ public class DependencyOperations {
}).collect(Collectors.toList()); }).collect(Collectors.toList());
} catch (Exception o_O) { } catch (Exception o_O) {
throw new RuntimeException(o_O); throw new RuntimeException(String.format("Cannot determine available versions for %s", dependency), o_O);
} }
} }

View File

@@ -90,10 +90,11 @@ class DependencyVersion implements Comparable<DependencyVersion> {
Version version = null; Version version = null;
String modifier; String modifier;
String counter; String counter;
String versionString = versionMatcher.group(1);
try { try {
version = Version.parse(versionMatcher.group(1)); version = Version.parse(versionString);
} catch (NumberFormatException e) { } catch (RuntimeException e) {
throw new IllegalArgumentException(String.format("Cannot parse version number %s", versionString), e);
} }
modifier = versionMatcher.group(2); modifier = versionMatcher.group(2);