#!/usr/bin/env python
-from common import runner
-from common import utils
-from common.envparas import export
+
+"""The job will do corresponding operations, like create accept tag/notify tag
+owner, for SR status changed."""
+
from common.git import Git, clone_gitproject
from common import buildservice
from common.gerrit import Gerrit
from requests.mailer import mailer
from gbp.git.repository import GitRepositoryError
-import json
import sys
import os
import datetime
-import codecs
# set default char-set endcoding to utf-8
reload(sys)
sys.setdefaultencoding('utf-8')
-envparas = ['TRIGGER_INFO',
- 'OBS_OSCRC_PATH',
- 'OBS_API_URL',
- 'OBS_API_USERNAME',
- 'OBS_API_PASSWD',
- 'SR_ENABLE_USER',
- 'NOREPLY_EMAIL_SENDER',
- 'MAILINGLIST',
- 'BCC_MAILS',
- 'BUILD_TAG',
- 'OBS_URL',
- 'EMAIL_TEMPLATES_DIR',
- 'GIT_CACHE_DIR',
- 'GERRIT_HOSTNAME',
- 'GERRIT_USERNAME',
- 'GERRIT_SSHPORT',
- 'WORKSPACE']
-
-export(envparas, locals())
-GIT_URL = 'ssh://%s@%s:%s' % (GERRIT_USERNAME, GERRIT_HOSTNAME, GERRIT_SSHPORT)
-
def request_url(request_id):
- if OBS_URL:
- return '%s/request/show/%s' %(OBS_URL, request_id)
+ """Get request url"""
+
+ if os.getenv('OBS_URL'):
+ return '%s/request/show/%s' % (os.getenv('OBS_URL'), request_id)
else:
- return '%s' %(request_id)
+ return '%s' % (request_id)
def tag_info(prj, tag):
+ """Get git tag info"""
+
try:
- mygit = Git(os.path.join(GIT_CACHE_DIR, prj))
+ mygit = Git(os.path.join(os.getenv('GIT_CACHE_DIR'), prj))
if mygit.find_tag(tag):
return mygit.get_tag(tag)
except GitRepositoryError, err:
print err
# clone gerrit project to local dir
- if not clone_gitproject(prj, os.path.join(WORKSPACE, prj)):
+ if not clone_gitproject(prj, os.path.join(os.getenv('WORKSPACE'), prj)):
exit(1)
- mygit = Git(os.path.join(WORKSPACE, prj))
+ mygit = Git(os.path.join(os.getenv('WORKSPACE'), prj))
return mygit.get_tag(tag)
-def OBS_Git_data(event_fields):
+def obs_git_data(event_fields):
+ """Put obs and git data into a dict"""
obs_fields_mapping = {'author': 'OBS_REQ_AUTHOR',
'comment': 'OBS_REQ_COMMENT',
entry = {}
for line in section.split('\n'):
try:
- key, value = line.split(':',1)
+ key, value = line.split(':', 1)
entry[mapping[key.strip()]] = value.strip()
except:
print '-------------------------------------'
- print 'key:value %s' %(line)
+ print 'key:value %s' % line
# FIXME: here is just a temp solution
print 'FATAL: no tag in submit description'
if 'GIT_PROJECT' in entry.keys() and 'GIT_TAG' in entry.keys():
entry.update(tag)
else:
print '-------------------------------------'
- print "FATAL ERROR: Invalid rquest info: the request might be created by manual "
+ print "FATAL ERROR: Invalid rquest info: the request might be created by manual"
print '-------------------------------------'
exit(0)
desp_list.append(entry)
# Database records
print '########################################'
import pprint
- pp=pprint.PrettyPrinter(indent=4)
- print pp.pprint(ret_data)
+ ppt = pprint.PrettyPrinter(indent=4)
+ print ppt.pprint(ret_data)
return ret_data
def delete_package(prj, pkg):
"""delete source package when sr end"""
- bs = BuildService(os.getenv('OBS_API_URL'),
+ _bs = BuildService(os.getenv('OBS_API_URL'),
os.getenv('OBS_API_USERNAME'),
os.getenv('OBS_API_PASSWD'))
- bs.delete_package(prj, pkg)
+ _bs.delete_package(prj, pkg)
def request_accepted(data, gerrit, gitprj):
+ """Do lots of things when request accepted"""
+
print '====request accepted===================================='
message = 'The SR (Submit Request) has been accepted to OBS %s project.\n' \
'- Git project: %s\n' \
'- Tag:%s\n' \
'- Commit: %s\n' \
- '- Request URL:%s' %( data['OBS_REQ_PRJ'],
+ '- Request URL:%s' % (data['OBS_REQ_PRJ'],
data['OBS_REQ_PKG'],
data["OBS_REQ_SENDER"],
data["OBS_REQ_COMMENT"],
gitprj.create_tag(accepted_tag, message, data['commitid'])
- args = []
gitprj.push('ssh://%s@%s:%s/%s' %(gerrit.username, gerrit.host, gerrit.port, data['GIT_PROJECT']),
'refs/tags/%s' %(accepted_tag))
-def request_rejected(data, gerrit, gitprj):
+def request_rejected(data, gerrit):
+ """When request rejected, give msg to gerrit and delete remote package"""
+
print '====request rejected===================================='
message = 'The SR (Submit Request) has been *rejected* to OBS %s project.\n' \
'- Git project: %s\n' \
'- Tag:%s\n' \
'- Commit: %s\n' \
- '- Request URL:%s' %( data['OBS_REQ_PRJ'],
+ '- Request URL:%s' % (data['OBS_REQ_PRJ'],
data["OBS_REQ_SENDER"],
data["OBS_REQ_COMMENT"],
data['GIT_PROJECT'],
delete_package(data['OBS_REQ_PRJ_SRC'], data['OBS_REQ_PKG_SRC'])
def request_revoked(data):
+ """When request revoked, delete the remote package"""
+
print '====request revoked===================================='
# delete obs source package
delete_package(data['OBS_REQ_PRJ_SRC'], data['OBS_REQ_PKG_SRC'])
-def request_created(data, gerrit, gitprj):
+def request_created(data):
+ """Print request created information"""
+
print '====request created===================================='
message = 'A SR (Submit Request) has been trigger to submit the commit to OBS %s project.\n' \
'- Git project: %s\n' \
'- Tag:%s\n' \
'- Commit: %s\n' \
- '- Request URL:%s' %( data['OBS_REQ_PRJ'],
+ '- Request URL:%s' % (data['OBS_REQ_PRJ'],
data["GIT_AUTHOR_EMAIL"],
data["message"],
data['GIT_PROJECT'],
data['GIT_COMMIT_SUBJ'],
request_url(data['OBS_REQ_ID']))
- print '#########NOTE: post to gerrit is disabled###############################'
+ print '#########NOTE: post to gerrit is disabled###########################'
#gerrit.review(commit = data['commitid'], message = message)
print message
print '########################################'
def notify_submiter(event_fields, data):
+ """Notify submiter obs events"""
+
print '====Notify the tag owner===================================='
status = {}
- bs = buildservice.BuildService(OBS_API_URL, OBS_API_USERNAME, OBS_API_PASSWD)
+ _bs = buildservice.BuildService(os.getenv('OBS_API_URL'), \
+ os.getenv('OBS_API_USERNAME'), os.getenv('OBS_API_PASSWD'))
# email notification to mailing list
- data.update({'noreply_sender' : NOREPLY_EMAIL_SENDER,
- 'mailinglist' : MAILINGLIST.split(','),
- 'bccs' : BCC_MAILS.split(',')})
- status = mailer(event_fields, bs, data, SR_ENABLE_USER, EMAIL_TEMPLATES_DIR)
+ data.update({'noreply_sender' : os.getenv('NOREPLY_EMAIL_SENDER'),
+ 'mailinglist' : os.getenv('MAILINGLIST', '').split(','),
+ 'bccs' : os.getenv('BCC_MAILS', '').split(',')})
+ status = mailer(event_fields, _bs, data, os.getenv('SR_ENABLE_USER'),
+ os.getenv('EMAIL_TEMPLATES_DIR'))
print status
if status:
- prepare_mail("%s.env" %(BUILD_TAG), status['subject'], status['body'], NOREPLY_EMAIL_SENDER, status['To'], status['Cc'])
+ prepare_mail("%s.env" % (os.getenv('BUILD_TAG')), status['subject'], \
+ status['body'], os.getenv('NOREPLY_EMAIL_SENDER'), \
+ status['To'], status['Cc'])
+
+def main():
+ """The main body"""
+
+ event_fields = trigger_info(os.getenv('TRIGGER_INFO'))
+
+ if not event_fields:
+ print 'Invalid OBS event'
+ return -1
-event_fields = trigger_info(TRIGGER_INFO)
+ data = obs_git_data(event_fields)
-if not event_fields:
- print 'Invalid OBS event'
- sys.exit(-1)
+ notify_submiter(event_fields, data)
-data = OBS_Git_data(event_fields)
+ gerrit = Gerrit(os.getenv('GERRIT_HOSTNAME'), os.getenv('GERRIT_USERNAME'),
+ os.getenv('GERRIT_SSHPORT'))
-notify_submiter(event_fields, data)
+ gitprj = Git('%s/%s' % (os.getenv('GIT_CACHE_DIR'), data['GIT_PROJECT']))
-gerrit = Gerrit(GERRIT_HOSTNAME, GERRIT_USERNAME, GERRIT_SSHPORT)
+ if event_fields['type'] == 'OBS_SRCSRV_REQUEST_STATECHANGE':
+ if event_fields['state'] == 'declined':
+ request_rejected(data, gerrit)
+ elif event_fields['state'] == 'revoked':
+ request_revoked(data)
+ trigger_next('reviewrepo_cleanup', data)
-gitprj = Git('%s/%s' %(GIT_CACHE_DIR, data['GIT_PROJECT']))
+ elif event_fields['type'] == 'OBS_SRCSRV_REQUEST_CREATE':
+ request_created(data)
+ trigger_next('pre_release_image', data)
-if event_fields['type'] == 'OBS_SRCSRV_REQUEST_STATECHANGE':
- if event_fields['state'] == 'declined':
- request_rejected(data, gerrit, gitprj)
- elif event_fields['state'] == 'revoked':
- request_revoked(data)
- trigger_next('reviewrepo_cleanup', data)
+ elif event_fields['type'] == 'OBS_SRCSRV_REQUEST_ACCEPTED':
+ request_accepted(data, gerrit, gitprj)
+ trigger_next('reviewrepo_cleanup', data)
-elif event_fields['type'] == 'OBS_SRCSRV_REQUEST_CREATE':
- request_created(data, gerrit, gitprj)
- trigger_next('pre_release_image', data)
+ return 0
-elif event_fields['type'] == 'OBS_SRCSRV_REQUEST_ACCEPTED':
- request_accepted(data, gerrit, gitprj)
- trigger_next('reviewrepo_cleanup', data)
+if __name__ == '__main__':
+ sys.exit(main())