diff options
Diffstat (limited to 'zuul')
-rw-r--r-- | zuul/configloader.py | 7 | ||||
-rw-r--r-- | zuul/driver/gerrit/gerritreporter.py | 3 | ||||
-rw-r--r-- | zuul/manager/__init__.py | 12 | ||||
-rw-r--r-- | zuul/reporter/__init__.py | 8 |
4 files changed, 23 insertions, 7 deletions
diff --git a/zuul/configloader.py b/zuul/configloader.py index eb468518f..365967d56 100644 --- a/zuul/configloader.py +++ b/zuul/configloader.py @@ -1176,6 +1176,7 @@ class PipelineParser(object): 'success': 'success_actions', 'failure': 'failure_actions', 'merge-conflict': 'merge_conflict_actions', + 'config-error': 'config_error_actions', 'no-jobs': 'no_jobs_actions', 'disabled': 'disabled_actions', 'dequeue': 'dequeue_actions', @@ -1250,7 +1251,7 @@ class PipelineParser(object): pipeline['trigger'] = vs.Required(self.getDriverSchema('trigger')) for action in ['enqueue', 'start', 'success', 'failure', 'merge-conflict', 'merge-failure', 'no-jobs', - 'disabled', 'dequeue']: + 'disabled', 'dequeue', 'config-error']: pipeline[action] = self.getDriverSchema('reporter') return vs.Schema(pipeline) @@ -1318,6 +1319,10 @@ class PipelineParser(object): if not pipeline.merge_conflict_actions: pipeline.merge_conflict_actions = pipeline.failure_actions + # If config-error actions aren't explicit, use the failure actions + if not pipeline.config_error_actions: + pipeline.config_error_actions = pipeline.failure_actions + pipeline.disable_at = conf.get( 'disable-after-consecutive-failures', None) diff --git a/zuul/driver/gerrit/gerritreporter.py b/zuul/driver/gerrit/gerritreporter.py index b99133dce..c38a9484a 100644 --- a/zuul/driver/gerrit/gerritreporter.py +++ b/zuul/driver/gerrit/gerritreporter.py @@ -36,6 +36,9 @@ class GerritReporter(BaseReporter): self._checks_api = action.pop('checks-api', None) self._labels = action + def __repr__(self): + return f"<GerritReporter: {self._action}>" + def report(self, item, phase1=True, phase2=True): """Send a message to gerrit.""" log = get_annotated_logger(self.log, item.event) diff --git a/zuul/manager/__init__.py b/zuul/manager/__init__.py index 31c4b54d7..637d31d9f 100644 --- a/zuul/manager/__init__.py +++ b/zuul/manager/__init__.py @@ -322,9 +322,10 @@ class PipelineManager(metaclass=ABCMeta): (item, ret)) def reportNormalBuildsetEnd(self, build_set, action, final, result=None): - # Report a buildset end, but only if there are jobs - if (build_set.job_graph and - len(build_set.job_graph.jobs) > 0): + # Report a buildset end if there are jobs or errors + if ((build_set.job_graph and len(build_set.job_graph.jobs) > 0) or + build_set.config_errors or + build_set.unable_to_merge): self.sql.reportBuildsetEnd(build_set, action, final, result) @@ -2032,9 +2033,8 @@ class PipelineManager(metaclass=ABCMeta): item.setReportedResult('NO_JOBS') elif item.getConfigErrors(): log.debug("Invalid config for change %s", item.change) - # TODOv3(jeblair): consider a new reporter action for this - action = 'merge-conflict' - actions = self.pipeline.merge_conflict_actions + action = 'config-error' + actions = self.pipeline.config_error_actions item.setReportedResult('CONFIG_ERROR') elif item.didMergerFail(): log.debug("Merge conflict") diff --git a/zuul/reporter/__init__.py b/zuul/reporter/__init__.py index 9cd60bff6..5af48abc6 100644 --- a/zuul/reporter/__init__.py +++ b/zuul/reporter/__init__.py @@ -135,6 +135,7 @@ class BaseReporter(object, metaclass=abc.ABCMeta): 'failure': self._formatItemReportFailure, 'merge-conflict': self._formatItemReportMergeConflict, 'merge-failure': self._formatItemReportMergeFailure, + 'config-error': self._formatItemReportConfigError, 'no-jobs': self._formatItemReportNoJobs, 'disabled': self._formatItemReportDisabled, 'dequeue': self._formatItemReportDequeue, @@ -226,6 +227,13 @@ class BaseReporter(object, metaclass=abc.ABCMeta): def _formatItemReportMergeFailure(self, item, with_jobs=True): return 'This change was not merged by the code review system.\n' + def _formatItemReportConfigError(self, item, with_jobs=True): + if item.getConfigErrors(): + msg = str(item.getConfigErrors()[0].error) + else: + msg = "Unknown configuration error" + return msg + def _formatItemReportNoJobs(self, item, with_jobs=True): status_url = get_default(self.connection.sched.config, 'web', 'status_url', '') |