From 90ef035c128f3f701b66502b62377b5083759189 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Jervidalo?= Date: Thu, 15 Mar 2018 16:26:15 +0100 Subject: [PATCH] feat(artifacts): Support artifacts filtering in Travis triggers (#240) * feat(artifacts): Support artifacts filtering in Travis triggers Corresponds with https://github.com/spinnaker/igor/pull/223 * Remove unnecessary overrides * Move Artifact stuff to superclass * chore(*): Bump Spinnaker dependencies to 0.147.0 --- build.gradle | 2 +- .../echo/model/trigger/BuildEvent.groovy | 2 ++ .../spinnaker/echo/model/Pipeline.java | 7 +++--- .../monitor/BuildEventMonitor.java | 22 +++++++++++++++++-- 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/build.gradle b/build.gradle index c2d2217d3..763dd413c 100644 --- a/build.gradle +++ b/build.gradle @@ -36,7 +36,7 @@ allprojects { group = "com.netflix.spinnaker.echo" ext { - spinnakerDependenciesVersion = project.hasProperty('spinnakerDependenciesVersion') ? project.property('spinnakerDependenciesVersion') : '0.141.1' + spinnakerDependenciesVersion = project.hasProperty('spinnakerDependenciesVersion') ? project.property('spinnakerDependenciesVersion') : '0.147.0' } def checkLocalVersions = [spinnakerDependenciesVersion: spinnakerDependenciesVersion] diff --git a/echo-model/src/main/groovy/com/netflix/spinnaker/echo/model/trigger/BuildEvent.groovy b/echo-model/src/main/groovy/com/netflix/spinnaker/echo/model/trigger/BuildEvent.groovy index 2a5fb199d..dc2eb5b84 100644 --- a/echo-model/src/main/groovy/com/netflix/spinnaker/echo/model/trigger/BuildEvent.groovy +++ b/echo-model/src/main/groovy/com/netflix/spinnaker/echo/model/trigger/BuildEvent.groovy @@ -19,6 +19,7 @@ package com.netflix.spinnaker.echo.model.trigger import com.fasterxml.jackson.annotation.JsonIgnore import com.fasterxml.jackson.annotation.JsonIgnoreProperties +import com.netflix.spinnaker.kork.artifacts.model.Artifact import groovy.transform.Canonical @Canonical @@ -48,6 +49,7 @@ class BuildEvent extends TriggerEvent { boolean building int number Result result + List artifacts } enum Result { diff --git a/echo-model/src/main/java/com/netflix/spinnaker/echo/model/Pipeline.java b/echo-model/src/main/java/com/netflix/spinnaker/echo/model/Pipeline.java index f54f4b990..9ed009953 100644 --- a/echo-model/src/main/java/com/netflix/spinnaker/echo/model/Pipeline.java +++ b/echo-model/src/main/java/com/netflix/spinnaker/echo/model/Pipeline.java @@ -16,19 +16,20 @@ package com.netflix.spinnaker.echo.model; -import com.netflix.spinnaker.kork.artifacts.model.ExpectedArtifact; -import java.util.List; -import java.util.Map; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; import com.netflix.spinnaker.kork.artifacts.model.Artifact; +import com.netflix.spinnaker.kork.artifacts.model.ExpectedArtifact; import lombok.Builder; import lombok.NonNull; import lombok.ToString; import lombok.Value; import lombok.experimental.Wither; +import java.util.List; +import java.util.Map; + @JsonDeserialize(builder = Pipeline.PipelineBuilder.class) @Builder @Wither diff --git a/echo-pipelinetriggers/src/main/java/com/netflix/spinnaker/echo/pipelinetriggers/monitor/BuildEventMonitor.java b/echo-pipelinetriggers/src/main/java/com/netflix/spinnaker/echo/pipelinetriggers/monitor/BuildEventMonitor.java index 116a16ed8..812d821f4 100644 --- a/echo-pipelinetriggers/src/main/java/com/netflix/spinnaker/echo/pipelinetriggers/monitor/BuildEventMonitor.java +++ b/echo-pipelinetriggers/src/main/java/com/netflix/spinnaker/echo/pipelinetriggers/monitor/BuildEventMonitor.java @@ -24,6 +24,7 @@ import com.netflix.spinnaker.echo.model.trigger.BuildEvent; import com.netflix.spinnaker.echo.model.trigger.TriggerEvent; import com.netflix.spinnaker.echo.pipelinetriggers.PipelineCache; +import com.netflix.spinnaker.kork.artifacts.model.Artifact; import lombok.NonNull; import lombok.val; import org.springframework.beans.factory.annotation.Autowired; @@ -32,9 +33,14 @@ import rx.functions.Action1; import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Optional; import java.util.function.Function; import java.util.function.Predicate; +import static com.netflix.spinnaker.echo.pipelinetriggers.artifacts.ArtifactMatcher.anyArtifactsMatchExpected; + /** * Triggers pipelines on _Orca_ when a trigger-enabled build completes successfully. */ @@ -78,7 +84,8 @@ protected boolean isSuccessfulTriggerEvent(final TriggerEvent event) { @Override protected Function buildTrigger(Pipeline pipeline, TriggerEvent event) { BuildEvent buildEvent = (BuildEvent) event; - return trigger -> pipeline.withTrigger(trigger.atBuildNumber(buildEvent.getBuildNumber())); + return trigger -> pipeline.withTrigger(trigger.atBuildNumber(buildEvent.getBuildNumber())) + .withReceivedArtifacts(getArtifacts(buildEvent)); } @Override @@ -96,7 +103,10 @@ protected Predicate matchTriggerFor(final TriggerEvent event, final Pip BuildEvent buildEvent = (BuildEvent) event; String jobName = buildEvent.getContent().getProject().getName(); String master = buildEvent.getContent().getMaster(); - return trigger -> isBuildTrigger(trigger) && trigger.getJob().equals(jobName) && trigger.getMaster().equals(master); + return trigger -> isBuildTrigger(trigger) + && trigger.getJob().equals(jobName) + && trigger.getMaster().equals(master) + && anyArtifactsMatchExpected(getArtifacts(buildEvent), trigger, pipeline); } @Override @@ -114,4 +124,12 @@ protected void onMatchingPipeline(Pipeline pipeline) { private boolean isBuildTrigger(Trigger trigger) { return Arrays.stream(BUILD_TRIGGER_TYPES).anyMatch(triggerType -> triggerType.equals(trigger.getType())); } + + private List getArtifacts(BuildEvent event) { + return Optional.ofNullable(event.getContent()) + .map(BuildEvent.Content::getProject) + .map(BuildEvent.Project::getLastBuild) + .map(BuildEvent.Build::getArtifacts) + .orElse(Collections.emptyList()); + } }