TPE-330 Handle multiple repa job 99/150899/1
authorhyokeun <hyokeun.jeon@samsung.com>
Tue, 19 Sep 2017 05:28:23 +0000 (14:28 +0900)
committerhyokeun <hyokeun.jeon@samsung.com>
Tue, 19 Sep 2017 05:28:23 +0000 (14:28 +0900)
Change-Id: I81c6f47ec7a86263999567f953f361519dc1ef80

job_repa.py

index 02cb851..7cfc350 100644 (file)
@@ -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)