From: hyokeun Date: Tue, 19 Sep 2017 05:28:23 +0000 (+0900) Subject: TPE-330 Handle multiple repa job X-Git-Tag: submit/trunk/20190927.012743~285 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F99%2F150899%2F1;p=services%2Fjenkins-scripts.git TPE-330 Handle multiple repa job Change-Id: I81c6f47ec7a86263999567f953f361519dc1ef80 --- diff --git a/job_repa.py b/job_repa.py index 02cb851..7cfc350 100644 --- a/job_repa.py +++ b/job_repa.py @@ -48,21 +48,6 @@ class LocalError(Exception): """Local error exception.""" pass -#------------------------------------------------------------------------------- -# global variables -status_str = "" -error_string = "" -obs_api = os.getenv("OBS_API_URL") -obs_user = os.getenv("OBS_API_USERNAME") -obs_passwd = os.getenv("OBS_API_PASSWD") - -repa_decision = os.getenv("REPA_DECISION") -obs_project = os.getenv("OBS_PROJECT") -sr_tag = os.getenv("SR_TAG") -repa_comment = os.getenv("REPA_COMMENT") -repa_user = os.getenv("REPA_USER") - -#------------------------------------------------------------------------------- def is_aggregate_package(build, proj, pack): if "_aggregate" in build.get_src_file_list(proj, pack): return True @@ -85,13 +70,10 @@ def check_permission(build, project, userid): return False - def accept_or_reject(build, prerelease_proj, git_tag, state, comment=''): info = build.get_info(prerelease_proj) print "repa %s %s (%s)" % (state, git_tag, prerelease_proj) - global status_str - status_str = "Succeeded" submitter = info.get('submitter', '') projects = '[' + ', '.join(info['projects']) + ']' @@ -134,23 +116,36 @@ def accept_or_reject(build, prerelease_proj, git_tag, state, comment=''): print 'set SR state to', state def repa_reject(build, proj, git_tag, comment=''): - accept_or_reject(build, proj, git_tag, 'declined', comment) + try: + accept_or_reject(build, proj, git_tag, 'declined', comment) + return "" + except Exception as err: + return str(err) def repa_accept(build, proj, git_tag, comment=''): - accept_or_reject(build, proj, git_tag, 'accepted', comment) + try: + accept_or_reject(build, proj, git_tag, 'accepted', comment) + return "" + except Exception as err: + return str(err) -def main(): - """Script entry point. +def process_single_item(no, repa_decision, obs_project, sr_tag, repa_comment, repa_user): + """ """ - print '---[JOB STARTED: repa]-------------------------' + error_string = "" + print "\n==========" print "OBS_PROJECT = ", obs_project print "SR_TAG = ", sr_tag print "REPA_COMMENT = ", repa_comment print "REPA_DECISION = ", repa_decision print "REPA_USER = ", repa_user + obs_api = os.getenv("OBS_API_URL") + obs_user = os.getenv("OBS_API_USERNAME") + obs_passwd = os.getenv("OBS_API_PASSWD") + build = BuildService(obs_api, obs_user, obs_passwd) ret = 0 @@ -159,32 +154,59 @@ def main(): if os.getenv("REPA_CHECK_PERMISSION", 0): if not check_permission(build, obs_project, repa_user): - raise LocalError("User %s does not have permission for OBS project %s" % (repa_user, obs_project)) - - if repa_decision == "accept": - repa_accept(build, prerelease_proj, sr_tag, repa_comment) + error_string = "User %s does not have permission for OBS project %s" % (repa_user, obs_project) + + if error_string is None or error_string == "": + if repa_decision == "accept": + error_string = repa_accept(build, prerelease_proj, sr_tag, repa_comment) + else: + error_string = repa_reject(build, prerelease_proj, sr_tag, repa_comment) + + # BUILD-MONITOR + bm_stage = "REPA" + if error_string is None or error_string == "": + status_str = "Succeeded" else: - repa_reject(build, prerelease_proj, sr_tag, repa_comment) + status_str = "Failed" + bm_data = {"bm_stage": bm_stage, + "sr_tag": sr_tag, + "profile":obs_project, + "status": status_str, + "status_reason": error_string} + trigger_next("BUILD-MONITOR_%s" % (no), bm_data) - return 0 + return error_string if __name__ == '__main__': - try: - exit_status = main() - except Exception as err: - print err - global status_str, error_string - status_str = "Failed" - error_string = str(err) - exit_status = 1 - -bm_stage = "REPA" -bm_data = {"bm_stage": bm_stage, - "sr_tag": sr_tag, - "profile":obs_project, - "status": status_str, - "status_reason": error_string} -trigger_next("BUILD-MONITOR", bm_data) + repa_decision = os.getenv("REPA_DECISION") + obs_project = os.getenv("OBS_PROJECT") + sr_tag = os.getenv("SR_TAG") + repa_comment = os.getenv("REPA_COMMENT") + repa_user = os.getenv("REPA_USER") + + errors = [] + + if repa_decision and obs_project and sr_tag and repa_comment and repa_user: + ret = process_single_item("0", repa_decision, obs_project, sr_tag, repa_comment, repa_user) + if len(ret) > 0: + errors.append(ret) + + trigger_item = os.getenv("TRIGGER_INFO", None) + if trigger_item: + item_list = trigger_info(trigger_item) + new_list = sorted(item_list, key=lambda k: k['no']) + for x in new_list: + no = x.get('no') + repa_decision = x.get('repa_decision_jenkins') + obs_project = x.get('obs_project') + sr_tag = x.get('sr_tag') + repa_comment = x.get('comment') + repa_user = x.get('repa_user') + ret = process_single_item(no, repa_decision, obs_project, sr_tag, repa_comment, repa_user) + if len(ret) > 0: + errors.append(ret) + + if len(errors) >= 1: + sys.exit(len(errors)) -sys.exit(exit_status)