From fec910564d75727a8eea1e3b3e11cce99df82af2 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Wed, 26 Jul 2017 19:23:51 +0200 Subject: [PATCH] #63 - Additional guards against snapshots in release train BOM. We now inspect the BOM pom.xml for references to -SNAPSHOT in declared dependencies. This is to work around the limitation of the Maven Enforcer plugin which only verifies actual project dependencies, not ones declared in a block. #63 - Additional guards against snapshots in release train BOM. We now inspect the BOM pom.xml for references to -SNAPSHOT in declared dependencies. This is to work around the limitation of the Maven Enforcer plugin which only verifies actual project dependencies, not ones declared in a block. --- .../data/release/build/MavenBuildSystem.java | 16 ++++++++++++++-- .../data/release/build/MavenRuntime.java | 2 -- .../springframework/data/release/build/Pom.java | 5 +++++ .../release/build/MavenIntegrationTests.java | 8 ++++++++ 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/release-tools/src/main/java/org/springframework/data/release/build/MavenBuildSystem.java b/release-tools/src/main/java/org/springframework/data/release/build/MavenBuildSystem.java index 0d807bc..804ac9e 100644 --- a/release-tools/src/main/java/org/springframework/data/release/build/MavenBuildSystem.java +++ b/release-tools/src/main/java/org/springframework/data/release/build/MavenBuildSystem.java @@ -24,11 +24,13 @@ import lombok.RequiredArgsConstructor; import lombok.experimental.FieldDefaults; import java.io.File; +import java.util.List; import java.util.function.Consumer; import org.springframework.core.annotation.Order; import org.springframework.data.release.build.CommandLine.Argument; import org.springframework.data.release.build.CommandLine.Goal; +import org.springframework.data.release.build.Pom.Artifact; import org.springframework.data.release.deployment.DefaultDeploymentInformation; import org.springframework.data.release.deployment.DeploymentInformation; import org.springframework.data.release.deployment.DeploymentProperties; @@ -138,6 +140,16 @@ class MavenBuildSystem implements BuildSystem { module.getProject().doWithAdditionalArtifacts( additionalArtifact -> pom.setDependencyManagementVersion(additionalArtifact.getArtifactId(), version)); } + + if (updateInformation.getPhase().equals(Phase.PREPARE)) { + + // Make sure we have no snapshot leftovers + List snapshotDependencies = pom.getSnapshotDependencies(); + + if (!snapshotDependencies.isEmpty()) { + throw new IllegalStateException(String.format("Found snapshot dependencies %s!", snapshotDependencies)); + } + } }); } @@ -301,8 +313,8 @@ class MavenBuildSystem implements BuildSystem { } /** - * Triggers Maven commands to deploy to Sonatypes OSS Nexus if the given {@link ModuleIteration} refers to a version - * that has to be publically released. + * Triggers Maven commands to deploy to Sonatype's OSS Nexus if the given {@link ModuleIteration} refers to a version + * that has to be publicly released. * * @param module must not be {@literal null}. */ diff --git a/release-tools/src/main/java/org/springframework/data/release/build/MavenRuntime.java b/release-tools/src/main/java/org/springframework/data/release/build/MavenRuntime.java index 73e0492..ed3606f 100644 --- a/release-tools/src/main/java/org/springframework/data/release/build/MavenRuntime.java +++ b/release-tools/src/main/java/org/springframework/data/release/build/MavenRuntime.java @@ -24,7 +24,6 @@ import org.apache.maven.shared.invoker.DefaultInvoker; import org.apache.maven.shared.invoker.InvocationResult; import org.apache.maven.shared.invoker.Invoker; import org.apache.maven.shared.invoker.MavenInvocationException; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.release.io.OsOperations; import org.springframework.data.release.io.Workspace; import org.springframework.data.release.model.Project; @@ -52,7 +51,6 @@ class MavenRuntime { * @param logger must not be {@literal null}. * @param properties must not be {@literal null}. */ - @Autowired public MavenRuntime(Workspace workspace, OsOperations os, Logger logger, MavenProperties properties) { this.workspace = workspace; diff --git a/release-tools/src/main/java/org/springframework/data/release/build/Pom.java b/release-tools/src/main/java/org/springframework/data/release/build/Pom.java index 63deca5..2e923ea 100644 --- a/release-tools/src/main/java/org/springframework/data/release/build/Pom.java +++ b/release-tools/src/main/java/org/springframework/data/release/build/Pom.java @@ -15,6 +15,8 @@ */ package org.springframework.data.release.build; +import java.util.List; + import org.springframework.data.release.model.ArtifactVersion; import org.xmlbeam.annotation.XBRead; import org.xmlbeam.annotation.XBValue; @@ -64,6 +66,9 @@ public interface Pom { @XBWrite("/project/dependencyManagement/dependencies/dependency[artifactId=\"{0}\"]/version") Pom setDependencyManagementVersion(String artifactId, @XBValue ArtifactVersion version); + @XBRead("//dependency[substring(version, string-length(version) - string-length('-SNAPSHOT') + 1) = '-SNAPSHOT']") + List getSnapshotDependencies(); + public interface Repository { @XBRead("child::id") diff --git a/release-tools/src/test/java/org/springframework/data/release/build/MavenIntegrationTests.java b/release-tools/src/test/java/org/springframework/data/release/build/MavenIntegrationTests.java index 177d9d1..5637e4e 100644 --- a/release-tools/src/test/java/org/springframework/data/release/build/MavenIntegrationTests.java +++ b/release-tools/src/test/java/org/springframework/data/release/build/MavenIntegrationTests.java @@ -79,4 +79,12 @@ public class MavenIntegrationTests extends AbstractIntegrationTests { maven.updateProjectDescriptors(build, information); maven.prepareVersion(build, Phase.PREPARE); } + + @Test + public void findsSnapshotDependencies() throws Exception { + + Pom pom = projection.io().file(workspace.getFile("bom/pom.xml", Projects.BUILD)).read(Pom.class); + + System.out.println(pom.getSnapshotDependencies()); + } }