aboutsummaryrefslogtreecommitdiffstats
path: root/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationVersion.java
diff options
context:
space:
mode:
authorJon Marius Venstad <jvenstad@yahoo-inc.com>2019-01-11 11:13:16 +0100
committerJon Marius Venstad <jvenstad@yahoo-inc.com>2019-01-11 11:13:16 +0100
commit0dec7e17ef43134b0342df0f8699ac4d6d78a383 (patch)
tree06a537046c5c54df4e8941fdd18737d921e016b2 /controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationVersion.java
parent97ff88ac1c4c5a769fdd4a288fe810c62835e8c2 (diff)
Expose build meta in ApplicationPackage and store it in ApplicationVersion
Diffstat (limited to 'controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationVersion.java')
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationVersion.java52
1 files changed, 43 insertions, 9 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationVersion.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationVersion.java
index 1c8b861ba51..b1dad7d814e 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationVersion.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationVersion.java
@@ -1,6 +1,9 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.controller.api.integration.deployment;
+import com.yahoo.component.Version;
+
+import java.time.Instant;
import java.util.Objects;
import java.util.Optional;
import java.util.OptionalLong;
@@ -17,7 +20,8 @@ public class ApplicationVersion implements Comparable<ApplicationVersion> {
* Used in cases where application version cannot be determined, such as manual deployments (e.g. in dev
* environment)
*/
- public static final ApplicationVersion unknown = new ApplicationVersion(Optional.empty(), OptionalLong.empty(), Optional.empty());
+ public static final ApplicationVersion unknown = new ApplicationVersion(Optional.empty(), OptionalLong.empty(),
+ Optional.empty(), Optional.empty(), Optional.empty());
// This never changes and is only used to create a valid semantic version number, as required by application bundles
private static final String majorVersion = "1.0";
@@ -25,33 +29,53 @@ public class ApplicationVersion implements Comparable<ApplicationVersion> {
private final Optional<SourceRevision> source;
private final Optional<String> authorEmail;
private final OptionalLong buildNumber;
+ private final Optional<Version> compileVersion;
+ private final Optional<Instant> buildTime;
- private ApplicationVersion(Optional<SourceRevision> source, OptionalLong buildNumber, Optional<String> authorEmail) {
+ private ApplicationVersion(Optional<SourceRevision> source, OptionalLong buildNumber, Optional<String> authorEmail,
+ Optional<Version> compileVersion, Optional<Instant> buildTime) {
Objects.requireNonNull(source, "source cannot be null");
Objects.requireNonNull(buildNumber, "buildNumber cannot be null");
Objects.requireNonNull(authorEmail, "author cannot be null");
if (source.isPresent() != buildNumber.isPresent()) {
throw new IllegalArgumentException("both buildNumber and source must be set together");
}
+ if (compileVersion.isPresent() != buildTime.isPresent()) {
+ throw new IllegalArgumentException("both compileVersion and buildTime must be set together");
+ }
if (buildNumber.isPresent() && buildNumber.getAsLong() <= 0) {
throw new IllegalArgumentException("buildNumber must be > 0");
}
if (authorEmail.isPresent() && ! authorEmail.get().matches("[^@]+@[^@]+")) {
throw new IllegalArgumentException("Invalid author email '" + authorEmail.get() + "'.");
}
+ if (compileVersion.isPresent() && compileVersion.get().equals(Version.emptyVersion)) {
+ throw new IllegalArgumentException("The empty version is not a legal compile version.");
+ }
this.source = source;
this.buildNumber = buildNumber;
this.authorEmail = authorEmail;
+ this.compileVersion = compileVersion;
+ this.buildTime = buildTime;
}
/** Create an application package version from a completed build, without an author email */
public static ApplicationVersion from(SourceRevision source, long buildNumber) {
- return new ApplicationVersion(Optional.of(source), OptionalLong.of(buildNumber), Optional.empty());
+ return new ApplicationVersion(Optional.of(source), OptionalLong.of(buildNumber), Optional.empty(),
+ Optional.empty(), Optional.empty());
}
- /** Create an application package version from a completed build, with an author email */
+ /** Creates an version from a completed build and an author email. */
public static ApplicationVersion from(SourceRevision source, long buildNumber, String authorEmail) {
- return new ApplicationVersion(Optional.of(source), OptionalLong.of(buildNumber), Optional.of(authorEmail));
+ return new ApplicationVersion(Optional.of(source), OptionalLong.of(buildNumber),
+ Optional.of(authorEmail), Optional.empty(), Optional.empty());
+ }
+
+ /** Creates an version from a completed build, an author email, and build meta data. */
+ public static ApplicationVersion from(SourceRevision source, long buildNumber, String authorEmail,
+ Version compileVersion, Instant buildTime) {
+ return new ApplicationVersion(Optional.of(source), OptionalLong.of(buildNumber), Optional.of(authorEmail),
+ Optional.of(compileVersion), Optional.of(buildTime));
}
/** Returns an unique identifier for this version or "unknown" if version is not known */
@@ -74,6 +98,12 @@ public class ApplicationVersion implements Comparable<ApplicationVersion> {
/** Returns the email of the author of commit of this version, if known */
public Optional<String> authorEmail() { return authorEmail; }
+ /** Returns the Vespa version this package was compiled against, if known. */
+ public Optional<Version> compileVersion() { return compileVersion; }
+
+ /** Returns the time this package was built, if known. */
+ public Optional<Instant> buildTime() { return buildTime; }
+
/** Returns whether this is unknown */
public boolean isUnknown() {
return this.equals(unknown);
@@ -86,19 +116,23 @@ public class ApplicationVersion implements Comparable<ApplicationVersion> {
ApplicationVersion that = (ApplicationVersion) o;
return Objects.equals(source, that.source) &&
Objects.equals(authorEmail, that.authorEmail) &&
- Objects.equals(buildNumber, that.buildNumber);
+ Objects.equals(buildNumber, that.buildNumber) &&
+ Objects.equals(compileVersion, that.compileVersion) &&
+ Objects.equals(buildTime, that.buildTime);
}
@Override
public int hashCode() {
- return Objects.hash(source, authorEmail, buildNumber);
+ return Objects.hash(source, authorEmail, buildNumber, compileVersion, buildTime);
}
@Override
public String toString() {
- return "Application package version: " + id()
+ return "Application package version: " + id()
+ source.map(s -> ", " + s.toString()).orElse("")
- + authorEmail.map(e -> ", " + e).orElse("");
+ + authorEmail.map(e -> ", by " + e).orElse("")
+ + compileVersion.map(v -> ", built against " + v).orElse("")
+ + buildTime.map(t -> " at " + t).orElse("") ;
}
/** Abbreviate given commit hash to 9 characters */