Skip to content

Commit

Permalink
Add regex to docker image (#90)
Browse files Browse the repository at this point in the history
Add regex to docker image
  • Loading branch information
bfarrell authored and lwander committed Jun 10, 2016
1 parent 4880ea3 commit d333f80
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@

import java.util.function.Function;
import java.util.function.Predicate;
import java.util.regex.PatternSyntaxException;

@Component
public class DockerEventMonitor extends TriggerMonitor {
Expand Down Expand Up @@ -88,6 +89,15 @@ protected boolean isValidTrigger(final Trigger trigger) {
);
}

private boolean matchTags(String suppliedTag, String incomingTag) {
try {
// use matches to handle regex or basic string compare
return incomingTag.matches(suppliedTag);
} catch (PatternSyntaxException e) {
return false;
}
}

@Override
protected Predicate<Trigger> matchTriggerFor(final TriggerEvent event) {
DockerEvent dockerEvent = (DockerEvent) event;
Expand All @@ -98,7 +108,7 @@ protected Predicate<Trigger> matchTriggerFor(final TriggerEvent event) {
trigger.getRepository().equals(repository) &&
trigger.getRegistry().equals(registry) &&
((trigger.getTag() == null && !tag.equals("latest"))
|| trigger.getTag() != null && trigger.getTag().equals(tag));
|| trigger.getTag() != null && matchTags(trigger.getTag(), tag));
}

protected void onMatchingPipeline(Pipeline pipeline) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -166,4 +166,42 @@ class DockerEventMonitorSpec extends Specification implements RetrofitStubs {
goodPipeline = createPipelineWith(enabledDockerTrigger)
badPipeline = createPipelineWith(trigger)
}

@Unroll
def "triggers a pipeline that has an enabled docker trigger with regex"() {
given:
def pipeline = createPipelineWith(trigger)
pipelineCache.getPipelines() >> [pipeline]

when:
monitor.processEvent(objectMapper.convertValue(event, Event))

then:
1 * subscriber.call({ it.id == pipeline.id })

where:
trigger | field
enabledDockerTrigger.withTag("\\d+") | "regex tag"

event = createDockerEvent("2")
}

@Unroll
def "does not trigger a pipeline that has an enabled docker trigger with regex"() {
given:
def pipeline = createPipelineWith(trigger)
pipelineCache.getPipelines() >> [pipeline]

when:
monitor.processEvent(objectMapper.convertValue(event, Event))

then:
0 * subscriber._

where:
trigger | field
enabledDockerTrigger.withTag("\\d+") | "regex tag"

event = createDockerEvent()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,13 @@ trait RetrofitStubs {
return res
}

DockerEvent createDockerEvent() {
DockerEvent createDockerEvent(String inTag) {
def tag = "tag"
if (inTag) {
tag = inTag
}
def res = new DockerEvent()
res.content = new DockerEvent.Content("registry", "repository", "tag", "sha")
res.content = new DockerEvent.Content("registry", "repository", tag, "sha")
res.details = new Metadata([type: DockerEvent.TYPE, source: "spock"])
return res
}
Expand Down

0 comments on commit d333f80

Please sign in to comment.