import json
import re
import requests
+import ast
import xml.etree.cElementTree as ElementTree
from xml.sax.saxutils import escape
from time import sleep
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
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"""
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)
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' \
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]:
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' \
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:
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'), \
# 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(':','/')
}
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())