diff --git a/pom.xml b/pom.xml index 5fc35453..15c65e97 100644 --- a/pom.xml +++ b/pom.xml @@ -191,7 +191,7 @@ maven-invoker-plugin - 3.2.0 + 3.2.2 ${project.build.directory}/it ${project.build.directory}/local-repo diff --git a/src/it/release-start-it-snapshot-dependency-fail/gitignorefile b/src/it/release-start-it-snapshot-dependency-fail/gitignorefile new file mode 100644 index 00000000..c8d59a83 --- /dev/null +++ b/src/it/release-start-it-snapshot-dependency-fail/gitignorefile @@ -0,0 +1,5 @@ +build.log +expected-pom.xml +invoker.properties +init.bsh +verify.bsh diff --git a/src/it/release-start-it-snapshot-dependency-fail/init.bsh b/src/it/release-start-it-snapshot-dependency-fail/init.bsh new file mode 100644 index 00000000..96ca676d --- /dev/null +++ b/src/it/release-start-it-snapshot-dependency-fail/init.bsh @@ -0,0 +1,26 @@ +import org.apache.commons.io.FileUtils; + +try { + new File(basedir, "gitignorefile").renameTo(new File(basedir, ".gitignore")); + + Process p = Runtime.getRuntime().exec("git --git-dir=" + basedir + "/.git --work-tree=" + basedir + " init"); + p.waitFor(); + + Process p = Runtime.getRuntime().exec("git --git-dir=" + basedir + "/.git --work-tree=" + basedir + " config user.email 'a@a.aa'"); + p.waitFor(); + Process p = Runtime.getRuntime().exec("git --git-dir=" + basedir + "/.git --work-tree=" + basedir + " config user.name 'a'"); + p.waitFor(); + + p = Runtime.getRuntime().exec("git --git-dir=" + basedir + "/.git --work-tree=" + basedir + " add ."); + p.waitFor(); + + p = Runtime.getRuntime().exec("git --git-dir=" + basedir + "/.git --work-tree=" + basedir + " commit -m init"); + p.waitFor(); + + p = Runtime.getRuntime().exec("git --git-dir=" + basedir + "/.git --work-tree=" + basedir + " checkout -b develop"); + p.waitFor(); +} catch (Exception e) { + e.printStackTrace(); + return false; +} +return true; diff --git a/src/it/release-start-it-snapshot-dependency-fail/invoker.properties b/src/it/release-start-it-snapshot-dependency-fail/invoker.properties new file mode 100644 index 00000000..654dabcf --- /dev/null +++ b/src/it/release-start-it-snapshot-dependency-fail/invoker.properties @@ -0,0 +1,5 @@ +invoker.goals=${project.groupId}:${project.artifactId}:${project.version}:release-start -B + +invoker.description=Non-interactive simple release-start: Failure due to SNAPSHOT dependency + +invoker.buildResult=failure \ No newline at end of file diff --git a/src/it/release-start-it-snapshot-dependency-fail/pom.xml b/src/it/release-start-it-snapshot-dependency-fail/pom.xml new file mode 100644 index 00000000..0942ffbe --- /dev/null +++ b/src/it/release-start-it-snapshot-dependency-fail/pom.xml @@ -0,0 +1,17 @@ + + 4.0.0 + com.amashchenko.maven.plugin + gitflow-maven-test + pom + 0.0.3-SNAPSHOT + + + + localhost + dummy-api + 1.1-SNAPSHOT + compile + + + + diff --git a/src/it/release-start-it-snapshot-dependency-fail/verify.groovy b/src/it/release-start-it-snapshot-dependency-fail/verify.groovy new file mode 100644 index 00000000..fc0ed3df --- /dev/null +++ b/src/it/release-start-it-snapshot-dependency-fail/verify.groovy @@ -0,0 +1,9 @@ +File file = new File( basedir, "build.log" ); +assert file.exists(); + +String text = file.getText("utf-8"); + +// ensure build fails due to SNAPSHOT dependencies +assert text.contains("There is some SNAPSHOT dependencies in the project,") + +return true; diff --git a/src/it/release-start-it-snapshot-parent-fail/dummy-parent/pom.xml b/src/it/release-start-it-snapshot-parent-fail/dummy-parent/pom.xml new file mode 100644 index 00000000..8014cbd4 --- /dev/null +++ b/src/it/release-start-it-snapshot-parent-fail/dummy-parent/pom.xml @@ -0,0 +1,10 @@ + + 4.0.0 + + localhost + dummy-parent + 1.1-SNAPSHOT + pom + + diff --git a/src/it/release-start-it-snapshot-parent-fail/gitignorefile b/src/it/release-start-it-snapshot-parent-fail/gitignorefile new file mode 100644 index 00000000..c8d59a83 --- /dev/null +++ b/src/it/release-start-it-snapshot-parent-fail/gitignorefile @@ -0,0 +1,5 @@ +build.log +expected-pom.xml +invoker.properties +init.bsh +verify.bsh diff --git a/src/it/release-start-it-snapshot-parent-fail/init.bsh b/src/it/release-start-it-snapshot-parent-fail/init.bsh new file mode 100644 index 00000000..96ca676d --- /dev/null +++ b/src/it/release-start-it-snapshot-parent-fail/init.bsh @@ -0,0 +1,26 @@ +import org.apache.commons.io.FileUtils; + +try { + new File(basedir, "gitignorefile").renameTo(new File(basedir, ".gitignore")); + + Process p = Runtime.getRuntime().exec("git --git-dir=" + basedir + "/.git --work-tree=" + basedir + " init"); + p.waitFor(); + + Process p = Runtime.getRuntime().exec("git --git-dir=" + basedir + "/.git --work-tree=" + basedir + " config user.email 'a@a.aa'"); + p.waitFor(); + Process p = Runtime.getRuntime().exec("git --git-dir=" + basedir + "/.git --work-tree=" + basedir + " config user.name 'a'"); + p.waitFor(); + + p = Runtime.getRuntime().exec("git --git-dir=" + basedir + "/.git --work-tree=" + basedir + " add ."); + p.waitFor(); + + p = Runtime.getRuntime().exec("git --git-dir=" + basedir + "/.git --work-tree=" + basedir + " commit -m init"); + p.waitFor(); + + p = Runtime.getRuntime().exec("git --git-dir=" + basedir + "/.git --work-tree=" + basedir + " checkout -b develop"); + p.waitFor(); +} catch (Exception e) { + e.printStackTrace(); + return false; +} +return true; diff --git a/src/it/release-start-it-snapshot-parent-fail/invoker.properties b/src/it/release-start-it-snapshot-parent-fail/invoker.properties new file mode 100644 index 00000000..8409ce6e --- /dev/null +++ b/src/it/release-start-it-snapshot-parent-fail/invoker.properties @@ -0,0 +1,5 @@ +invoker.goals=${project.groupId}:${project.artifactId}:${project.version}:release-start -B + +invoker.description=Non-interactive simple release-start: Failure due to SNAPSHOT parent dependency + +invoker.buildResult=failure \ No newline at end of file diff --git a/src/it/release-start-it-snapshot-parent-fail/pom.xml b/src/it/release-start-it-snapshot-parent-fail/pom.xml new file mode 100644 index 00000000..59daa6fe --- /dev/null +++ b/src/it/release-start-it-snapshot-parent-fail/pom.xml @@ -0,0 +1,13 @@ + + + localhost + dummy-parent + 1.1-SNAPSHOT + dummy-parent + + 4.0.0 + com.amashchenko.maven.plugin + gitflow-maven-test + pom + 0.0.3-SNAPSHOT + diff --git a/src/it/release-start-it-snapshot-parent-fail/verify.groovy b/src/it/release-start-it-snapshot-parent-fail/verify.groovy new file mode 100644 index 00000000..fc0ed3df --- /dev/null +++ b/src/it/release-start-it-snapshot-parent-fail/verify.groovy @@ -0,0 +1,9 @@ +File file = new File( basedir, "build.log" ); +assert file.exists(); + +String text = file.getText("utf-8"); + +// ensure build fails due to SNAPSHOT dependencies +assert text.contains("There is some SNAPSHOT dependencies in the project,") + +return true; diff --git a/src/main/java/com/amashchenko/maven/plugin/gitflow/AbstractGitFlowMojo.java b/src/main/java/com/amashchenko/maven/plugin/gitflow/AbstractGitFlowMojo.java index d0507e12..b8e1f6bc 100644 --- a/src/main/java/com/amashchenko/maven/plugin/gitflow/AbstractGitFlowMojo.java +++ b/src/main/java/com/amashchenko/maven/plugin/gitflow/AbstractGitFlowMojo.java @@ -19,9 +19,11 @@ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Set; import java.util.TimeZone; import java.util.regex.Pattern; @@ -340,7 +342,7 @@ protected void checkSnapshotDependencies() throws MojoFailureException { getLog().info("Checking for SNAPSHOT versions in dependencies."); List snapshots = new ArrayList<>(); - List builtArtifacts = new ArrayList<>(); + Set builtArtifacts = new HashSet<>(); List projects = mavenSession.getProjects(); for (MavenProject project : projects) { @@ -355,6 +357,13 @@ protected void checkSnapshotDependencies() throws MojoFailureException { snapshots.add(reloadedProject + " -> " + d); } } + MavenProject parent = reloadedProject.getParent(); + if (parent != null) { + String id = parent.getGroupId() + ":" + parent.getArtifactId() + ":" + parent.getVersion(); + if (!builtArtifacts.contains(id) && ArtifactUtils.isSnapshot(parent.getVersion())) { + snapshots.add(reloadedProject + " -> " + parent); + } + } } if (!snapshots.isEmpty()) {