def post_processing(tizen_studio, src_git, prop, data, builddir, mailer, build):
""" Create SR of the generated tpks thru git tagging """
- rs_ver, fail_title, fail_log = tizen_studio.gather_build_result()
- print 'VM returned [%s] [%s] [%s]\n' % (rs_ver, fail_title, fail_log)
-
- mailer.add_message('SDK Rootstrap Version: %s' % rs_ver)
-
- if tizen_studio.build_result != 0 and fail_title != None:
- print 'App Build Fail'
- mailer.add_title(fail_title)
- mailer.add_message('Result: FAIL')
- mailer.add_message('\n\n%s' % fail_log)
- return
-
print 'TizenStudio: builddir: %s' % tizen_studio.builddir
spec = generate_spec_file(tizen_studio, src_git, prop, data)
build_mode=os.getenv('BUILD_MODE'), \
parallel_jobs=parallel_jobs)
print '[ TizenStudio END ] %s' % (str(datetime.now()))
+ print ret
+
+ rs_ver, fail_title, fail_log = my_tizen_studio.gather_build_result()
+ print 'VM returned [%s] [%s] [%s]\n' % (rs_ver, fail_title, fail_log)
+
+ mailer.add_message('SDK Rootstrap Version: %s' % rs_ver)
+
+ if my_tizen_studio.build_result != 0 and fail_title != None:
+ print 'App Build Fail'
+ mailer.add_title(fail_title)
+ mailer.add_message('Result: FAIL')
+ mailer.add_message('\n\n%s' % fail_log)
if data.get('buildcheck', None) == None and data.get('type', None) == 'SUBMIT':
+ # Send mail only for failed build
+ if 'FAIL' in mailer.email_title:
+ mailer.send_mail()
+ return 2
post_processing(my_tizen_studio, src_git, project_properties, data, builddir, mailer, build)
# Send mail only for failed build
if 'FAIL' in mailer.email_title:
mailer.send_mail()
+ return 3
if 'FAIL' in mailer.email_title:
return 1
import xml.etree.cElementTree as ET
import inspect
from random import randint
+from jenkinsapi.jenkins import Jenkins
sys.path.insert(1, os.path.join(sys.path[0], '..'))
from common.send_mail import prepare_mail, makemail
from common.gerrit import GerritEnv
from common.tizen_studio import TizenStudio
+from common.workflow import MailSender
def list_all_packages(profile, gerrit_env):
'package': _pkg})
return list_all
+def build_result_report(build_number):
+
+ build_result = []
+ reason = None
+ target = None
+ branch = None
+
+ jenkins_server = Jenkins(os.getenv('JENKINS_URL'), os.getenv('JENKINS_USER'), os.getenv('JENKINS_PW'))
+ build_abs = jenkins_server[os.getenv('JOB_NAME')].get_build(int(build_number))
+ for action in build_abs.get_actions().get('triggeredBuilds'):
+ single_job = action.get('url').split('/')[-3]
+ single_build_number = int(action.get('number'))
+ single_build = jenkins_server[single_job].get_build(single_build_number)
+ single_build_result = single_build.get_status()
+ print single_job, single_build_number, single_build_result
+ sys.stdout.flush()
+
+ if single_build_result != 'SUCCESS':
+
+ # parameters
+ package = None
+ project = None
+ for parm in single_build.get_actions().get('parameters'):
+ if 'name' in parm and parm['name'] == 'TRIGGER_INFO':
+ json = ast.literal_eval(base64.b64decode(parm.get('value')).replace('null', '\"none\"'))
+ reason = json.get('full_build')
+ project = json.get('event').get('GERRIT_PROJECT')
+ target = json.get('obs_project')
+ package = json.get('obs_package')
+ branch = json.get('branch')
+
+ single_build_log = single_build.get_console()
+
+ # log trimming
+ exp = r'/home/build/tizen-sdk-cli/tools/smart-build-interface/../../platforms/[a-zA-Z-0-9./]{1,}/rootstraps/[a-zA-Z]{1,}-[0-9.]{1,}-(emulator|device).core.private.[0-9_]{1,}'
+ single_build_log = re.sub(exp, '{ROOTSTRAP}', single_build_log)
+ exp = r'/home/build/tizen-sdk-cli/tools/smart-build-interface/../'
+ single_build_log = re.sub(exp, '{BUILDTOOL}', single_build_log)
+ if single_build_log.rfind('ERROR: No "profile" tag in property file') != -1:
+ single_build_log = single_build_log[single_build_log.rfind('ERROR: No "profile" tag in property file'):]
+
+ start_idx = single_build_log.rfind('VM returned [')
+ if start_idx <= -1: start_idx = 0
+ start_idx = len(single_build_log) - 2048
+ if start_idx <= -1: start_idx = 0
+ end_idx = single_build_log.rfind('Total time')
+ single_build_log = single_build_log[start_idx:end_idx]
+
+ trimmed_log = []
+ for line in single_build_log.split('\n'):
+ if 'Finished building: ' in line: continue
+ if line.endswith('^'): continue
+ trimmed_log.append(line)
+ single_build_log = '\n'.join(trimmed_log)
+
+ build_result.append({'number': single_build_number, \
+ 'result': single_build_result, \
+ 'project': project, \
+ 'package': package, \
+ 'log': '%s' % single_build_log})
+ del single_build_log
+ del single_build
+
+ if len(build_result) <= 0:
+ return 0
+
+ mymail = MailSender()
+ mymail.add_title('ABS Build check %d errors for %s' % (len(build_result), reason))
+ mymail.add_message('App Build System(ABS) reports entire project build.\n' \
+ 'It is intended for build check with new private rootstrap.\n' \
+ '(Base souce code from the most recent accepted SR)\n\n')
+ mymail.add_message('Full build cause: %s\n' % reason)
+ mymail.add_message('OBS Target Project: %s\n' % target)
+ mymail.add_message('branch: %s\n\n' % branch)
+
+ log_size = 0
+ for x in build_result:
+ sys.stdout.flush()
+ mymail.add_message('\n\n[ %s ] [%s]\n=========' % (x.get('project'), x.get('result')))
+ mymail.add_message(x.get('log'))
+ log_size += len(x.get('log'))
+ print 'Log Size: %d' % log_size
+
+ mymail.add_message('\n\n--------------------------------------------------------\n'\
+ 'Automatically generated by backend service.\n'\
+ 'Please DO NOT Reply!')
+
+ mymail.add_receiver(os.getenv('ABS_MAILINGLIST').split(','))
+ mymail.send_mail()
+
+ return 2
+
def main(new_rs, gerrit_name):
+ if os.getenv('BUILD_RESULT_REPORT', None):
+ return build_result_report(os.getenv('BUILD_RESULT_REPORT'))
+
if gerrit_name.startswith('public_gerrit'):
gerrit_infra = 'PUBLIC'
gerrit_env = GerritEnv('PUBLIC_')
% (int(os.getenv('BUILD_NUMBER')), index, trigger_data['source']['package']), \
trigger_data)
+ trigger_next('ABS_BUILD_RESULT', {'Empty': 'Blank'}, extra_params={'BUILD_RESULT_REPORT': os.getenv('BUILD_NUMBER')})
+
if __name__ == '__main__':
sys.exit(main(os.getenv('NEW_ROOTSTRAP'), os.getenv('GERRIT_INFRA')))
+