diff options
author | Jon Marius Venstad <jvenstad@yahoo-inc.com> | 2019-01-11 11:13:16 +0100 |
---|---|---|
committer | Jon Marius Venstad <jvenstad@yahoo-inc.com> | 2019-01-11 11:13:16 +0100 |
commit | 0dec7e17ef43134b0342df0f8699ac4d6d78a383 (patch) | |
tree | 06a537046c5c54df4e8941fdd18737d921e016b2 /controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationVersion.java | |
parent | 97ff88ac1c4c5a769fdd4a288fe810c62835e8c2 (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.java | 52 |
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 */ |