From 358830ba58a6a200f8443783db249f4374dbad67 Mon Sep 17 00:00:00 2001 From: Dong Zhang Date: Thu, 5 Aug 2021 11:46:16 +0200 Subject: [PATCH] Show emoji to highlight failed jobs in build result in Github When there is a long list of build results, it is difficult quickly to see which jobs are failed. This change add emoji of check mark and cross in front of each job to solve this problem. Change-Id: I38177824767d475b0c4881ef0ab24ca1164d3187 --- zuul/driver/github/githubreporter.py | 31 +++++++++++++++++++++++++++- zuul/driver/pagure/pagurereporter.py | 2 +- zuul/reporter/__init__.py | 8 +++++-- 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/zuul/driver/github/githubreporter.py b/zuul/driver/github/githubreporter.py index e673dddcc1..9e8be1a39e 100644 --- a/zuul/driver/github/githubreporter.py +++ b/zuul/driver/github/githubreporter.py @@ -101,12 +101,41 @@ class GithubReporter(BaseReporter): except Exception as e: self.addPullComment(item, str(e)) + def _formatJobResult(self, job_fields): + # We select different emojis to represents build results: + # heavy_check_mark: SUCCESS + # warning: SKIPPED/ABORTED + # x: all types of FAILUREs + # In addition, failure results are in bold text + + job_result = job_fields[2] + # Also need to handle user defined success_message. + # The job_fields[6]: the user defined seccess_message (if available) + success_message = job_fields[6] + + emoji = 'x' + bold_result = True + + if job_result in ('SUCCESS', success_message): + emoji = 'heavy_check_mark' + bold_result = False + elif job_result in ('SKIPPED', 'ABORTED'): + emoji = 'warning' + bold_result = False + + if bold_result: + return ':%s: [%s](%s) **%s**%s%s%s\n' % ( + (emoji,) + job_fields[:6]) + else: + return ':%s: [%s](%s) %s%s%s%s\n' % ( + (emoji,) + job_fields[:6]) + def _formatItemReportJobs(self, item): # Return the list of jobs portion of the report ret = '' jobs_fields = self._getItemReportJobsFields(item) for job_fields in jobs_fields: - ret += '- [%s](%s) : %s%s%s%s\n' % job_fields + ret += self._formatJobResult(job_fields) return ret def addPullComment(self, item, comment=None): diff --git a/zuul/driver/pagure/pagurereporter.py b/zuul/driver/pagure/pagurereporter.py index 1feda92131..e6f33ef473 100644 --- a/zuul/driver/pagure/pagurereporter.py +++ b/zuul/driver/pagure/pagurereporter.py @@ -68,7 +68,7 @@ class PagureReporter(BaseReporter): ret = '' jobs_fields = self._getItemReportJobsFields(item) for job_fields in jobs_fields: - ret += '- [%s](%s) : %s%s%s%s\n' % job_fields + ret += '- [%s](%s) : %s%s%s%s\n' % job_fields[:6] return ret def addPullComment(self, item, comment=None): diff --git a/zuul/reporter/__init__.py b/zuul/reporter/__init__.py index 014dc93432..8e91623c50 100644 --- a/zuul/reporter/__init__.py +++ b/zuul/reporter/__init__.py @@ -268,7 +268,11 @@ class BaseReporter(object, metaclass=abc.ABCMeta): # the url field to match old behavior until we can deal with # the gerrit-side piece as well url = url or job.name - jobs_fields.append((name, url, result, error, elapsed, voting)) + # Pass user defined success_message deciding the build result + # during result formatting + success_message = job.success_message + jobs_fields.append( + (name, url, result, error, elapsed, voting, success_message)) return jobs_fields def _formatItemReportJobs(self, item): @@ -276,5 +280,5 @@ class BaseReporter(object, metaclass=abc.ABCMeta): ret = '' jobs_fields = self._getItemReportJobsFields(item) for job_fields in jobs_fields: - ret += '- %s%s : %s%s%s%s\n' % job_fields + ret += '- %s%s : %s%s%s%s\n' % job_fields[:6] return ret