From ebca12800b9fc04cd4bc7a92045dec7a8016c8a1 Mon Sep 17 00:00:00 2001 From: Oliver Kurz Date: Fri, 24 Nov 2017 06:43:18 +0100 Subject: [PATCH] Add more details to openQA job group description about current status Example output from dry run: ``` 2017-11-24 06:42:57,927 - totest-manager:490 DEBUG snapshotable: True 2017-11-24 06:42:57,927 - totest-manager:495 DEBUG no change in snapshot version 2017-11-24 06:42:58,415 - totest-manager:207 DEBUG Writing openQA status message: {'text': 'pinned-description: Ignored issues\r\n\r\n\r\n\r\ntag:20171123:testing:testing'} ``` --- totest-manager.py | 72 +++++++++++++++++++++++++++++------------------ 1 file changed, 45 insertions(+), 27 deletions(-) diff --git a/totest-manager.py b/totest-manager.py index 781993bb..034f62e8 100755 --- a/totest-manager.py +++ b/totest-manager.py @@ -170,7 +170,7 @@ class ToTestBase(object): logger.info('%s %s %s' % (module['name'], module['result'], module['flags'])) - def update_ignored_issues(self): + def update_openqa_status_message(self): url = makeurl(self.openqa_server, ['api', 'v1', 'job_groups']) f = self.api.retried_GET(url) @@ -181,27 +181,37 @@ class ToTestBase(object): group_id = jg['id'] break - if group_id: - pinned_ignored_issue = 0 - issues = ' , '.join(self.issues_to_ignore) - msg = "pinned-description: Ignored issues\r\n\r\n{}".format(issues) - data = {'text': msg} - url = makeurl(self.openqa_server, - ['api', 'v1', 'groups', str(group_id), 'comments']) - f = self.api.retried_GET(url) - comments = json.load(f) - for comment in comments: - if comment['userName'] == 'ttm' and \ - comment['text'].startswith('pinned-description: Ignored issues'): - pinned_ignored_issue = comment['id'] + if not group_id: + logger.debug('No openQA group id found for status comment update, ignoring') + return - if not self.dryrun: - if pinned_ignored_issue: - self.openqa.openqa_request( - 'PUT', 'groups/%s/comments/%d' % (group_id, pinned_ignored_issue), data=data) - else: - self.openqa.openqa_request( - 'POST', 'groups/%s/comments' % group_id, data=data) + pinned_ignored_issue = 0 + issues = ' , '.join(self.issues_to_ignore) + status_flag = 'publishing' if self.status_for_openqa['is_publishing'] else \ + 'preparing' if self.status_for_openqa['can_release'] else \ + 'testing' if self.status_for_openqa['snapshotable'] else \ + 'building' + status_msg = "tag:{}:{}:{}".format(self.status_for_openqa['new_snapshot'], status_flag, status_flag) + msg = "pinned-description: Ignored issues\r\n\r\n{}\r\n\r\n{}".format(issues, status_msg) + data = {'text': msg} + + url = makeurl(self.openqa_server, + ['api', 'v1', 'groups', str(group_id), 'comments']) + f = self.api.retried_GET(url) + comments = json.load(f) + for comment in comments: + if comment['userName'] == 'ttm' and \ + comment['text'].startswith('pinned-description: Ignored issues'): + pinned_ignored_issue = comment['id'] + + logger.debug('Writing openQA status message: {}'.format(data)) + if not self.dryrun: + if pinned_ignored_issue: + self.openqa.openqa_request( + 'PUT', 'groups/%s/comments/%d' % (group_id, pinned_ignored_issue), data=data) + else: + self.openqa.openqa_request( + 'POST', 'groups/%s/comments' % group_id, data=data) def overall_result(self, snapshot): """Analyze the openQA jobs of a given snapshot Returns a QAResult""" @@ -217,7 +227,7 @@ class ToTestBase(object): number_of_fails = 0 in_progress = False - update_pinned_descr = False + self.update_pinned_descr = False for job in jobs: # print json.dumps(job, sort_keys=True, indent=4) if job['result'] in ('failed', 'incomplete', 'skipped', 'user_cancelled', 'obsoleted', 'parallel_failed'): @@ -242,7 +252,7 @@ class ToTestBase(object): if ref not in self.issues_to_ignore: if to_ignore: self.issues_to_ignore.append(ref) - update_pinned_descr = True + self.update_pinned_descr = True with open(self.issuefile, 'a') as f: f.write("%s\n" % ref) else: @@ -274,9 +284,6 @@ class ToTestBase(object): else: raise Exception(job['result']) - if update_pinned_descr: - self.update_ignored_issues() - if number_of_fails > 0: return QA_FAILED @@ -496,10 +503,21 @@ class ToTestBase(object): can_publish = (current_result == QA_PASSED) # already published - if self.totest_is_publishing(): + totest_is_publishing = self.totest_is_publishing() + if totest_is_publishing: logger.debug("totest already publishing") can_publish = False + if self.update_pinned_descr: + self.status_for_openqa = { + 'current_snapshot': current_snapshot, + 'new_snapshot': new_snapshot, + 'snapshotable': snapshotable, + 'can_release': can_release, + 'is_publishing': totest_is_publishing, + } + self.update_openqa_status_message() + if can_publish: if current_qa_version == current_snapshot: self.publish_factory_totest()