Skip to content

Commit

Permalink
feat(artifacts): Support artifacts filtering in Travis triggers (#240)
Browse files Browse the repository at this point in the history
* feat(artifacts): Support artifacts filtering in Travis triggers

Corresponds with spinnaker/igor#223

* Remove unnecessary overrides

* Move Artifact stuff to superclass

* chore(*): Bump Spinnaker dependencies to 0.147.0
  • Loading branch information
jervi authored and jtk54 committed Mar 15, 2018
1 parent aaa50a8 commit 90ef035
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 6 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Expand Up @@ -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]
Expand Down
Expand Up @@ -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
Expand Down Expand Up @@ -48,6 +49,7 @@ class BuildEvent extends TriggerEvent {
boolean building
int number
Result result
List<Artifact> artifacts
}

enum Result {
Expand Down
Expand Up @@ -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
Expand Down
Expand Up @@ -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;
Expand All @@ -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.
*/
Expand Down Expand Up @@ -78,7 +84,8 @@ protected boolean isSuccessfulTriggerEvent(final TriggerEvent event) {
@Override
protected Function<Trigger, Pipeline> 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
Expand All @@ -96,7 +103,10 @@ protected Predicate<Trigger> 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
Expand All @@ -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<Artifact> getArtifacts(BuildEvent event) {
return Optional.ofNullable(event.getContent())
.map(BuildEvent.Content::getProject)
.map(BuildEvent.Project::getLastBuild)
.map(BuildEvent.Build::getArtifacts)
.orElse(Collections.emptyList());
}
}

0 comments on commit 90ef035

Please sign in to comment.