diff --git a/tests/fixtures/layouts/bad_misplaced_ref.yaml b/tests/fixtures/layouts/bad_misplaced_ref.yaml new file mode 100644 index 0000000000..f009c397b3 --- /dev/null +++ b/tests/fixtures/layouts/bad_misplaced_ref.yaml @@ -0,0 +1,13 @@ +pipelines: + - name: 'check' + manager: IndependentPipelineManager + trigger: + gerrit: + - event: patchset-created + ref: /some/ref/path + +projects: + - name: org/project + merge-mode: cherry-pick + check: + - project-check diff --git a/zuul/layoutvalidator.py b/zuul/layoutvalidator.py index 7256bc42e2..b445908431 100644 --- a/zuul/layoutvalidator.py +++ b/zuul/layoutvalidator.py @@ -18,6 +18,7 @@ import voluptuous as v import string +from zuul.trigger import gerrit # Several forms accept either a single item or a list, this makes # specifying that in the schema easy (and explicit). @@ -262,3 +263,7 @@ class LayoutValidator(object): if 'project-templates' in data: self.checkDuplicateNames( data['project-templates'], ['project-templates']) + for pipeline in data['pipelines']: + if 'gerrit' in pipeline['trigger']: + gerrit.validate_trigger(pipeline['trigger']) + diff --git a/zuul/trigger/gerrit.py b/zuul/trigger/gerrit.py index a6eedb10cd..4840f5ac9b 100644 --- a/zuul/trigger/gerrit.py +++ b/zuul/trigger/gerrit.py @@ -16,6 +16,7 @@ import logging import threading import time import urllib2 +import voluptuous from zuul.lib import gerrit from zuul.model import TriggerEvent, Change @@ -383,3 +384,14 @@ class Gerrit(object): if sha: url += ';a=commitdiff;h=' + sha return url + + +def validate_trigger(trigger_data): + """Validates the layout's trigger data.""" + events_with_ref = ('ref-updated', ) + for event in trigger_data['gerrit']: + if event['event'] not in events_with_ref and event.get('ref', False): + raise voluptuous.Invalid( + "The event %s does not include ref information, Zuul cannot " + "use ref filter 'ref: %s'" % (event['event'], event['ref'])) +