From 6b84c18cc718f0a8f42c579ead51a2bec0122e65 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Tue, 7 Mar 2017 15:32:33 +0100 Subject: [PATCH] Fixed boot support --- .../cloud/release/internal/PomUpdater.java | 22 +++++++++++++------ .../release/internal/ProjectUpdater.java | 20 ++++++++++++++--- .../release/internal/ReleaserProperties.java | 21 ++++++++++++++++++ .../release/internal/SCReleasePomParser.java | 10 ++++++++- .../cloud/release/internal/Versions.java | 11 +++++++++- .../cloud/release/internal/VersionsTests.java | 5 ++++- 6 files changed, 76 insertions(+), 13 deletions(-) diff --git a/releaser-core/src/main/java/org/springframework/cloud/release/internal/PomUpdater.java b/releaser-core/src/main/java/org/springframework/cloud/release/internal/PomUpdater.java index 5ce42034..32b0ab2a 100644 --- a/releaser-core/src/main/java/org/springframework/cloud/release/internal/PomUpdater.java +++ b/releaser-core/src/main/java/org/springframework/cloud/release/internal/PomUpdater.java @@ -127,18 +127,20 @@ class PomUpdater { } String parentGroupId = model.getParent().getGroupId(); String parentArtifactId = model.getParent().getArtifactId(); + log.debug("Searching for a version of parent [{}:{}]", parentGroupId, parentArtifactId); String oldVersion = model.getParent().getVersion(); String version = versions.versionForProject(parentArtifactId); + log.debug("Found version is [{}]", version); if (StringUtils.isEmpty(version)) { if (StringUtils.hasText(model.getParent().getRelativePath())) { version = versions.versionForProject(rootProjectName); } else { - log.warn("There is no info on the [{}] version", model.getArtifactId()); + log.warn("There is no info on the [{}:{}] version", parentGroupId, parentArtifactId); return changes; } } if (oldVersion.equals(version)) { - log.info("Won't update the version of [{}]:[{}] since you're already using the proper one", parentGroupId, parentArtifactId); + log.debug("Won't update the version of [{}:{}] since you're already using the proper one", parentGroupId, parentArtifactId); return changes; } log.info("Setting version of parent [{}] to [{}] for module [{}]", parentArtifactId, @@ -153,14 +155,16 @@ class PomUpdater { List changes = new ArrayList<>(sourceChanges); String groupId = groupId(model); String artifactId = model.getArtifactId(); + log.debug("Searching for a version [{}:{}]", groupId, artifactId); String oldVersion = model.getVersion(); String version = versions.versionForProject(rootProjectName); + log.debug("Found version is [{}]", version); if (StringUtils.isEmpty(version) || StringUtils.isEmpty(model.getVersion())) { - log.warn("There was no version set for project [{}], skipping version setting for module [{}]", rootProjectName, model.getArtifactId()); + log.debug("There was no version set for project [{}], skipping version setting for module [{}]", rootProjectName, model.getArtifactId()); return changes; } if (oldVersion.equals(version)) { - log.info("Won't update the version of [{}]:[{}] since you're already using the proper one", groupId, artifactId); + log.debug("Won't update the version of [{}]:[{}] since you're already using the proper one", groupId, artifactId); return changes; } log.info("Setting [{}] version to [{}]", artifactId, version); @@ -223,13 +227,13 @@ class PomWriter { for (VersionChange versionChange : wrapper.sourceChanges) { changer.apply(versionChange); } - log.info("Applying properties changes to the pom [{}]", pom); + log.debug("Applying properties changes to the pom [{}]", pom); new PropertyVersionChanger(wrapper, versions, parsedPom, loggerToMavenLog) .apply(null); try (BufferedWriter bw = new BufferedWriter(new FileWriter(pom))) { bw.write(input.toString()); } - log.info("Flushed changes to the pom file [{}]", pom); + log.debug("Flushed changes to the pom file [{}]", pom); } catch (Exception e) { log.error("Exception occurred while trying to apply changes to the POM", e); } @@ -272,7 +276,11 @@ class PropertyVersionChanger extends AbstractVersionChanger { .filter(project -> { Properties properties = getModel().getProperties(); String projectVersionKey = propertyName(project); - return properties.containsKey(projectVersionKey); + if (!properties.containsKey(projectVersionKey)) { + return false; + } + String version = properties.getProperty(projectVersionKey); + return !version.equals(project.version); }) .forEach(project -> { String propertyName = propertyName(project); diff --git a/releaser-core/src/main/java/org/springframework/cloud/release/internal/ProjectUpdater.java b/releaser-core/src/main/java/org/springframework/cloud/release/internal/ProjectUpdater.java index 6f48dd66..0bb3b00c 100644 --- a/releaser-core/src/main/java/org/springframework/cloud/release/internal/ProjectUpdater.java +++ b/releaser-core/src/main/java/org/springframework/cloud/release/internal/ProjectUpdater.java @@ -44,13 +44,15 @@ public class ProjectUpdater { this.gitProjectRepo.checkout(clonedScRelease, this.properties.getBranch()); SCReleasePomParser sCReleasePomParser = new SCReleasePomParser(clonedScRelease); Versions versions = sCReleasePomParser.allVersions(); + log.info("Retrieved the following versions\n{}", versions); if (!this.pomUpdater.shouldProjectBeUpdated(projectRoot, versions)) { log.info("Skipping project updating"); return; } File rootPom = new File(projectRoot, "pom.xml"); ModelWrapper rootPomModel = this.pomUpdater.readModel(rootPom); - processAllPoms(projectRoot, new PomWalker(rootPomModel, versions, this.pomUpdater)); + processAllPoms(projectRoot, new PomWalker(rootPomModel, versions, this.pomUpdater, + properties)); } private void processAllPoms(File projectRoot, PomWalker pomWalker) { @@ -64,27 +66,39 @@ public class ProjectUpdater { private class PomWalker extends SimpleFileVisitor { - private static final String POM_XML = "pom.xml"; + private static final String POM_XML = "pom.xml"; private final ModelWrapper rootPom; private final Versions versions; private final PomUpdater pomUpdater; + private final ReleaserProperties properties; - private PomWalker(ModelWrapper rootPom, Versions versions, PomUpdater pomUpdater) { + private PomWalker(ModelWrapper rootPom, Versions versions, PomUpdater pomUpdater, + ReleaserProperties properties) { this.rootPom = rootPom; this.versions = versions; this.pomUpdater = pomUpdater; + this.properties = properties; } @Override public FileVisitResult visitFile(Path path, BasicFileAttributes attr) { File file = path.toFile(); if (POM_XML.equals(file.getName())) { + if (pathIgnored(file)) { + log.debug("Ignoring file [{}] since it's on a list of patterns to ignore", file); + return FileVisitResult.CONTINUE; + } ModelWrapper model = this.pomUpdater.updateModel(this.rootPom, file, this.versions); this.pomUpdater.overwritePomIfDirty(model, this.versions, file); } return FileVisitResult.CONTINUE; } + + private boolean pathIgnored(File file) { + String path = file.getPath(); + return this.properties.getIgnoredPomRegex().stream().anyMatch(path::matches); + } } } diff --git a/releaser-core/src/main/java/org/springframework/cloud/release/internal/ReleaserProperties.java b/releaser-core/src/main/java/org/springframework/cloud/release/internal/ReleaserProperties.java index 1984a8eb..d46204ab 100644 --- a/releaser-core/src/main/java/org/springframework/cloud/release/internal/ReleaserProperties.java +++ b/releaser-core/src/main/java/org/springframework/cloud/release/internal/ReleaserProperties.java @@ -1,7 +1,11 @@ package org.springframework.cloud.release.internal; +import java.util.List; + import org.springframework.boot.context.properties.ConfigurationProperties; +import edu.emory.mathcs.backport.java.util.Arrays; + /** * @author Marcin Grzejszczak */ @@ -18,6 +22,15 @@ public class ReleaserProperties { */ private String cloneDestinationDir; + /** + * List of regular expressions of ignored poms. Defaults to test projects and samples. + */ + @SuppressWarnings("unchecked") + private List ignoredPomRegex = Arrays.asList(new String[] { + "^.*spring-cloud-contract-maven-plugin/src/test/projects/.*$", + "^.*samples/standalone.*$" + }); + /** * Which branch of Spring Cloud Release should be checked out. Defaults to {@code master} */ @@ -46,4 +59,12 @@ public class ReleaserProperties { public void setBranch(String branch) { this.branch = branch; } + + public List getIgnoredPomRegex() { + return this.ignoredPomRegex; + } + + public void setIgnoredPomRegex(List ignoredPomRegex) { + this.ignoredPomRegex = ignoredPomRegex; + } } diff --git a/releaser-core/src/main/java/org/springframework/cloud/release/internal/SCReleasePomParser.java b/releaser-core/src/main/java/org/springframework/cloud/release/internal/SCReleasePomParser.java index 143c9281..fe600ff9 100644 --- a/releaser-core/src/main/java/org/springframework/cloud/release/internal/SCReleasePomParser.java +++ b/releaser-core/src/main/java/org/springframework/cloud/release/internal/SCReleasePomParser.java @@ -17,6 +17,7 @@ package org.springframework.cloud.release.internal; import java.io.File; import java.lang.invoke.MethodHandles; +import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.function.Function; @@ -60,7 +61,14 @@ class SCReleasePomParser { Versions allVersions() { Versions boot = bootVersion(); Versions cloud = springCloudVersions(); - return new Versions(boot.bootVersion, cloud.scBuildVersion, cloud.projects); + return new Versions(boot.bootVersion, cloud.scBuildVersion, allProjects(boot, cloud)); + } + + private Set allProjects(Versions boot, Versions cloud) { + Set allProjects = new HashSet<>(); + allProjects.addAll(boot.projects); + allProjects.addAll(cloud.projects); + return allProjects; } Versions bootVersion() { diff --git a/releaser-core/src/main/java/org/springframework/cloud/release/internal/Versions.java b/releaser-core/src/main/java/org/springframework/cloud/release/internal/Versions.java index 5d21ccf1..2ce12974 100644 --- a/releaser-core/src/main/java/org/springframework/cloud/release/internal/Versions.java +++ b/releaser-core/src/main/java/org/springframework/cloud/release/internal/Versions.java @@ -3,7 +3,9 @@ package org.springframework.cloud.release.internal; import java.util.HashSet; import java.util.Properties; import java.util.Set; +import java.util.stream.Collectors; +import static org.springframework.cloud.release.internal.SpringCloudConstants.BOOT_STARTER_ARTIFACT_ID; import static org.springframework.cloud.release.internal.SpringCloudConstants.BUILD_ARTIFACT_ID; import static org.springframework.cloud.release.internal.SpringCloudConstants.CLOUD_DEPENDENCIES_ARTIFACT_ID; @@ -24,6 +26,7 @@ class Versions { Versions(String bootVersion) { this.bootVersion = bootVersion; this.projects.add(new Project(SPRING_BOOT_PROJECT_NAME, bootVersion)); + this.projects.add(new Project(BOOT_STARTER_ARTIFACT_ID, bootVersion)); } Versions(String scBuildVersion, Set projects) { @@ -70,6 +73,12 @@ class Versions { String withoutParent = projectName.substring(0, projectName.indexOf("-parent")); return project.name.equals(withoutParent); } + + @Override public String toString() { + return "Spring Boot Version=[" + this.bootVersion + ']' + "\nSpring Cloud Build Version=[" + + this.scBuildVersion + ']' + "\nProjects=\n\t" + this.projects.stream().map(Object::toString).collect( + Collectors.joining("\n\t")); + } } /** @@ -107,6 +116,6 @@ class Project { } @Override public String toString() { - return "Project{" + "name='" + this.name + '\'' + ", version='" + this.version + '\'' + '}'; + return "name=[" + this.name + "], version=[" + this.version + ']'; } } \ No newline at end of file diff --git a/releaser-core/src/test/java/org/springframework/cloud/release/internal/VersionsTests.java b/releaser-core/src/test/java/org/springframework/cloud/release/internal/VersionsTests.java index edd3fab2..1339c01f 100644 --- a/releaser-core/src/test/java/org/springframework/cloud/release/internal/VersionsTests.java +++ b/releaser-core/src/test/java/org/springframework/cloud/release/internal/VersionsTests.java @@ -34,7 +34,10 @@ public class VersionsTests { @Test public void should_add_boot_to_versions_when_version_is_created() { then(new Versions("1.2.3.RELEASE").projects) - .containsExactly(new Project("spring-boot", "1.2.3.RELEASE")); + .contains( + new Project("spring-boot", "1.2.3.RELEASE"), + new Project("spring-boot-starter-parent", "1.2.3.RELEASE") + ); } @Test