[BuildMonitor] SR-SYNC: change the submit job and buildmonitor job 84/143384/3
authorSungHun Hwang <sh0924.hwang@samsung.com>
Wed, 9 Aug 2017 11:56:19 +0000 (20:56 +0900)
committerSungHun Hwang <sh0924.hwang@samsung.com>
Thu, 10 Aug 2017 10:07:37 +0000 (19:07 +0900)
change the submit and buildmonitor job
to support the SR-SYNC function for MCD project

Change-Id: Ic686e0862ef6eb660480c52e94fb2bfbd2e0671d
Signed-off-by: SungHun Hwang <sh0924.hwang@samsung.com>
job_buildmonitor.py
job_submit_request_sync.py

index 62eaac8..3015fc2 100644 (file)
@@ -1876,6 +1876,186 @@ def TRBS_end_create_image_for_sr_stage(bm_start_datetime, project):
               % (__file__)
 
 #==================================================================================
+# Sync_SR
+
+def sync_sr_submit_for_sync_sr_map(bm_sync_git_tag, bm_member_git_tag_list):
+    print '[%s] enter sync_sr_submit_for_sync_sr_map\n' % (__file__)
+
+    # get curr_sr_status_id
+    query = "SELECT id FROM sr_status WHERE sr = %s"
+    query_data = (bm_sync_git_tag,)
+    sync_sr_status_id = buildmonitor_db.get_value_from_query_data(query, query_data)
+    #print '[%s] sync_sr_status_id(%s)\n' % (__file__, sync_sr_status_id)
+
+    query = "SELECT id FROM sr_status WHERE sr = %s"
+    query_data = (bm_member_git_tag_list,)
+    member_sr_status_id = buildmonitor_db.get_value_from_query_data(query, query_data)
+    #print '[%s] member_sr_status_id(%s)\n' % (__file__, member_sr_status_id)
+
+    query = "INSERT INTO sync_sr_map (sync_sr_status_id, member_sr_status_id) VALUES(%s, %s)"
+    query_data = (sync_sr_status_id, member_sr_status_id)
+    buildmonitor_db.do_query(query, query_data)
+
+def sync_sr_submit_for_sr_status(bm_git_tag):
+    print '[%s] enter sync_sr_submit_for_sr_status\n' % (__file__)
+
+    # get curr_sr_status_id
+    query = "SELECT id FROM sr_status WHERE sr = %s"
+    query_data = (bm_git_tag,)
+    curr_sr_status_id = buildmonitor_db.get_value_from_query_data(query, query_data)
+    #print '[%s] curr_sr_status_id(%s)\n' % (__file__, curr_sr_status_id)
+
+    if curr_sr_status_id == INVALID_ID:
+        query = "INSERT INTO sr_status (sr, status, submit_time) VALUES(%s, %s, %s)"
+        query_data = (bm_git_tag, 'C', datetime.strptime(bm_git_tag[-15:], '%Y%m%d.%H%M%S'))
+        buildmonitor_db.do_query(query, query_data)
+    else:
+        print '[%s] Already existing sr_status_id(%s) skip INSERT sr_stage\n' \
+                % (__file__, curr_sr_status_id)
+
+def sync_sr_submit_for_sr_commit(commit_date, commit_msg, submit_date, submit_msg,
+                                 submitter, git_tag, gerrit_project,
+                                 gerrit_newrev, gerrit_account_name):
+    print '[%s] enter sync_sr_submit_for_sr_commit\n' % (__file__)
+
+    # get current_sr_status_id (should be here, after sr_submit_for_sr_status)
+    query = "SELECT id FROM sr_status WHERE sr = %s"
+    query_data = (git_tag,)
+    curr_sr_status_id = buildmonitor_db.get_value_from_query_data(query, query_data)
+    #print '[%s] curr_sr_status_id(%s)\n' % (__file__, curr_sr_status_id)
+
+    print '[%s] gerrit_project(%s)\n' % (__file__, gerrit_project)
+    if gerrit_project[0] == '-':
+        print '[%s] mixed git(%s)\n' % (__file__, gerrit_project)
+        gerrit_project = gerrit_project[1:]
+        obs_pkg_name = os.path.basename(gerrit_project) + '(mixed)'
+    elif gerrit_project[0] == '+':
+        print '[%s] pure git(%s)\n' % (__file__, gerrit_project)
+        gerrit_project = gerrit_project[1:]
+        obs_pkg_name = os.path.basename(gerrit_project[1:])
+    elif gerrit_project == "N/A":
+        print '[%s] Sync SR(%s)\n' % (__file__, gerrit_project)
+        obs_pkg_name = "N/A"
+    else:
+        print '[%s] no mixed marker "+" or "-", will be set as default(%s)\n' \
+              % (__file__, gerrit_project)
+        obs_pkg_name = os.path.basename(gerrit_project)
+
+    bm_submitter = submitter.replace('<', '').replace('>', '')
+    print '[%s] bm_submitter(%s) obs_pkg_name(%s)' \
+          % (__file__, bm_submitter, obs_pkg_name)
+
+    query = "INSERT INTO sr_commit (sr_status_id, git_repository," \
+            "obs_package_name, git_commit_id, git_commit_date, "   \
+            "git_commit_message, git_committer, sr_submit_date, "  \
+            "sr_submit_message, sr_submitter) " \
+            "VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
+    query_data = (curr_sr_status_id, gerrit_project, obs_pkg_name,
+                    gerrit_newrev, commit_date, commit_msg,
+                    gerrit_account_name, submit_date, submit_msg,
+                    bm_submitter)
+    buildmonitor_db.do_query(query, query_data)
+
+def sync_package_build_for_sr_detail_sr_stage(git_tag, bm_start_datetime,
+                                              bm_end_datetime, bm_src_project_lst):
+    print '[%s] enter sync_package_build_for_sr_detail_sr_stage\n' % (__file__)
+
+    # get current_sr_status_id (should be here after sync_sr_submit_for_sr_status)
+    query = "SELECT id FROM sr_status WHERE sr = %s"
+    query_data = (git_tag,)
+    curr_sr_status_id = buildmonitor_db.get_value_from_query_data(query, query_data)
+    #print '[%s] curr_sr_status_id(%s)\n' % (__file__, curr_sr_status_id)
+
+    # Wait 60 seconds to find the info_project_id
+    #print '[%s] wait 60 sec\n' % (__file__)
+    #sleep(60)
+
+    ### for sr_status_detail & sr_stage
+    # bm_src_project_lst is needed for multi profile
+    print '[%s] bm_src_project_lst(%s)\n' % (__file__, bm_src_project_lst)
+    for bm_src_project in bm_src_project_lst:
+        #print '[%s] bm_src_project(%s)\n' % (__file__, bm_src_project)
+
+        # get info_project_id -> get pre_build_project_id
+        query = "SELECT id FROM info_project WHERE project_name = %s"
+        query_data = (bm_src_project,)
+        info_project_id = buildmonitor_db.get_value_from_query_data(query, query_data)
+        query = "SELECT id FROM build_project WHERE info_project_id = %s"
+        query_data = (info_project_id,)
+        pre_build_project_id = buildmonitor_db.get_value_from_query_data(query, query_data)
+        print '[%s] info_project_id(%s), pre_build_project_id(%s)\n' \
+               % (__file__, info_project_id, pre_build_project_id)
+
+        # defensive code for the duplicated build_project_id
+        if pre_build_project_id == INVALID_ID:
+            print '[%s] cannot find build_project_id!! Adding NOW!!\n' % (__file__)
+            query = "INSERT INTO build_project (info_project_id, status) VALUES(%s, %s)"
+            query_data = (info_project_id, 'C')
+            buildmonitor_db.do_query(query, query_data)
+            query = "SELECT id FROM build_project WHERE info_project_id = %s"
+            query_data = (info_project_id,)
+            pre_build_project_id = buildmonitor_db.get_value_from_query_data(query, query_data)
+            print '[%s][After] info_project_id(%s), pre_build_project_id(%s)\n' \
+                   % (__file__, info_project_id, pre_build_project_id)
+
+        # get sr_status_detail_id for checking group submit
+        query = "SELECT id FROM sr_status_detail WHERE sr_status_id = %s " \
+                "AND pre_build_project_id = %s"
+        query_data = (curr_sr_status_id, pre_build_project_id)
+        sr_status_detail_id = buildmonitor_db.get_value_from_query_data(query, query_data)
+        #print '[%s] sr_status_detail_id(%s)\n' % (__file__, sr_status_detail_id)
+
+        if sr_status_detail_id == INVALID_ID:
+            # get pre_build_project_id
+            query = "SELECT id FROM build_project WHERE info_project_id = %s"
+            query_data = (info_project_id,)
+            pre_build_project_id = buildmonitor_db.get_value_from_query_data(query, query_data)
+
+            ### for sr_status_detail
+            query = "INSERT INTO sr_status_detail (sr_status_id, pre_build_project_id) " \
+                    "VALUES(%s, %s)"
+            query_data = (curr_sr_status_id, pre_build_project_id)
+            buildmonitor_db.do_query(query, query_data)
+
+            ### for sr_stage for multi profile
+            # [1] start stage
+            sr_submit_for_sr_stage(curr_sr_status_id, bm_start_datetime,
+                                   bm_end_datetime, pre_build_project_id)
+            # [1] end stage / [2] start stage
+            start_pre_build_for_sr_stage(git_tag, bm_start_datetime,
+                                         bm_end_datetime, pre_build_project_id)
+        else:
+            # clear the existing tables (sr_stage & build_snapshot)
+            print '[%s] Already existing sr_status_id(%s)!! clear the related tables\n' \
+                  % (__file__, sr_status_detail_id)
+            query = "DELETE FROM sr_stage WHERE sr_status_id = %s AND build_project_id = %s"
+            query_data = (curr_sr_status_id, pre_build_project_id)
+            buildmonitor_db.do_query(query, query_data)
+
+            # get build_snapshot_id for deleting build_snapshot_package & build_image
+            query = "SELECT id FROM build_snapshot WHERE build_project_id = %s"
+            query_data = (pre_build_project_id,)
+            build_snapshot_id = buildmonitor_db.get_value_from_query_data(query, query_data)
+
+            # delete build_snapshot & build_snapshot_package & build_image
+            query = "DELETE FROM build_snapshot WHERE build_project_id = %s"
+            query_data = (pre_build_project_id,)
+            buildmonitor_db.do_query(query, query_data)
+            query = "DELETE FROM build_snapshot_package WHERE build_snapshot_id = %s"
+            query_data = (build_snapshot_id,)
+            buildmonitor_db.do_query(query, query_data)
+            query = "DELETE FROM build_image WHERE build_snapshot_id = %s"
+            query_data = (build_snapshot_id,)
+            buildmonitor_db.do_query(query, query_data)
+
+            ### for sr_stage for multi profile
+            # [1] start stage
+            sr_submit_for_sr_stage(curr_sr_status_id, bm_start_datetime,
+                                   bm_end_datetime, pre_build_project_id)
+            # [1] end stage / [2] start stage
+            start_pre_build_for_sr_stage(git_tag, bm_start_datetime,
+                                         bm_end_datetime, pre_build_project_id)
+#==================================================================================
 def main():
     """
     Script entry point.
@@ -1971,6 +2151,65 @@ def main():
             bm_remote_jenkins_build_job(remote_data)
 
     #=======================================================
+    # Sync_SR_Submit
+    elif bm_stage == 'Sync_SR_Submit':
+        print '[%s][Sync_SR_Submit]\n' % (__file__)
+
+        # get vars
+        commit_date = transform_date(content.get("commit_date"))
+        commit_msg = truncate_msg(content.get("commit_msg"))
+        submit_date = transform_date(content.get("submit_date"))
+        submit_msg = truncate_msg(content.get("submit_msg"))
+        submitter = content.get("submitter")
+        gerrit_project = content.get("gerrit_project")
+        gerrit_newrev = content.get("gerrit_newrev")
+        gerrit_account_name = content.get("gerrit_account_name")
+        bm_start_datetime = content.get("bm_start_datetime")
+        bm_end_datetime = content.get("bm_end_datetime")
+        bm_src_project_lst = content.get("bm_src_project_lst")
+
+        bm_member_sr_info = content.get("bm_member_sr_info")
+        print 'bm_member_sr_info(%s)\n' % (bm_member_sr_info)
+        bm_sync_git_tag = content.get("bm_sync_git_tag")
+        print 'bm_sync_git_tag(%s)\n' % (bm_sync_git_tag)
+
+        # func call
+        ### 1. bm_sync_git_tag (sr_status + sr_commit + sr_status_detail + sr_stage)
+        sync_sr_submit_for_sr_status(bm_sync_git_tag)
+        sync_sr_submit_for_sr_commit(commit_date, commit_msg, submit_date, submit_msg,
+                                     submitter, bm_sync_git_tag, gerrit_project,
+                                     gerrit_newrev, gerrit_account_name)
+        sync_package_build_for_sr_detail_sr_stage(bm_sync_git_tag, bm_start_datetime,
+                                                 bm_end_datetime,
+                                                 bm_src_project_lst)
+
+        ### 2. bm_member_git_tag_list (sr_status + sr_commit)
+        for each_request in bm_member_sr_info['requests']:
+            print '  snapshot:%s' % each_request['snapshot']
+            print '  submit_list:'
+            for each_sr_info in each_request['submit_list']:
+                each_git_tag = each_sr_info.keys()[0]
+                print '    %s' % each_git_tag
+
+                # member_sr for [sr_status] table
+                sync_sr_submit_for_sr_status(each_git_tag)
+
+                # member sr & sync_sr for [sync_sr_map] table
+                sync_sr_submit_for_sync_sr_map(bm_sync_git_tag, each_git_tag)
+
+                for each_git_path in each_sr_info[each_sr_info.keys()[0]]:
+                    print '      %s' % each_git_path # replace gerrit_project
+                    # member sr for [sr_commit]
+                    sync_sr_submit_for_sr_commit(commit_date, commit_msg,
+                                                 submit_date, submit_msg,
+                                                 submitter, each_git_tag,
+                                                 each_git_path, gerrit_newrev,
+                                                 gerrit_account_name)
+
+
+        #update_sr_submit_log_completed(git_tag)
+
+    #=======================================================
     # [PRE] Build
     #=======================================================
     # [PRE] Snap
index 4550e44..5a9dab0 100644 (file)
@@ -222,25 +222,27 @@ def main():
                           'obs_target_prj': project, \
                           'url': git_url, \
                           'reason': reason})
-            #FIXME: remove fake entries
-            fake_date = str(bm_start_datetime).split('.')[0] + ' +0900'
-            fake_git_tag = project_to_create.split(':'+target['target']+':')[-1].replace(':','/')
-            #TODO: move BUILD-MONITOR after pre-release-request
-            trigger_next('BUILD-MONITOR_%s' % target['target'], \
-                         {'bm_stage' : 'Submit',
-                          'commit_date' : fake_date,
-                          'commit_msg' : '',
-                          'submit_date' : fake_date,
-                          'submit_msg' : 'SR sync from %s' % project,
-                          'submitter' : '<tizen.build@samsung.com>',
-                          'git_tag' : fake_git_tag,
-                          'gerrit_project' : '',
-                          'gerrit_newrev' : '',
-                          'gerrit_account_name' : 'Tizen Build',
-                          'bm_start_datetime': str(bm_start_datetime),
-                          'bm_end_datetime': str(datetime.now()),
-                          'bm_src_project_lst': [project_to_create]
-                           })
+
+            bm_end_datetime = datetime.now()
+            bm_sync_git_tag = project_to_create.split(':'+target['target']+':')[-1].replace(':','/')
+
+            bm_stage = "Sync_SR_Submit"
+            bm_data = {"bm_stage" : bm_stage,
+                       "commit_date" : str(bm_end_datetime),
+                       "commit_msg" : "N/A",
+                       "submit_date" : str(bm_end_datetime),
+                       "submit_msg" : "N/A",
+                       "submitter" : "<tizen.build@samsung.com>",
+                       "bm_member_sr_info" : ret_data,
+                       "bm_sync_git_tag" : bm_sync_git_tag,
+                       "gerrit_project" : "N/A",
+                       "gerrit_newrev" : "N/A",
+                       "gerrit_account_name" : "tizen.build",
+                       "bm_start_datetime": str(bm_start_datetime),
+                       "bm_end_datetime": str(bm_end_datetime),
+                       "bm_src_project_lst": [project_to_create],
+                      }
+            trigger_next("BUILD-MONITOR_%s" % bm_stage, bm_data)
 
 if __name__ == '__main__':
     sys.exit(main())