diff options
author | Jon Marius Venstad <jonmv@users.noreply.github.com> | 2020-01-09 14:23:45 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-09 14:23:45 +0100 |
commit | b051cc64b6ec62f24c562f1c85f615d1516589a4 (patch) | |
tree | 4b72e879e25b3d1b8393db11ecac24ddeae1e215 | |
parent | bdade3d81383517b364c4e7034316e018ae536fd (diff) | |
parent | 0353b17e52678ca85979e6fe2308afbef5ac8263 (diff) |
Merge pull request #11719 from vespa-engine/jvenstad/support-sourceUrl
Accept, store and display optional sourceUrl and commit
26 files changed, 645 insertions, 332 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 fb9745d90cb..7f61632ea4e 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 @@ -21,7 +21,8 @@ public class ApplicationVersion implements Comparable<ApplicationVersion> { * environment) */ public static final ApplicationVersion unknown = new ApplicationVersion(Optional.empty(), OptionalLong.empty(), - Optional.empty(), Optional.empty(), Optional.empty()); + Optional.empty(), Optional.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"; @@ -31,9 +32,13 @@ public class ApplicationVersion implements Comparable<ApplicationVersion> { private final OptionalLong buildNumber; private final Optional<Version> compileVersion; private final Optional<Instant> buildTime; + private final Optional<String> sourceUrl; + private final Optional<String> commit; - private ApplicationVersion(Optional<SourceRevision> source, OptionalLong buildNumber, Optional<String> authorEmail, - Optional<Version> compileVersion, Optional<Instant> buildTime) { + /** Public for serialisation only. */ + public ApplicationVersion(Optional<SourceRevision> source, OptionalLong buildNumber, Optional<String> authorEmail, + Optional<Version> compileVersion, Optional<Instant> buildTime, Optional<String> sourceUrl, + Optional<String> commit) { Objects.requireNonNull(source, "source cannot be null"); Objects.requireNonNull(buildNumber, "buildNumber cannot be null"); Objects.requireNonNull(authorEmail, "author cannot be null"); @@ -57,25 +62,34 @@ public class ApplicationVersion implements Comparable<ApplicationVersion> { this.authorEmail = authorEmail; this.compileVersion = compileVersion; this.buildTime = buildTime; + this.sourceUrl = Objects.requireNonNull(sourceUrl, "sourceUrl cannot be null"); + this.commit = Objects.requireNonNull(commit, "commit cannot be null"); } /** 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(), - Optional.empty(), Optional.empty()); + Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty()); } /** 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), Optional.empty(), Optional.empty()); + return new ApplicationVersion(Optional.of(source), OptionalLong.of(buildNumber), Optional.of(authorEmail), + Optional.empty(), Optional.empty(), 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)); + Optional.of(compileVersion), Optional.of(buildTime), 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, Optional<String> sourceUrl, Optional<String> commit) { + return new ApplicationVersion(Optional.of(source), OptionalLong.of(buildNumber), Optional.of(authorEmail), + Optional.of(compileVersion), Optional.of(buildTime), sourceUrl, commit); } /** Returns an unique identifier for this version or "unknown" if version is not known */ @@ -83,7 +97,12 @@ public class ApplicationVersion implements Comparable<ApplicationVersion> { if (isUnknown()) { return "unknown"; } - return String.format("%s.%d-%s", majorVersion, buildNumber.getAsLong(), abbreviateCommit(source.get().commit())); + return String.format("%s.%d-%s", + majorVersion, + buildNumber.getAsLong(), + source.map(SourceRevision::commit).map(commit -> abbreviateCommit(commit)) + .or(this::commit) + .orElse("unknown")); } /** @@ -104,6 +123,21 @@ public class ApplicationVersion implements Comparable<ApplicationVersion> { /** Returns the time this package was built, if known. */ public Optional<Instant> buildTime() { return buildTime; } + /** Returns the source URL for this application version. */ + public Optional<String> sourceUrl() { + return sourceUrl.or(() -> source.map(source -> { + String repository = source.repository(); + if (repository.startsWith("git@")) + repository = "https://" + repository.substring(4).replace(':', '/'); + if (repository.endsWith(".git")) + repository = repository.substring(0, repository.length() - 4); + return repository + "/tree/" + source.commit(); + })); + } + + /** Returns the commit name of this application version. */ + public Optional<String> commit() { return commit.or(() -> source.map(SourceRevision::commit)); } + /** Returns whether this is unknown */ public boolean isUnknown() { return this.equals(unknown); @@ -144,4 +178,5 @@ public class ApplicationVersion implements Comparable<ApplicationVersion> { return Long.compare(buildNumber().getAsLong(), o.buildNumber().getAsLong()); } + } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java index acfd326a5c0..51be62597cf 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java @@ -364,8 +364,9 @@ public class JobController { /** * Accepts and stores a new application package and test jar pair under a generated application version key. */ - public ApplicationVersion submit(TenantAndApplicationId id, SourceRevision revision, String authorEmail, long projectId, - ApplicationPackage applicationPackage, byte[] testPackageBytes) { + public ApplicationVersion submit(TenantAndApplicationId id, SourceRevision revision, String authorEmail, + Optional<String> sourceUrl, Optional<String> commit, + long projectId, ApplicationPackage applicationPackage, byte[] testPackageBytes) { AtomicReference<ApplicationVersion> version = new AtomicReference<>(); controller.applications().lockApplicationOrThrow(id, application -> { long run = 1 + application.get().latestVersion() @@ -374,7 +375,9 @@ public class JobController { if (applicationPackage.compileVersion().isPresent() && applicationPackage.buildTime().isPresent()) version.set(ApplicationVersion.from(revision, run, authorEmail, applicationPackage.compileVersion().get(), - applicationPackage.buildTime().get())); + applicationPackage.buildTime().get(), + sourceUrl, + commit)); else version.set(ApplicationVersion.from(revision, run, authorEmail)); diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java index acbae53ad2c..b730b63d426 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java @@ -115,6 +115,7 @@ public class ApplicationSerializer { private static final String authorEmailField = "authorEmailField"; private static final String compileVersionField = "compileVersion"; private static final String buildTimeField = "buildTime"; + private static final String sourceUrlField = "sourceUrl"; private static final String lastQueriedField = "lastQueried"; private static final String lastWrittenField = "lastWritten"; private static final String lastQueriesPerSecondField = "lastQueriesPerSecond"; @@ -263,6 +264,8 @@ public class ApplicationSerializer { applicationVersion.authorEmail().ifPresent(email -> object.setString(authorEmailField, email)); applicationVersion.compileVersion().ifPresent(version -> object.setString(compileVersionField, version.toString())); applicationVersion.buildTime().ifPresent(time -> object.setLong(buildTimeField, time.toEpochMilli())); + applicationVersion.sourceUrl().ifPresent(url -> object.setString(sourceUrlField, url)); + applicationVersion.commit().ifPresent(commit -> object.setString(commitField, commit)); } } @@ -478,6 +481,8 @@ public class ApplicationSerializer { Optional<String> authorEmail = Serializers.optionalString(object.field(authorEmailField)); Optional<Version> compileVersion = Serializers.optionalString(object.field(compileVersionField)).map(Version::fromString); Optional<Instant> buildTime = Serializers.optionalInstant(object.field(buildTimeField)); + Optional<String> sourceUrl = Serializers.optionalString(object.field(sourceUrlField)); + Optional<String> commit = Serializers.optionalString(object.field(commitField)); if (authorEmail.isEmpty()) return ApplicationVersion.from(sourceRevision.get(), applicationBuildNumber.getAsLong()); @@ -485,8 +490,7 @@ public class ApplicationSerializer { if (compileVersion.isEmpty() || buildTime.isEmpty()) return ApplicationVersion.from(sourceRevision.get(), applicationBuildNumber.getAsLong(), authorEmail.get()); - return ApplicationVersion.from(sourceRevision.get(), applicationBuildNumber.getAsLong(), authorEmail.get(), - compileVersion.get(), buildTime.get()); + return new ApplicationVersion(sourceRevision, applicationBuildNumber, authorEmail, compileVersion, buildTime, sourceUrl, commit); } private Optional<SourceRevision> sourceRevisionFromSlime(Inspector object) { diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializer.java index b777d6f52ed..8f2b274401c 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializer.java @@ -25,6 +25,7 @@ import java.time.temporal.ChronoUnit; import java.util.EnumMap; import java.util.NavigableMap; import java.util.Optional; +import java.util.OptionalLong; import java.util.TreeMap; import static com.yahoo.vespa.hosted.controller.deployment.RunStatus.aborted; @@ -84,6 +85,7 @@ class RunSerializer { private static final String authorEmailField = "authorEmail"; private static final String compileVersionField = "compileVersion"; private static final String buildTimeField = "buildTime"; + private static final String sourceUrlField = "sourceUrl"; private static final String buildField = "build"; private static final String sourceField = "source"; private static final String lastTestRecordField = "lastTestRecord"; @@ -158,16 +160,14 @@ class RunSerializer { versionObject.field(branchField).asString(), versionObject.field(commitField).asString()); long buildNumber = versionObject.field(buildField).asLong(); - - if ( ! versionObject.field(authorEmailField).valid()) - return ApplicationVersion.from(revision, buildNumber); - - if ( ! versionObject.field(compileVersionField).valid() || ! versionObject.field(buildTimeField).valid()) - return ApplicationVersion.from(revision, buildNumber, versionObject.field(authorEmailField).asString()); - - return ApplicationVersion.from(revision, buildNumber, versionObject.field(authorEmailField).asString(), - Version.fromString(versionObject.field(compileVersionField).asString()), - Instant.ofEpochMilli(versionObject.field(buildTimeField).asLong())); + Optional<String> authorEmail = Serializers.optionalString(versionObject.field(authorEmailField)); + Optional<Version> compileVersion = Serializers.optionalString(versionObject.field(compileVersionField)).map(Version::fromString); + Optional<Instant> buildTime = Serializers.optionalInstant(versionObject.field(buildTimeField)); + Optional<String> sourceUrl = Serializers.optionalString(versionObject.field(sourceUrlField)); + Optional<String> commit = Serializers.optionalString(versionObject.field(commitField)); + + return new ApplicationVersion(Optional.of(revision), OptionalLong.of(buildNumber), authorEmail, + compileVersion, buildTime, sourceUrl, commit); } Slime toSlime(Iterable<Run> runs) { @@ -224,6 +224,8 @@ class RunSerializer { applicationVersion.authorEmail().ifPresent(email -> versionsObject.setString(authorEmailField, email)); applicationVersion.compileVersion().ifPresent(version -> versionsObject.setString(compileVersionField, version.toString())); applicationVersion.buildTime().ifPresent(time -> versionsObject.setLong(buildTimeField, time.toEpochMilli())); + applicationVersion.sourceUrl().ifPresent(url -> versionsObject.setString(sourceUrlField, url)); + applicationVersion.commit().ifPresent(commit -> versionsObject.setString(commitField, commit)); } static String valueOf(Step step) { diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java index 0445b6c6230..5c5955cbe4f 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java @@ -854,7 +854,11 @@ public class ApplicationApiHandler extends LoggingRequestHandler { "/instance/" + instance.id().instance().value() + "/job/", request.getUri()).toString()); - application.latestVersion().ifPresent(version -> sourceRevisionToSlime(version.source(), object.setObject("source"))); + application.latestVersion().ifPresent(version -> { + sourceRevisionToSlime(version.source(), object.setObject("source")); + version.sourceUrl().ifPresent(url -> object.setString("sourceUrl", url)); + version.commit().ifPresent(commit -> object.setString("commit", commit)); + }); application.projectId().ifPresent(id -> object.setLong("projectId", id)); @@ -1077,6 +1081,8 @@ public class ApplicationApiHandler extends LoggingRequestHandler { object.setLong("buildNumber", applicationVersion.buildNumber().getAsLong()); object.setString("hash", applicationVersion.id()); sourceRevisionToSlime(applicationVersion.source(), object.setObject("source")); + applicationVersion.sourceUrl().ifPresent(url -> object.setString("sourceUrl", url)); + applicationVersion.commit().ifPresent(commit -> object.setString("commit", commit)); } } @@ -1948,6 +1954,8 @@ public class ApplicationApiHandler extends LoggingRequestHandler { SourceRevision sourceRevision = toSourceRevision(submitOptions); String authorEmail = submitOptions.field("authorEmail").asString(); long projectId = Math.max(1, submitOptions.field("projectId").asLong()); + Optional<String> commit = submitOptions.field("commit").valid() ? Optional.of(submitOptions.field("commit").asString()) : Optional.empty(); + Optional<String> sourceUrl = submitOptions.field("sourceUrl").valid() ? Optional.of(submitOptions.field("sourceUrl").asString()) : Optional.empty(); ApplicationPackage applicationPackage = new ApplicationPackage(dataParts.get(EnvironmentResource.APPLICATION_ZIP), true); @@ -1960,6 +1968,8 @@ public class ApplicationApiHandler extends LoggingRequestHandler { application, sourceRevision, authorEmail, + sourceUrl, + commit, projectId, applicationPackage, dataParts.get(EnvironmentResource.APPLICATION_TEST_ZIP)); diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java index 33038e3ea69..8c82308e894 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java @@ -416,6 +416,8 @@ class JobControllerApiHandlerHelper { sourceObject.setString("gitRepository", version.source().get().repository()); sourceObject.setString("gitBranch", version.source().get().branch()); sourceObject.setString("gitCommit", version.source().get().commit()); + version.sourceUrl().ifPresent(url -> versionObject.setString("sourceUrl", url)); + version.commit().ifPresent(commit -> versionObject.setString("commit", commit)); } /** @@ -472,11 +474,14 @@ class JobControllerApiHandlerHelper { * @return Response with the new application version */ static HttpResponse submitResponse(JobController jobController, String tenant, String application, - SourceRevision sourceRevision, String authorEmail, long projectId, + SourceRevision sourceRevision, String authorEmail, Optional<String> sourceUrl, + Optional<String> commit, long projectId, ApplicationPackage applicationPackage, byte[] testPackage) { ApplicationVersion version = jobController.submit(TenantAndApplicationId.from(tenant, application), sourceRevision, authorEmail, + sourceUrl, + commit, projectId, applicationPackage, testPackage); @@ -601,8 +606,9 @@ class JobControllerApiHandlerHelper { private static void toSlime(Cursor versionObject, ApplicationVersion version) { version.buildNumber().ifPresent(id -> versionObject.setLong("id", id)); version.source().ifPresent(source -> versionObject.setString("commit", source.commit())); - version.source().flatMap(source -> toUrl(source)).ifPresent(source -> versionObject.setString("source", source.toString())); version.compileVersion().ifPresent(platform -> versionObject.setString("compileVersion", platform.toFullString())); + version.sourceUrl().ifPresent(url -> versionObject.setString("sourceUrl", url)); + version.commit().ifPresent(commit -> versionObject.setString("commit", commit)); } private static void toSlime(Cursor versionsObject, Versions versions) { @@ -612,20 +618,5 @@ class JobControllerApiHandlerHelper { versions.sourceApplication().ifPresent(application -> toSlime(versionsObject.setObject("sourceApplication"), application)); } - // TODO jonmv: Remove this when source url is stored instead of SourceRevision. - private static Optional<URI> toUrl(SourceRevision source) { - try { - String repository = source.repository(); - if (repository.startsWith("git@")) - repository = "https://" + repository.substring(4); - if (repository.endsWith(".git")) - repository = repository.substring(0, repository.length() - 4); - return Optional.of(URI.create(repository + "/tree/" + source.commit())); - } - catch (RuntimeException e) { - return Optional.empty(); - } - } - } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java index 120b9bad468..035b6127b41 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java @@ -211,7 +211,7 @@ public class DeploymentContext { .requireApplication(applicationId) .projectId() .orElse(1000); // These are really set through submission, so just pick one if it hasn't been set. - lastSubmission = jobs.submit(applicationId, sourceRevision, "a@b", projectId, applicationPackage, new byte[0]); + lastSubmission = jobs.submit(applicationId, sourceRevision, "a@b", Optional.empty(), Optional.empty(), projectId, applicationPackage, new byte[0]); return this; } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/JobRunnerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/JobRunnerTest.java index 51da78c835e..bdab81b3948 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/JobRunnerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/JobRunnerTest.java @@ -87,7 +87,7 @@ public class JobRunnerTest { TenantAndApplicationId appId = tester.createApplication("tenant", "real", "default").id(); ApplicationId id = appId.defaultInstance(); - jobs.submit(appId, versions.targetApplication().source().get(), "a@b", 2, applicationPackage, new byte[0]); + jobs.submit(appId, versions.targetApplication().source().get(), "a@b", Optional.empty(), Optional.empty(), 2, applicationPackage, new byte[0]); jobs.start(id, systemTest, versions); try { @@ -119,7 +119,7 @@ public class JobRunnerTest { TenantAndApplicationId appId = tester.createApplication("tenant", "real", "default").id(); ApplicationId id = appId.defaultInstance(); - jobs.submit(appId, versions.targetApplication().source().get(), "a@b", 2, applicationPackage, new byte[0]); + jobs.submit(appId, versions.targetApplication().source().get(), "a@b", Optional.empty(), Optional.empty(), 2, applicationPackage, new byte[0]); Supplier<Run> run = () -> jobs.last(id, systemTest).get(); jobs.start(id, systemTest, versions); @@ -227,7 +227,7 @@ public class JobRunnerTest { TenantAndApplicationId appId = tester.createApplication("tenant", "real", "default").id(); ApplicationId id = appId.defaultInstance(); - jobs.submit(appId, versions.targetApplication().source().get(), "a@b", 2, applicationPackage, new byte[0]); + jobs.submit(appId, versions.targetApplication().source().get(), "a@b", Optional.empty(), Optional.empty(), 2, applicationPackage, new byte[0]); RunId runId = new RunId(id, systemTest, 1); jobs.start(id, systemTest, versions); @@ -265,7 +265,7 @@ public class JobRunnerTest { TenantAndApplicationId appId = tester.createApplication("tenant", "real", "default").id(); ApplicationId instanceId = appId.defaultInstance(); JobId jobId = new JobId(instanceId, systemTest); - jobs.submit(appId, versions.targetApplication().source().get(), "a@b", 2, applicationPackage, new byte[0]); + jobs.submit(appId, versions.targetApplication().source().get(), "a@b", Optional.empty(), Optional.empty(), 2, applicationPackage, new byte[0]); assertFalse(jobs.lastSuccess(jobId).isPresent()); for (int i = 0; i < jobs.historyLength(); i++) { @@ -343,7 +343,7 @@ public class JobRunnerTest { TenantAndApplicationId appId = tester.createApplication("tenant", "real", "default").id(); ApplicationId id = appId.defaultInstance(); - jobs.submit(appId, versions.targetApplication().source().get(), "a@b", 2, applicationPackage, new byte[0]); + jobs.submit(appId, versions.targetApplication().source().get(), "a@b", Optional.empty(), Optional.empty(), 2, applicationPackage, new byte[0]); jobs.start(id, systemTest, versions); tester.clock().advance(JobRunner.jobTimeout.plus(Duration.ofSeconds(1))); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java index e485e60815b..c4cb01f8164 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java @@ -84,7 +84,15 @@ public class ApplicationSerializerTest { OptionalLong projectId = OptionalLong.of(123L); List<Deployment> deployments = new ArrayList<>(); - ApplicationVersion applicationVersion1 = ApplicationVersion.from(new SourceRevision("repo1", "branch1", "commit1"), 31); + ApplicationVersion applicationVersion1 = new ApplicationVersion(Optional.of(new SourceRevision("git@github:org/repo.git", "branch1", "commit1")), + OptionalLong.of(31), + Optional.of("william@shakespeare"), + Optional.of(Version.fromString("1.2.3")), + Optional.of(Instant.ofEpochMilli(666)), + Optional.empty(), + Optional.of("best commit")); + assertEquals("https://github/org/repo/tree/commit1", applicationVersion1.sourceUrl().get()); + ApplicationVersion applicationVersion2 = ApplicationVersion .from(new SourceRevision("repo1", "branch1", "commit1"), 32, "a@b", Version.fromString("6.3.1"), Instant.ofEpochMilli(496)); @@ -138,6 +146,10 @@ public class ApplicationSerializerTest { assertEquals(original.id(), serialized.id()); assertEquals(original.createdAt(), serialized.createdAt()); assertEquals(original.latestVersion(), serialized.latestVersion()); + assertEquals(original.latestVersion().get().authorEmail(), serialized.latestVersion().get().authorEmail()); + assertEquals(original.latestVersion().get().buildTime(), serialized.latestVersion().get().buildTime()); + assertEquals(original.latestVersion().get().sourceUrl(), serialized.latestVersion().get().sourceUrl()); + assertEquals(original.latestVersion().get().commit(), serialized.latestVersion().get().commit()); assertEquals(original.deploymentSpec().xmlForm(), serialized.deploymentSpec().xmlForm()); assertEquals(original.validationOverrides().xmlForm(), serialized.validationOverrides().xmlForm()); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializerTest.java index 1cd361b4d74..c1f8e2f0ffb 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializerTest.java @@ -77,14 +77,19 @@ public class RunSerializerTest { assertEquals(running, run.status()); assertEquals(3, run.lastTestLogEntry()); assertEquals(new Version(1, 2, 3), run.versions().targetPlatform()); - assertEquals(ApplicationVersion.from(new SourceRevision("git@github.com:user/repo.git", - "master", - "f00bad"), - 123, - "a@b", - Version.fromString("6.3.1"), - Instant.ofEpochMilli(100)), - run.versions().targetApplication()); + ApplicationVersion applicationVersion = ApplicationVersion.from(new SourceRevision("git@github.com:user/repo.git", + "master", + "f00bad"), + 123, + "a@b", + Version.fromString("6.3.1"), + Instant.ofEpochMilli(100)); + assertEquals(applicationVersion, run.versions().targetApplication()); + assertEquals(applicationVersion.authorEmail(), run.versions().targetApplication().authorEmail()); + assertEquals(applicationVersion.buildTime(), run.versions().targetApplication().buildTime()); + assertEquals(applicationVersion.compileVersion(), run.versions().targetApplication().compileVersion()); + assertEquals("f00bad", run.versions().targetApplication().commit().get()); + assertEquals("https://github.com/user/repo/tree/f00bad", run.versions().targetApplication().sourceUrl().get()); assertEquals(new Version(1, 2, 2), run.versions().sourcePlatform().get()); assertEquals(ApplicationVersion.from(new SourceRevision("git@github.com:user/repo.git", "master", diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application2-with-patches.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application2-with-patches.json index 16a5529a2ad..7b84780d64e 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application2-with-patches.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application2-with-patches.json @@ -9,7 +9,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "projectId": 1000, "compileVersion": "6.1.0", @@ -33,7 +35,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" } }, "deploymentJobs": [ @@ -50,7 +54,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -69,7 +75,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -88,7 +96,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application2.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application2.json index 6382824175d..3242fd343de 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application2.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application2.json @@ -9,7 +9,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "projectId": 1000, "compileVersion": "6.1.0", @@ -32,7 +34,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" } }, "deploymentJobs": [ @@ -49,7 +53,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -68,7 +74,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -87,7 +95,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview-2.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview-2.json index 8f68bde1a21..62d83ffe8e3 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview-2.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview-2.json @@ -21,7 +21,7 @@ "targetApplication": { "commit": "commit1", "id": 3, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" }, "sourcePlatform": "6.1.0", @@ -29,7 +29,7 @@ "sourceApplication": { "commit": "commit1", "id": 2, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" } }, @@ -86,7 +86,7 @@ "targetApplication": { "commit": "commit1", "id": 2, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" }, "sourcePlatform": "6.1.0", @@ -94,7 +94,7 @@ "sourceApplication": { "commit": "commit1", "id": 1, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" } }, @@ -151,7 +151,7 @@ "targetApplication": { "commit": "commit1", "id": 1, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" }, "targetPlatform": "6.1.0" @@ -221,7 +221,7 @@ "targetApplication": { "commit": "commit1", "id": 3, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" }, "sourcePlatform": "6.1.0", @@ -229,7 +229,7 @@ "sourceApplication": { "commit": "commit1", "id": 1, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" } }, @@ -244,7 +244,7 @@ "targetApplication": { "commit": "commit1", "id": 3, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" }, "sourcePlatform": "6.1.0", @@ -252,7 +252,7 @@ "sourceApplication": { "commit": "commit1", "id": 1, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" } }, @@ -317,7 +317,7 @@ "targetApplication": { "commit": "commit1", "id": 3, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" }, "sourcePlatform": "6.1.0", @@ -325,7 +325,7 @@ "sourceApplication": { "commit": "commit1", "id": 1, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" } }, @@ -390,7 +390,7 @@ "targetApplication": { "commit": "commit1", "id": 3, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" }, "sourcePlatform": "6.1.0", @@ -398,7 +398,7 @@ "sourceApplication": { "commit": "commit1", "id": 2, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" } }, @@ -463,7 +463,7 @@ "targetApplication": { "commit": "commit1", "id": 2, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" }, "sourcePlatform": "6.1.0", @@ -471,7 +471,7 @@ "sourceApplication": { "commit": "commit1", "id": 1, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" } }, @@ -536,7 +536,7 @@ "targetApplication": { "commit": "commit1", "id": 1, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" }, "targetPlatform": "6.1.0" @@ -611,7 +611,7 @@ "currentApplication": { "commit": "commit1", "id": 3, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" }, "type": "deployment", @@ -622,7 +622,7 @@ "targetApplication": { "commit": "commit1", "id": 3, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" }, "sourcePlatform": "6.1.0", @@ -630,7 +630,7 @@ "sourceApplication": { "commit": "commit1", "id": 2, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" } }, @@ -678,7 +678,7 @@ "targetApplication": { "commit": "commit1", "id": 2, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" }, "sourcePlatform": "6.1.0", @@ -686,7 +686,7 @@ "sourceApplication": { "commit": "commit1", "id": 1, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" } }, @@ -735,7 +735,7 @@ "targetApplication": { "commit": "commit1", "id": 1, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" }, "targetPlatform": "6.1.0" @@ -798,7 +798,7 @@ "targetApplication": { "commit": "commit1", "id": 3, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" }, "sourcePlatform": "6.1.0", @@ -806,7 +806,7 @@ "sourceApplication": { "commit": "commit1", "id": 3, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" } } @@ -820,7 +820,7 @@ "targetApplication": { "commit": "commit1", "id": 2, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" }, "sourcePlatform": "6.1.0", @@ -828,7 +828,7 @@ "sourceApplication": { "commit": "commit1", "id": 2, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" } }, @@ -869,7 +869,7 @@ "targetApplication": { "commit": "commit1", "id": 1, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" }, "sourcePlatform": "6.1.0", @@ -877,7 +877,7 @@ "sourceApplication": { "commit": "commit1", "id": 1, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" } }, @@ -931,7 +931,7 @@ "targetApplication": { "commit": "commit1", "id": 3, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" }, "sourcePlatform": "6.1.0", @@ -939,7 +939,7 @@ "sourceApplication": { "commit": "commit1", "id": 2, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" } } @@ -948,7 +948,7 @@ "currentApplication": { "commit": "commit1", "id": 2, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" }, "type": "deployment", @@ -959,7 +959,7 @@ "targetApplication": { "commit": "commit1", "id": 2, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" }, "sourcePlatform": "6.1.0", @@ -967,7 +967,7 @@ "sourceApplication": { "commit": "commit1", "id": 1, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" } }, @@ -1016,7 +1016,7 @@ "targetApplication": { "commit": "commit1", "id": 1, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" }, "targetPlatform": "6.1.0" @@ -1079,7 +1079,7 @@ "targetApplication": { "commit": "commit1", "id": 3, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" }, "sourcePlatform": "6.1.0", @@ -1087,7 +1087,7 @@ "sourceApplication": { "commit": "commit1", "id": 1, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" } } @@ -1096,7 +1096,7 @@ "currentApplication": { "commit": "commit1", "id": 1, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" }, "type": "deployment", @@ -1107,7 +1107,7 @@ "targetApplication": { "commit": "commit1", "id": 2, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" }, "sourcePlatform": "6.1.0", @@ -1115,7 +1115,7 @@ "sourceApplication": { "commit": "commit1", "id": 1, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" } }, @@ -1164,7 +1164,7 @@ "targetApplication": { "commit": "commit1", "id": 1, - "source": "repository1/tree/commit1", + "sourceUrl": "repository1/tree/commit1", "compileVersion": "6.1.0" }, "targetPlatform": "6.1.0" diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview.json index ba41468be24..baace75bf6c 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview.json @@ -29,8 +29,8 @@ "targetApplication": { "id": 4, "commit": "commit1", - "source": "repository1/tree/commit1", - "compileVersion": "6.1.0" + "compileVersion": "6.1.0", + "sourceUrl": "repository1/tree/commit1" } }, "steps": [ @@ -87,8 +87,8 @@ "targetApplication": { "id": 1, "commit": "commit1", - "source": "repository1/tree/commit1", - "compileVersion": "6.1.0" + "compileVersion": "6.1.0", + "sourceUrl": "repository1/tree/commit1" } }, "steps": [ @@ -157,8 +157,8 @@ "targetApplication": { "id": 4, "commit": "commit1", - "source": "repository1/tree/commit1", - "compileVersion": "6.1.0" + "compileVersion": "6.1.0", + "sourceUrl": "repository1/tree/commit1" } }, "steps": [ @@ -223,8 +223,8 @@ "targetApplication": { "id": 1, "commit": "commit1", - "source": "repository1/tree/commit1", - "compileVersion": "6.1.0" + "compileVersion": "6.1.0", + "sourceUrl": "repository1/tree/commit1" } }, "steps": [ @@ -298,8 +298,8 @@ "targetApplication": { "id": 4, "commit": "commit1", - "source": "repository1/tree/commit1", - "compileVersion": "6.1.0" + "compileVersion": "6.1.0", + "sourceUrl": "repository1/tree/commit1" } } } @@ -316,8 +316,8 @@ "targetApplication": { "id": 1, "commit": "commit1", - "source": "repository1/tree/commit1", - "compileVersion": "6.1.0" + "compileVersion": "6.1.0", + "sourceUrl": "repository1/tree/commit1" } }, "steps": [ @@ -375,8 +375,8 @@ "targetApplication": { "id": 4, "commit": "commit1", - "source": "repository1/tree/commit1", - "compileVersion": "6.1.0" + "compileVersion": "6.1.0", + "sourceUrl": "repository1/tree/commit1" } } } @@ -392,7 +392,7 @@ "targetApplication": { "id": 1, "commit": "commit1", - "source": "repository1/tree/commit1" + "sourceUrl": "repository1/tree/commit1" } }, "steps": [ @@ -450,8 +450,8 @@ "targetApplication": { "id": 4, "commit": "commit1", - "source": "repository1/tree/commit1", - "compileVersion": "6.1.0" + "compileVersion": "6.1.0", + "sourceUrl": "repository1/tree/commit1" } } } @@ -467,8 +467,8 @@ "targetApplication": { "id": 1, "commit": "commit1", - "source": "repository1/tree/commit1", - "compileVersion": "6.1.0" + "compileVersion": "6.1.0", + "sourceUrl": "repository1/tree/commit1" } }, "steps": [ @@ -559,8 +559,8 @@ "targetApplication": { "id": 4, "commit": "commit1", - "source": "repository1/tree/commit1", - "compileVersion": "6.1.0" + "compileVersion": "6.1.0", + "sourceUrl": "repository1/tree/commit1" } } } @@ -585,8 +585,8 @@ "targetApplication": { "id": 4, "commit": "commit1", - "source": "repository1/tree/commit1", - "compileVersion": "6.1.0" + "compileVersion": "6.1.0", + "sourceUrl": "repository1/tree/commit1" } } } @@ -611,8 +611,8 @@ "targetApplication": { "id": 4, "commit": "commit1", - "source": "repository1/tree/commit1", - "compileVersion": "6.1.0" + "compileVersion": "6.1.0", + "sourceUrl": "repository1/tree/commit1" } } } @@ -621,4 +621,3 @@ } ] } - diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/instance-with-routing-policy.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/instance-with-routing-policy.json index ff3bf084069..18f5127718f 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/instance-with-routing-policy.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/instance-with-routing-policy.json @@ -8,6 +8,8 @@ "gitBranch": "master", "gitCommit": "commit1" }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1", "projectId": 1000, "deploymentJobs": [ { @@ -23,7 +25,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -38,7 +42,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -53,7 +59,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -72,7 +80,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -87,7 +97,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -102,7 +114,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -121,7 +135,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -136,7 +152,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -151,7 +169,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/instance-without-change-multiple-deployments.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/instance-without-change-multiple-deployments.json index 79bb0333aa3..259fe814146 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/instance-without-change-multiple-deployments.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/instance-without-change-multiple-deployments.json @@ -8,6 +8,8 @@ "gitBranch": "master", "gitCommit": "commit1" }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1", "projectId": 1000, "deploymentJobs": [ { @@ -23,7 +25,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -38,7 +42,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -53,7 +59,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -72,7 +80,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -87,7 +97,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -102,7 +114,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -121,7 +135,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -136,7 +152,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -151,7 +169,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -170,7 +190,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -185,7 +207,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -200,7 +224,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/instance.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/instance.json index e064c9e60de..d1197be4392 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/instance.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/instance.json @@ -8,6 +8,8 @@ "gitBranch": "master", "gitCommit": "commit1" }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1", "projectId": 123, "deploying": { "revision": { @@ -17,7 +19,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" } }, "deploymentJobs": [ @@ -34,7 +38,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -49,7 +55,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -64,7 +72,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -83,7 +93,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -98,7 +110,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -113,7 +127,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -132,7 +148,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -147,7 +165,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -162,7 +182,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -181,7 +203,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/instance1-recursive.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/instance1-recursive.json index 8259bd611ff..fb77cfef270 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/instance1-recursive.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/instance1-recursive.json @@ -8,6 +8,8 @@ "gitBranch": "master", "gitCommit": "commit1" }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1", "projectId": 123, "deploying": { "revision": { @@ -17,7 +19,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" } }, "deploymentJobs": [ @@ -34,7 +38,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -49,7 +55,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -64,7 +72,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -83,7 +93,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -98,7 +110,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -113,7 +127,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -132,7 +148,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -147,7 +165,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -162,7 +182,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" @@ -181,7 +203,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "reason": "unknown reason", "at": "(ignore)" diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobs.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobs.json index b73c36c804b..32031563d89 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobs.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobs.json @@ -13,7 +13,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "at": "(ignore)", "deploying": "0 of 3 complete" @@ -27,7 +29,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" } }, "deployments": [ @@ -49,7 +53,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "steps": { "deployTester": "unfinished", @@ -79,7 +85,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "steps": { "deployTester": "succeeded", @@ -117,7 +125,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "steps": { "deployTester": "unfinished", @@ -149,7 +159,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "steps": { "deployTester": "succeeded", @@ -187,7 +199,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "tasks": { "system-test": "running", @@ -207,7 +221,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "steps": { "deployTester": "succeeded", @@ -243,7 +259,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "steps": { "deployTester": "unfinished", @@ -275,7 +293,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "steps": { "deployTester": "unfinished", diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/overview-user-instance.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/overview-user-instance.json index 6d5a1f3812b..cf47e8671b0 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/overview-user-instance.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/overview-user-instance.json @@ -37,6 +37,8 @@ "gitCommit": "commit1", "gitBranch": "master" }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1", "hash": "1.0.3-commit1" }, "completed": "0 of 0 complete" diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/overview.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/overview.json index 6a7ea87d6a8..b6a1bade306 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/overview.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/overview.json @@ -13,7 +13,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "at": 1000, "deploying": "0 of 3 complete" @@ -27,7 +29,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" } }, "deployments": [ @@ -42,7 +46,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "verified": false, "status": "verifying" @@ -59,7 +65,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "verified": false, "status": "pending" @@ -74,7 +82,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "verified": true, "status": "pending" @@ -97,7 +107,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "currentPlatform": "6.1", "currentApplication": { @@ -107,7 +119,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "steps": { "deployTester": "succeeded", @@ -141,7 +155,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "currentPlatform": "6.1", "currentApplication": { @@ -151,7 +167,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "steps": { "deployTester": "succeeded", @@ -185,7 +203,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "steps": { "deployTester": "succeeded", @@ -221,7 +241,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "currentPlatform": "6.1", "currentApplication": { @@ -231,7 +253,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "tasks": { "cooldown": "failed" @@ -251,7 +275,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "currentPlatform": "6.1", "currentApplication": { @@ -261,7 +287,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "steps": { "deployTester": "succeeded", @@ -293,7 +321,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "currentPlatform": "6.1", "currentApplication": { @@ -303,7 +333,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "steps": { "deployTester": "succeeded", @@ -335,7 +367,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "currentPlatform": "6.1", "currentApplication": { @@ -345,7 +379,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "steps": { "deployTester": "succeeded", @@ -381,7 +417,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "currentPlatform": "6.1", "currentApplication": { @@ -391,7 +429,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "steps": { "deployTester": "succeeded", @@ -427,7 +467,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "steps": { "deployTester": "succeeded", @@ -467,7 +509,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "currentPlatform": "6.1", "currentApplication": { @@ -477,7 +521,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "steps": { "deployTester": "succeeded", @@ -508,7 +554,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "currentPlatform": "6.1", "currentApplication": { @@ -518,7 +566,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "steps": { "deployTester": "succeeded", @@ -550,7 +600,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "steps": { "deployTester": "succeeded", @@ -584,7 +636,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "currentPlatform": "6.1", "currentApplication": { @@ -594,7 +648,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "tasks": { "us-central-1": "running", @@ -615,7 +671,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "currentPlatform": "6.1", "currentApplication": { @@ -625,7 +683,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "steps": { "deployTester": "succeeded", @@ -653,7 +713,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "currentPlatform": "6.1", "currentApplication": { @@ -663,7 +725,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "steps": { "deployTester": "succeeded", @@ -693,7 +757,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "currentPlatform": "6.1", "currentApplication": { @@ -703,7 +769,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "tasks": { "us-central-1": "running" @@ -722,7 +790,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "currentPlatform": "6.1", "currentApplication": { @@ -732,7 +802,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "steps": { "deployTester": "succeeded", @@ -764,7 +836,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "steps": { "deployTester": "succeeded", @@ -798,7 +872,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "currentPlatform": "6.1", "currentApplication": { @@ -808,7 +884,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "tasks": { "staging-test": "failed", @@ -828,7 +906,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "currentPlatform": "6.1", "currentApplication": { @@ -838,7 +918,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "steps": { "deployTester": "failed", @@ -866,7 +948,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "steps": { "deployTester": "succeeded", diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/staging-runs.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/staging-runs.json index fbc480d6b03..856dff7f9f8 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/staging-runs.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/staging-runs.json @@ -1,214 +1,232 @@ { "1": { - "id": 1, - "status": "success", - "start": 0, - "end": 0, "wantedPlatform": "6.1", + "log": "https://some.url:43/root/run/1", "wantedApplication": { - "hash": "1.0.1-commit1", + "sourceUrl": "repository1/tree/commit1", "build": 1, + "commit": "commit1", "source": { "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" - } + "gitCommit": "commit1", + "gitBranch": "master" + }, + "hash": "1.0.1-commit1" }, + "start": 0, + "end": 0, + "id": 1, "steps": { "deployInitialReal": "succeeded", "installInitialReal": "succeeded", - "deployReal": "succeeded", - "installReal": "succeeded", + "startTests": "succeeded", "deployTester": "succeeded", + "report": "succeeded", "installTester": "succeeded", - "startTests": "succeeded", + "deployReal": "succeeded", + "installReal": "succeeded", + "deactivateTester": "succeeded", "endTests": "succeeded", "copyVespaLogs": "succeeded", - "deactivateReal": "succeeded", - "deactivateTester": "succeeded", - "report": "succeeded" + "deactivateReal": "succeeded" }, "tasks": { - "deploy": "succeeded", + "test": "succeeded", "install": "succeeded", - "test": "succeeded" + "deploy": "succeeded" }, - "log": "https://some.url:43/root/run/1" + "status": "success" }, "2": { - "id": 2, - "status": "success", - "start": 1000, - "end": 1000, "wantedPlatform": "6.1", + "currentPlatform": "6.1", + "log": "https://some.url:43/root/run/2", "wantedApplication": { - "hash": "1.0.2-commit1", + "sourceUrl": "repository1/tree/commit1", "build": 2, + "commit": "commit1", "source": { "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" - } + "gitCommit": "commit1", + "gitBranch": "master" + }, + "hash": "1.0.2-commit1" }, - "currentPlatform": "6.1", "currentApplication": { - "hash": "1.0.1-commit1", + "sourceUrl": "repository1/tree/commit1", "build": 1, + "commit": "commit1", "source": { "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" - } + "gitCommit": "commit1", + "gitBranch": "master" + }, + "hash": "1.0.1-commit1" }, + "start": 1000, + "end": 1000, + "id": 2, "steps": { "deployInitialReal": "succeeded", "installInitialReal": "succeeded", - "deployReal": "succeeded", - "installReal": "succeeded", + "startTests": "succeeded", "deployTester": "succeeded", + "report": "succeeded", "installTester": "succeeded", - "startTests": "succeeded", + "deployReal": "succeeded", + "installReal": "succeeded", + "deactivateTester": "succeeded", "endTests": "succeeded", "copyVespaLogs": "succeeded", - "deactivateReal": "succeeded", - "deactivateTester": "succeeded", - "report": "succeeded" + "deactivateReal": "succeeded" }, "tasks": { - "deploy": "succeeded", + "test": "succeeded", "install": "succeeded", - "test": "succeeded" + "deploy": "succeeded" }, - "log": "https://some.url:43/root/run/2" + "status": "success" }, "3": { - "id": 3, - "status": "success", - "start": 2000, - "end": 2000, "wantedPlatform": "6.1", + "currentPlatform": "6.1", + "log": "https://some.url:43/root/run/3", "wantedApplication": { - "hash": "1.0.3-commit1", + "sourceUrl": "repository1/tree/commit1", "build": 3, + "commit": "commit1", "source": { "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" - } + "gitCommit": "commit1", + "gitBranch": "master" + }, + "hash": "1.0.3-commit1" }, - "currentPlatform": "6.1", "currentApplication": { - "hash": "1.0.2-commit1", + "sourceUrl": "repository1/tree/commit1", "build": 2, + "commit": "commit1", "source": { "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" - } + "gitCommit": "commit1", + "gitBranch": "master" + }, + "hash": "1.0.2-commit1" }, + "start": 2000, + "end": 2000, + "id": 3, "steps": { "deployInitialReal": "succeeded", "installInitialReal": "succeeded", - "deployReal": "succeeded", - "installReal": "succeeded", + "startTests": "succeeded", "deployTester": "succeeded", + "report": "succeeded", "installTester": "succeeded", - "startTests": "succeeded", + "deployReal": "succeeded", + "installReal": "succeeded", + "deactivateTester": "succeeded", "endTests": "succeeded", "copyVespaLogs": "succeeded", - "deactivateReal": "succeeded", - "deactivateTester": "succeeded", - "report": "succeeded" + "deactivateReal": "succeeded" }, "tasks": { - "deploy": "succeeded", + "test": "succeeded", "install": "succeeded", - "test": "succeeded" + "deploy": "succeeded" }, - "log": "https://some.url:43/root/run/3" + "status": "success" }, "4": { - "id": 4, - "status": "installationFailed", - "start": 2000, - "end": 2000, "wantedPlatform": "6.1", + "currentPlatform": "6.1", + "log": "https://some.url:43/root/run/4", "wantedApplication": { - "hash": "1.0.3-commit1", + "sourceUrl": "repository1/tree/commit1", "build": 3, + "commit": "commit1", "source": { "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" - } + "gitCommit": "commit1", + "gitBranch": "master" + }, + "hash": "1.0.3-commit1" }, - "currentPlatform": "6.1", "currentApplication": { - "hash": "1.0.1-commit1", + "sourceUrl": "repository1/tree/commit1", "build": 1, + "commit": "commit1", "source": { "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" - } + "gitCommit": "commit1", + "gitBranch": "master" + }, + "hash": "1.0.1-commit1" }, + "start": 2000, + "end": 2000, + "id": 4, "steps": { "deployInitialReal": "succeeded", "installInitialReal": "failed", - "deployReal": "unfinished", - "installReal": "unfinished", + "startTests": "unfinished", "deployTester": "succeeded", + "report": "succeeded", "installTester": "unfinished", - "startTests": "unfinished", + "deployReal": "unfinished", + "installReal": "unfinished", + "deactivateTester": "succeeded", "endTests": "unfinished", "copyVespaLogs": "succeeded", - "deactivateReal": "succeeded", - "deactivateTester": "succeeded", - "report": "succeeded" + "deactivateReal": "succeeded" }, "tasks": {}, - "log": "https://some.url:43/root/run/4" + "status": "installationFailed" }, "5": { - "id": 5, - "status": "installationFailed", - "start": 102000, - "end": 102000, "wantedPlatform": "6.1", + "currentPlatform": "6.1", + "log": "https://some.url:43/root/run/5", "wantedApplication": { - "hash": "1.0.3-commit1", + "sourceUrl": "repository1/tree/commit1", "build": 3, + "commit": "commit1", "source": { "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" - } + "gitCommit": "commit1", + "gitBranch": "master" + }, + "hash": "1.0.3-commit1" }, - "currentPlatform": "6.1", "currentApplication": { - "hash": "1.0.1-commit1", + "sourceUrl": "repository1/tree/commit1", "build": 1, + "commit": "commit1", "source": { "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" - } + "gitCommit": "commit1", + "gitBranch": "master" + }, + "hash": "1.0.1-commit1" }, + "start": 102000, + "end": 102000, + "id": 5, "steps": { "deployInitialReal": "succeeded", "installInitialReal": "failed", - "deployReal": "unfinished", - "installReal": "unfinished", + "startTests": "unfinished", "deployTester": "succeeded", + "report": "succeeded", "installTester": "unfinished", - "startTests": "unfinished", + "deployReal": "unfinished", + "installReal": "unfinished", + "deactivateTester": "succeeded", "endTests": "unfinished", "copyVespaLogs": "succeeded", - "deactivateReal": "succeeded", - "deactivateTester": "succeeded", - "report": "succeeded" + "deactivateReal": "succeeded" }, "tasks": {}, - "log": "https://some.url:43/root/run/5" + "status": "installationFailed" } } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/system-test-job.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/system-test-job.json index a572fa04781..2c12db0036b 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/system-test-job.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/system-test-job.json @@ -12,7 +12,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "steps": { "deployTester": "succeeded", @@ -45,7 +47,9 @@ "gitRepository": "repository1", "gitBranch": "master", "gitCommit": "commit1" - } + }, + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" }, "steps": { "deployTester": "unfinished", diff --git a/hosted-api/src/main/java/ai/vespa/hosted/api/ControllerHttpClient.java b/hosted-api/src/main/java/ai/vespa/hosted/api/ControllerHttpClient.java index c5626f7d690..4559deddeda 100644 --- a/hosted-api/src/main/java/ai/vespa/hosted/api/ControllerHttpClient.java +++ b/hosted-api/src/main/java/ai/vespa/hosted/api/ControllerHttpClient.java @@ -291,6 +291,7 @@ public abstract class ControllerHttpClient { rootObject.setString("repository", submission.repository()); rootObject.setString("branch", submission.branch()); rootObject.setString("commit", submission.commit()); + submission.sourceUrl().ifPresent(url -> rootObject.setString("sourceUrl", url)); rootObject.setString("authorEmail", submission.authorEmail()); submission.projectId().ifPresent(projectId -> rootObject.setLong("projectId", projectId)); return toJson(slime); diff --git a/hosted-api/src/main/java/ai/vespa/hosted/api/Submission.java b/hosted-api/src/main/java/ai/vespa/hosted/api/Submission.java index fe2dbaf977e..6f392de86e7 100644 --- a/hosted-api/src/main/java/ai/vespa/hosted/api/Submission.java +++ b/hosted-api/src/main/java/ai/vespa/hosted/api/Submission.java @@ -2,6 +2,7 @@ package ai.vespa.hosted.api; import java.nio.file.Path; +import java.util.Optional; import java.util.OptionalLong; /** @@ -14,15 +15,18 @@ public class Submission { private final String repository; private final String branch; private final String commit; + private final Optional<String> sourceUrl; private final String authorEmail; private final Path applicationZip; private final Path applicationTestZip; private final OptionalLong projectId; - public Submission(String repository, String branch, String commit, String authorEmail, Path applicationZip, Path applicationTestZip, OptionalLong projectId) { + public Submission(String repository, String branch, String commit, Optional<String> sourceUrl, String authorEmail, + Path applicationZip, Path applicationTestZip, OptionalLong projectId) { this.repository = repository; this.branch = branch; this.commit = commit; + this.sourceUrl = sourceUrl; this.authorEmail = authorEmail; this.applicationZip = applicationZip; this.applicationTestZip = applicationTestZip; @@ -32,6 +36,7 @@ public class Submission { public String repository() { return repository; } public String branch() { return branch; } public String commit() { return commit; } + public Optional<String> sourceUrl() { return sourceUrl; } public String authorEmail() { return authorEmail; } public Path applicationZip() { return applicationZip; } public Path applicationTestZip() { return applicationTestZip; } diff --git a/vespa-maven-plugin/src/main/java/ai/vespa/hosted/plugin/SubmitMojo.java b/vespa-maven-plugin/src/main/java/ai/vespa/hosted/plugin/SubmitMojo.java index 3aee3a5ce96..80655cf1d36 100644 --- a/vespa-maven-plugin/src/main/java/ai/vespa/hosted/plugin/SubmitMojo.java +++ b/vespa-maven-plugin/src/main/java/ai/vespa/hosted/plugin/SubmitMojo.java @@ -6,6 +6,7 @@ import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; import java.nio.file.Paths; +import java.util.Optional; import java.util.OptionalLong; /** @@ -34,6 +35,9 @@ public class SubmitMojo extends AbstractVespaMojo { @Parameter(property = "commit", defaultValue = "unknown") private String commit; + @Parameter(property = "sourceUrl") + private String sourceUrl; + @Parameter(property = "projectId") private Long projectId; @@ -41,7 +45,7 @@ public class SubmitMojo extends AbstractVespaMojo { public void doExecute() { applicationZip = firstNonBlank(applicationZip, projectPathOf("target", "application.zip")); applicationTestZip = firstNonBlank(applicationTestZip, projectPathOf("target", "application-test.zip")); - Submission submission = new Submission(repository, branch, commit, authorEmail, + Submission submission = new Submission(repository, branch, commit, Optional.ofNullable(sourceUrl), authorEmail, Paths.get(applicationZip), Paths.get(applicationTestZip), projectId == null ? OptionalLong.empty() : OptionalLong.of(projectId)); |