diff --git a/src/main/java/tools/bestquality/maven/ci/IncrementRevisionMojo.java b/src/main/java/tools/bestquality/maven/ci/IncrementPomMojo.java similarity index 89% rename from src/main/java/tools/bestquality/maven/ci/IncrementRevisionMojo.java rename to src/main/java/tools/bestquality/maven/ci/IncrementPomMojo.java index 1410146..2487404 100644 --- a/src/main/java/tools/bestquality/maven/ci/IncrementRevisionMojo.java +++ b/src/main/java/tools/bestquality/maven/ci/IncrementPomMojo.java @@ -14,17 +14,18 @@ import static java.nio.file.Files.readAllBytes; import static org.apache.maven.plugins.annotations.LifecyclePhase.PROCESS_RESOURCES; -@Mojo(name = "increment-revision", +@Mojo(name = "increment-pom", aggregator = true, threadSafe = true, defaultPhase = PROCESS_RESOURCES) -public class IncrementRevisionMojo - extends IncrementingMojo { +public class IncrementPomMojo + extends IncrementingMojo { @Override public void execute() throws MojoExecutionException, MojoFailureException { - writeIncrementedPom(next().replace(readProjectPom())); + CiVersion next = outputNextRevision(); + writeIncrementedPom(next.replace(readProjectPom())); } private String readProjectPom() diff --git a/src/main/java/tools/bestquality/maven/ci/IncrementingMojo.java b/src/main/java/tools/bestquality/maven/ci/IncrementingMojo.java index 4ef97ca..5cf7990 100644 --- a/src/main/java/tools/bestquality/maven/ci/IncrementingMojo.java +++ b/src/main/java/tools/bestquality/maven/ci/IncrementingMojo.java @@ -1,10 +1,19 @@ package tools.bestquality.maven.ci; +import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.project.MavenProject; +import java.io.BufferedWriter; +import java.io.File; +import java.nio.file.Path; + import static java.lang.String.format; +import static java.lang.System.out; +import static java.nio.charset.StandardCharsets.UTF_8; +import static java.nio.file.Files.createDirectories; +import static java.nio.file.Files.newBufferedWriter; import static tools.bestquality.maven.ci.CiVersion.versionFrom; import static tools.bestquality.maven.versioning.StandardIncrementor.incrementor; @@ -16,6 +25,15 @@ public abstract class IncrementingMojo> @Parameter(alias = "incrementor", property = "incrementor", defaultValue = "auto") private String incrementor; + @Parameter(alias = "force-stdout", property = "force-stdout", defaultValue = "false") + private boolean forceStdout; + + @Parameter(defaultValue = "${project.build.directory}/ci") + private File outputDirectory; + + @Parameter(defaultValue = "next-revision.txt") + private String filename; + @SuppressWarnings("unchecked") public M withProject(MavenProject project) { @@ -29,6 +47,24 @@ public M withIncrementor(String incrementor) { return (M) this; } + @SuppressWarnings("unchecked") + public M withForceStdout(boolean forceStdout) { + this.forceStdout = forceStdout; + return (M) this; + } + + @SuppressWarnings("unchecked") + public M withOutputDirectory(File outputDirectory) { + this.outputDirectory = outputDirectory; + return (M) this; + } + + @SuppressWarnings("unchecked") + public M withFilename(String filename) { + this.filename = filename; + return (M) this; + } + protected CiVersion current() { return versionFrom(project.getProperties()); } @@ -40,4 +76,35 @@ protected CiVersion next() info(format("Next revision is: %s", next.toExternalForm())); return next; } + + protected CiVersion outputNextRevision() + throws MojoFailureException, MojoExecutionException { + CiVersion next = next(); + if (forceStdout) { + out.print(next.toExternalForm()); + out.flush(); + } + writeNextRevision(next.toExternalForm()); + return next; + } + + Path nextRevisionPath() { + return outputDirectory.toPath() + .resolve(filename); + } + + private void writeNextRevision(String revision) + throws MojoExecutionException { + Path path = nextRevisionPath(); + info(format("Writing next revision to %s", path.toAbsolutePath())); + try { + createDirectories(path.getParent()); + try (BufferedWriter writer = newBufferedWriter(path, UTF_8)) { + writer.append(revision); + } + } catch (Exception e) { + error(format("Failure writing next revision to: %s", path.toAbsolutePath()), e); + throw new MojoExecutionException(e.getLocalizedMessage(), e); + } + } } diff --git a/src/main/java/tools/bestquality/maven/ci/NextRevisionMojo.java b/src/main/java/tools/bestquality/maven/ci/NextRevisionMojo.java index 36289c4..4222836 100644 --- a/src/main/java/tools/bestquality/maven/ci/NextRevisionMojo.java +++ b/src/main/java/tools/bestquality/maven/ci/NextRevisionMojo.java @@ -3,17 +3,7 @@ import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.plugins.annotations.Mojo; -import org.apache.maven.plugins.annotations.Parameter; -import java.io.BufferedWriter; -import java.io.File; -import java.nio.file.Path; - -import static java.lang.String.format; -import static java.lang.System.out; -import static java.nio.charset.StandardCharsets.UTF_8; -import static java.nio.file.Files.createDirectories; -import static java.nio.file.Files.newBufferedWriter; import static org.apache.maven.plugins.annotations.LifecyclePhase.VALIDATE; @Mojo(name = "next-revision", @@ -23,59 +13,9 @@ public class NextRevisionMojo extends IncrementingMojo { - @Parameter(alias = "force-stdout", property = "force-stdout", defaultValue = "false") - private boolean forceStdout; - - @Parameter(defaultValue = "${project.build.directory}/ci") - private File outputDirectory; - - @Parameter(defaultValue = "next-revision.txt") - private String filename; - - - public NextRevisionMojo withForceStdout(boolean forceStdout) { - this.forceStdout = forceStdout; - return this; - } - - public NextRevisionMojo withOutputDirectory(File outputDirectory) { - this.outputDirectory = outputDirectory; - return this; - } - - public NextRevisionMojo withFilename(String filename) { - this.filename = filename; - return this; - } - @Override public void execute() throws MojoFailureException, MojoExecutionException { - CiVersion next = next(); - if (forceStdout) { - out.print(next.toExternalForm()); - out.flush(); - } - writeNextRevision(next.toExternalForm()); - } - - Path nextRevisionPath() { - return outputDirectory.toPath() - .resolve(filename); - } - - private void writeNextRevision(String revision) - throws MojoExecutionException { - Path path = nextRevisionPath(); - info(format("Writing next revision to %s", path.toAbsolutePath())); - try { - createDirectories(path.getParent()); - try (BufferedWriter writer = newBufferedWriter(path, UTF_8)) { - writer.append(revision); - } - } catch (Exception e) { - error(format("Failure writing next revision to: %s", path.toAbsolutePath()), e); - throw new MojoExecutionException(e.getLocalizedMessage(), e); - } + outputNextRevision(); } } diff --git a/src/test/groovy/tools/bestquality/maven/ci/IncrementRevisionMojoTest.groovy b/src/test/groovy/tools/bestquality/maven/ci/IncrementPomMojoTest.groovy similarity index 87% rename from src/test/groovy/tools/bestquality/maven/ci/IncrementRevisionMojoTest.groovy rename to src/test/groovy/tools/bestquality/maven/ci/IncrementPomMojoTest.groovy index bad6d4e..331ac75 100644 --- a/src/test/groovy/tools/bestquality/maven/ci/IncrementRevisionMojoTest.groovy +++ b/src/test/groovy/tools/bestquality/maven/ci/IncrementPomMojoTest.groovy @@ -3,15 +3,17 @@ package tools.bestquality.maven.ci import org.apache.maven.plugin.MojoExecutionException import tools.bestquality.maven.test.MojoSpecification -class IncrementRevisionMojoTest +class IncrementPomMojoTest extends MojoSpecification { - IncrementRevisionMojo mojo + IncrementPomMojo mojo @Override def setup() { - mojo = new IncrementRevisionMojo() + mojo = new IncrementPomMojo() .withProject(mockProject) .withIncrementor("auto") + .withOutputDirectory(outputPath.toFile()) + .withFilename("next-revision.txt") mojo.setLog(mockLog) }