From: hyokeun Date: Mon, 4 Sep 2017 09:52:04 +0000 (+0900) Subject: TPE-302 Send mail noti after SR sync X-Git-Tag: submit/trunk/20190927.012743~298^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F40%2F147440%2F2;p=services%2Fjenkins-scripts.git TPE-302 Send mail noti after SR sync Change-Id: Ife558246207c160bc9f86c131c6f588c1f6a3a5a --- diff --git a/common/workflow.py b/common/workflow.py index 1d55a04..25ce3c9 100644 --- a/common/workflow.py +++ b/common/workflow.py @@ -26,6 +26,7 @@ import sys import json import re import requests +import ast import xml.etree.cElementTree as ElementTree from xml.sax.saxutils import escape from time import sleep @@ -38,6 +39,8 @@ from common.upload_service import upload_obs_service, UploadError from common.prerelease import get_info_from_prerelease_name from common.git import Git, clone_gitproject from common.gerrit import GerritEnv, GerritError +from common import runner +from common.send_mail import prepare_mail from gbp.rpm import SpecFile from gbp.git.repository import GitRepositoryError @@ -81,6 +84,82 @@ NOT_ANNOTATED_MSG = '- Tag should be annotated tag.' SUGGESTION = 'Suggest to use "gbs submit" to trigger submission\n'\ +class MailSender(object): + email_title = '' + email_head = '' + email_body = '' + email_footer = '\n\n--------------------------------------------------------\n'\ + 'Automatically generated by backend service.\n'\ + 'Please DO NOT Reply!' + email_to = [] + + def __init__(self, receiver=None, title=None, body=None): + if receiver is not None: self.email_to = receiver + if title is not None: self.email_title = title + if body is not None: self.email_body = body + + def add_receiver(self, add_new): + """ add receiver """ + if type(add_new) == list: + self.email_to.extend(x for x in add_new) + elif type(add_new) == str: + self.email_to.append(add_new) + else: + print 'TYPE(%s) == %s' % (add_new, type(add_new)) + self.email_to = list(set(self.email_to)) + + def add_title(self, add_new): + """ add title """ + self.email_title = self.email_title + ' ' + add_new + + def add_message(self, add_new, top=None): + """ add message """ + if top is not None: + self.email_body = add_new + '\n' + self.email_body + else: + self.email_body = self.email_body + '\n' + add_new + + def add_maintainers(self, mygerrit, group_name=None, project=None): + """ add maintainers """ + if not mygerrit: + print 'mygerrit is Null...' + return + + if not project and group_name: + mbrs = mygerrit.ls_members(['\'\"%s\"\'' % group_name, '--recursive']) + for line in mbrs: + self.add_receiver(line.split('\t')[3]) + return + + if project: + grps = mygerrit.ls_groups(['--project %s' % project]) + dest_grp = [s for s in grps if " - Maintainers" in s] + for dg in dest_grp: + mbrs = mygerrit.ls_members(['\'\"%s\"\'' % dg, '--recursive']) + for line in mbrs: + self.add_receiver(line.split('\t')[3]) + return + + def send_mail(self): + """ send mail """ + self.email_body = self.email_head + self.email_body + self.email_footer + + self.email_to = [x for x in self.email_to if x != 'n/a'] + print '\n\n' + print self.email_title + #m_body = '' + #for m in self.email_body.splitlines(): + # m_body += '\n'.join(m[i:i+128] for i in xrange(0, len(m), 128)) + '\n' + #self.email_body = m_body + print self.email_body + print self.email_to + + prepare_mail("%s.env" % os.getenv('BUILD_TAG'), \ + self.email_title, \ + self.email_body, \ + os.getenv('NOREPLY_EMAIL_SENDER'), \ + self.email_to) + def parse_submit_tag(tag): """parse info from submit tag name""" diff --git a/job_submit_request_sync.py b/job_submit_request_sync.py index 2ed8126..a4e026a 100644 --- a/job_submit_request_sync.py +++ b/job_submit_request_sync.py @@ -29,14 +29,16 @@ import ast import copy from common.buildtrigger import trigger_next, trigger_info -from common.mapping import git_obs_map, git_virtual_branch_map, git_obs_map_full_list +from common.mapping import git_obs_map, git_obs_map_full_list from common import utils -from gbp.rpm import SpecFile -from gbp.errors import GbpError -from common.git import Git, clone_gitproject -from common.gerrit import GerritEnv +#from gbp.rpm import SpecFile +#from gbp.errors import GbpError +#from common.git import Git, clone_gitproject +from common.gerrit import GerritEnv, Gerrit -from common.workflow import get_manifest_filelists_snapshot, get_info_from_tag +from common.workflow import get_info_from_tag + +from common.workflow import MailSender # set default char-set endcoding to utf-8 reload(sys) @@ -180,6 +182,7 @@ def main(): target_fork_prefix = target['fork'] branch = target['branch'] source_branch = target['source_branch'] + notify_domain = target['notify'] if True: project_to_create = 'home:prerelease:%s:submit:%s:%s' \ @@ -218,11 +221,11 @@ def main(): item.get('Project_name', '') == repo: bSetHighlight = False bDeleted = True - + marked_repo = {'cid': cid, 'submitter': smtr, 'snapshot': sn, 'deleted': bDeleted} if bSetHighlight: - marked_repo = {'repo': HIGHLIGHT + repo, 'cid': cid, 'submitter': smtr, 'snapshot': sn, 'deleted': bDeleted} + marked_repo['repo'] = HIGHLIGHT + repo else: - marked_repo = {'repo': GREYEDOUT + repo, 'cid': cid, 'submitter': smtr, 'snapshot': sn, 'deleted': bDeleted} + marked_repo['repo'] = GREYEDOUT + repo if marked_repo not in _sr_list[_sr_tag]: _sr_list[_sr_tag].append(marked_repo) if _sr_list[_sr_tag]: @@ -231,6 +234,7 @@ def main(): ret_data['requests'].append(_conv) print '\nret_data:\n%s\n' % ret_data + myGerritEnv = GerritEnv('PUBLIC_') # Find OBS package name and trigger OBS project creation job for req in ret_data['requests']: print ' + Make requests: [%s]\n %s\n' \ @@ -243,10 +247,9 @@ def main(): smtr = item.get('submitter') sn = item.get('snapshot') _package = '' - if True:#git.startswith(HIGHLIGHT): _tag_info = get_info_from_tag(git[1:], source_branch, project, \ - submit, GerritEnv('PUBLIC_')) + submit, myGerritEnv) _package = _tag_info.get('spec_name', None) _commit_id = _tag_info.get('commit_id', None) if _package is None: @@ -255,6 +258,7 @@ def main(): requests_item[project_to_create].append({'package': _package, \ 'git_tag': submit, \ 'cid': _commit_id, \ + 'rev': cid, \ 'submitter': smtr, \ 'gerrit_project': git, \ 'deleted': item.get('deleted'), \ @@ -264,13 +268,14 @@ def main(): # Split request into smaller part split_step = 100 for r in xrange(0, len(requests_item[project_to_create]), split_step): - trigger_next('PRE_RELEASE_REQUEST_%s_%d' % (target['target'], r), \ + trigger_next('PRE_RELEASE_REQUEST_%s_%d' % (target['target'], (r/split_step)+1), \ {'requests': [{project_to_create: requests_item[project_to_create][r:(r+split_step)]}], \ 'obs_target_prj': project, \ 'url': git_url, \ 'obs_dest_prj': target['target'], \ 'reason': reason, \ - 'snapshot': snapshot}) + 'snapshot': snapshot, + 'index_sequence': '%d-%d' % ((r/split_step)+1, len(requests_item[project_to_create]))}) bm_end_datetime = datetime.now() bm_sync_git_tag = project_to_create.split(':'+target['target']+':')[-1].replace(':','/') @@ -292,6 +297,54 @@ def main(): } trigger_next("BUILD-MONITOR_%s_%d" % (bm_stage, r), bm_data) + # Mail notification + mymail = MailSender() + if len(snapshot.split(',')) > 1: + mymail.add_title('[SR-Sync] %s(Manual) => %s' % (ret_data.get('project'), target_project)) + else: + mymail.add_title('[SR-Sync] %s(%s) => %s' % (ret_data.get('project'), snapshot, target_project)) + mymail.add_message('Hello\n\nA virtual SR has been triggered for the below configuration;\n') + mymail.add_message('Source:') + mymail.add_message(' Project : %s' % ret_data.get('project')) + mymail.add_message(' Snapshots: %s' % snapshot) + mymail.add_message(' Branch : %s' % source_branch) + mymail.add_message('Target') + mymail.add_message(' Project : %s' % target_project) + mymail.add_message(' Branch : %s' % branch) + mymail.add_message('\nOBS Project: %s' % project_to_create) + + packages_to_be_synced = [ {'repo': x['gerrit_project'][1:], + 'package': x['package'], + 'tag': x['git_tag']} + for x in requests_item[project_to_create] + if x['gerrit_project'].startswith(HIGHLIGHT) ] + packages_to_be_skipped = [ {'repo': x['gerrit_project'][1:], + 'package': x['package'], + 'tag': x['git_tag']} + for x in requests_item[project_to_create] + if x['gerrit_project'].startswith(GREYEDOUT) ] + + mymail.add_message('\nPACKAGES TO BE SYNCED (%d)' % len(packages_to_be_synced)) + mymail.add_message('====') + for pt in packages_to_be_synced: + mymail.add_message('%-15s: %s' % (pt['package'], pt['repo'])) + mymail.add_message('\nPACKAGES TO BE SKIPPED (%d)' % len(packages_to_be_skipped)) + mymail.add_message('====') + for pt in packages_to_be_skipped: + mymail.add_message('%s' % (pt['repo'])) + + private_gerrit = Gerrit(os.getenv('GERRIT_HOSTNAME'), + os.getenv('GERRIT_USERNAME'), + os.getenv('GERRIT_SSHPORT'), + int(os.getenv('GERRIT_SILENT_MODE'))) + + # Add maintatiners to mail + [mymail.add_maintainers(private_gerrit, group_name = name) for name in notify_domain] + + mymail.send_mail() + del mymail + + if __name__ == '__main__': sys.exit(main())