From 48aa3ebd98c60b10f2a1c6c02311203564fa6b04 Mon Sep 17 00:00:00 2001 From: "James E. Blair" Date: Tue, 10 Sep 2019 11:09:40 -0700 Subject: [PATCH] Add Item.formatStatusUrl This method can be used by reporters to generate the best "status" url to report for an item. It will report the buildset page if that is available, or the per-change status page if it is not. Eventually we plan on making the database required, at which point we can insert buildsets in the db earlier. Then we can report the buildset page in all cases. By beginning to use this method now, we can seamlessly upgrade reporters in the future. Test coverage for this is added in change Ida0cdef682ca2ce117617eacfb67f371426a3131. Change-Id: Ib0c2ca84f6c4d30f233382048c8885fb73edfeec --- zuul/model.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/zuul/model.py b/zuul/model.py index beab78760a..549c6961ef 100644 --- a/zuul/model.py +++ b/zuul/model.py @@ -2688,6 +2688,27 @@ class QueueItem(object): else: return self.formatProvisionalJobResult(job) + def formatStatusUrl(self): + if self.current_build_set.result: + # We have reported (or are reporting) and so we should + # send the buildset page url + if (self.pipeline.tenant.report_build_page and + self.pipeline.tenant.web_root): + pattern = urllib.parse.urljoin(self.pipeline.tenant.web_root, + 'buildset/{buildset.uuid}') + return self.formatUrlPattern(pattern) + # We haven't reported yet (or we don't have a database), so + # the best we can do at the moment is send the status page + # url. TODO: require a database, insert buildsets into it + # when they are created, and remove this case. + if self.pipeline.tenant.web_root: + pattern = urllib.parse.urljoin( + self.pipeline.tenant.web_root, + 'status/change/{change.number},{change.patchset}') + return self.formatUrlPattern(pattern) + # Apparently we have no web site. + return None + def formatProvisionalJobResult(self, job): build = self.current_build_set.getBuild(job.name) result = build.result