summaryrefslogtreecommitdiffstats
path: root/vespa-application-maven-plugin
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2022-04-20 08:28:37 +0200
committerjonmv <venstad@gmail.com>2022-04-20 08:31:31 +0200
commita539f34d4e1788183484b17b38a7cb6339f2386d (patch)
tree2c4e56fbf72f2e13033d05656709d9fc72443171 /vespa-application-maven-plugin
parent1123977d8bc6a8fe4ca420eb102657bf034ff631 (diff)
Revert "Merge pull request #22155 from vespa-engine/revert-22124-jonmv/require-compile-version-leq-parent"
This reverts commit ddd16fd9efba8428e0d62430550e8741dcf696b8, reversing changes made to d6ac310e295206ec2f88a9a3c8d2a0ebbbb46b37.
Diffstat (limited to 'vespa-application-maven-plugin')
-rw-r--r--vespa-application-maven-plugin/src/main/java/com/yahoo/container/plugin/mojo/ApplicationMojo.java11
-rw-r--r--vespa-application-maven-plugin/src/main/java/com/yahoo/container/plugin/mojo/Version.java80
-rw-r--r--vespa-application-maven-plugin/src/test/java/com/yahoo/container/plugin/mojo/VersionTest.java31
3 files changed, 119 insertions, 3 deletions
diff --git a/vespa-application-maven-plugin/src/main/java/com/yahoo/container/plugin/mojo/ApplicationMojo.java b/vespa-application-maven-plugin/src/main/java/com/yahoo/container/plugin/mojo/ApplicationMojo.java
index 1bbdfc9914a..5873db262d9 100644
--- a/vespa-application-maven-plugin/src/main/java/com/yahoo/container/plugin/mojo/ApplicationMojo.java
+++ b/vespa-application-maven-plugin/src/main/java/com/yahoo/container/plugin/mojo/ApplicationMojo.java
@@ -59,11 +59,16 @@ public class ApplicationMojo extends AbstractMojo {
if ( ! applicationDestination.exists())
return;
- if (vespaversion == null) // Get the build version of the parent project unless specifically set.
- vespaversion = project.getProperties().getProperty("vespaversion");
+ // Compile version is the build version of the parent project, unless specifically set.
+ MavenProject parent = project;
+ while (parent.getParent() != null) parent = parent.getParent();
+ Version parentVersion = Version.from(parent.getVersion());
+ Version compileVersion = vespaversion == null ? parentVersion : Version.from(vespaversion);
+ if (parentVersion.compareTo(compileVersion) < 0)
+ throw new IllegalArgumentException("compile version (" + compileVersion + ") cannot be higher than parent version (" + parentVersion + ")");
String metaData = String.format("{\"compileVersion\": \"%s\",\n \"buildTime\": %d}",
- vespaversion,
+ compileVersion,
System.currentTimeMillis());
try {
Files.write(applicationDestination.toPath().resolve("build-meta.json"),
diff --git a/vespa-application-maven-plugin/src/main/java/com/yahoo/container/plugin/mojo/Version.java b/vespa-application-maven-plugin/src/main/java/com/yahoo/container/plugin/mojo/Version.java
new file mode 100644
index 00000000000..050871043ca
--- /dev/null
+++ b/vespa-application-maven-plugin/src/main/java/com/yahoo/container/plugin/mojo/Version.java
@@ -0,0 +1,80 @@
+package com.yahoo.container.plugin.mojo;
+
+import java.util.Comparator;
+import java.util.Objects;
+
+import static java.lang.Integer.min;
+import static java.lang.Integer.parseInt;
+
+/**
+ * @author jonmv
+ */
+public class Version implements Comparable<Version> {
+
+ private static final Comparator<Version> comparator = Comparator.comparingInt(Version::major)
+ .thenComparing(Version::isSnapshot)
+ .thenComparing(Version::minor)
+ .thenComparing(Version::micro);
+
+ private final int major;
+ private final int minor;
+ private final int micro;
+ private final boolean snapshot;
+
+ private Version(int major, int minor, int micro, boolean snapshot) {
+ if (major < 0 || minor < 0 || micro < 0) throw new IllegalArgumentException("version numbers must all be non-negative");
+ this.major = major;
+ this.minor = minor;
+ this.micro = micro;
+ this.snapshot = snapshot;
+ }
+
+ public static Version of(int major, int minor, int micro) {
+ return new Version(major, minor, micro, false);
+ }
+
+ public static Version ofSnapshot(int major) {
+ return new Version(major, 0, 0, true);
+ }
+
+ public static Version from(String version) {
+ if (version.endsWith("-SNAPSHOT")) {
+ String[] parts = version.split("-");
+ if (parts.length != 2) throw new IllegalArgumentException("snapshot version must only specify major, e.g., \"1-SNAPSHOT\"");
+ return ofSnapshot(parseInt(parts[0]));
+ }
+ String[] parts = version.split("\\.");
+ if (parts.length != 3) throw new IllegalArgumentException("release versions must specify major, minor and micro, separated by '.', e.g., \"1.2.0\"");
+ return of(parseInt(parts[0]), parseInt(parts[1]), parseInt(parts[2]));
+ }
+
+ public int major() { return major; }
+ public int minor() { return minor; }
+ public int micro() { return micro; }
+ public boolean isSnapshot() { return snapshot; }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ Version version = (Version) o;
+ return major == version.major && minor == version.minor && micro == version.micro && snapshot == version.snapshot;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(major, minor, micro, snapshot);
+ }
+
+ /** Snapshots sort last within their major, and sorting is on major, then minor, then micro otherwise. */
+ @Override
+ public int compareTo(Version other) {
+ return comparator.compare(this, other);
+ }
+
+ @Override
+ public String toString() {
+ return isSnapshot() ? major + "-SNAPSHOT" : major + "." + minor + "." + micro;
+ }
+
+}
diff --git a/vespa-application-maven-plugin/src/test/java/com/yahoo/container/plugin/mojo/VersionTest.java b/vespa-application-maven-plugin/src/test/java/com/yahoo/container/plugin/mojo/VersionTest.java
new file mode 100644
index 00000000000..ed31f43d081
--- /dev/null
+++ b/vespa-application-maven-plugin/src/test/java/com/yahoo/container/plugin/mojo/VersionTest.java
@@ -0,0 +1,31 @@
+package com.yahoo.container.plugin.mojo;
+
+import org.junit.Test;
+
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * @author jonmv
+ */
+public class VersionTest {
+
+ @Test
+ public void test() {
+ assertEquals("1.2.0", Version.from("1.2.0").toString());
+ assertEquals("3-SNAPSHOT", Version.from("3-SNAPSHOT").toString());
+
+ List<Version> versions = List.of(Version.of(1, 2, 3),
+ Version.of(1, 2, 4),
+ Version.of(1, 3, 2),
+ Version.ofSnapshot(1),
+ Version.of(2, 1, 0));
+
+ for (int i = 0; i < versions.size(); i++)
+ for (int j = 0; j < versions.size(); j++)
+ assertEquals(versions.get(i) + " should be less than " + versions.get(j),
+ Integer.compare(i, j), versions.get(i).compareTo(versions.get(j)));
+ }
+
+}