def IsnlwSwitchToLw(isBuildTypeSwitched, buildgroup, xmlbuildgroupinfo, params_dict):
    if isBuildTypeSwitched == True:
        nlw_image_path = nlw_image_save.retractPath('version_build/BalongV9R1SFT_nlw_manifest.xml', '/home/jenkins_ci/vb_image/' + buildgroup, xmlbuildgroupinfo) 
        if nlw_image_path != "":
            params_dict["nlw_image_path"] = nlw_image_path
            return True
        else:
            return False
    else:
        return False
Esempio n. 2
0
def IsnlwSwitchToLw(isBuildTypeSwitched, buildgroup, xmlbuildgroupinfo, params_dict):
    if isBuildTypeSwitched == True:
        nlw_image_path = nlw_image_save.retractPath('version_build/BalongV9R1SFT_nlw_manifest.xml', '/home/jenkins_ci/vb_image/' + buildgroup, xmlbuildgroupinfo) 
        if nlw_image_path != "":
            params_dict["nlw_image_path"] = nlw_image_path
            return True
        else:
            return False
    else:
        return False
def main():
    curtime = datetime.datetime.now()
    print "version_compile start time:" + curtime.strftime("%H:%M:%S")
    argv_list = sys.argv[1:]
    if len(argv_list) == 0:
        print "fail,parameters_is_empty"
        return 1

    params_dict = {}
    for p in argv_list:
        if string.find(p, ':') != -1:
            subs = string.split(p, ':')
            params_dict[subs[0]] = subs[1]
        else:
            params_dict[p] = ""

    if not params_dict.has_key('version') or \
       not params_dict.has_key('branch') or \
       not params_dict.has_key('changeid') or \
       not params_dict.has_key('timestamp')    or \
       not params_dict.has_key('tag') or \
       not params_dict.has_key('buildgroup') or \
       not params_dict.has_key('owners'):
        print "fail,params has not enough key"
        return 1

    branch_name = params_dict['branch']
    timestamp = params_dict['timestamp']
    version_name = params_dict['version']
    buildgroup = params_dict['buildgroup']
    changeid = params_dict['changeid']

    buildtype = 'all'
    if params_dict.has_key('buildtype'):
        buildtype = params_dict['buildtype']

    target = ''
    if params_dict.has_key('target'):
        target = params_dict['target']

    if not params_dict.has_key('transfer'):
        params_dict['transfer'] = 'true'

    source_dir = os.path.abspath('../..')

    complie_entry_dir = source_dir + '/build'
    os.chdir(complie_entry_dir)

    build_rule_file = source_dir + "/build/version_build/build_rule.xml"
    producttype = build_utility.get_group_product_type(build_rule_file,
                                                       version_name,
                                                       buildgroup)
    print "producttype:" + producttype
    root_dir = source_dir + "/../../"
    code_bak_dir = root_dir + "/../code_back"
    lw_Xml_Path = source_dir + "/build/version_build/BalongV9R1SFT_lw_manifest.xml"
    hw_Xml_path = source_dir + "/build/version_build/BalongV9R1SFT_nlw_manifest.xml"

    rm_bak_code_dir_cmd = "rm -rf " + code_bak_dir
    #清除上次的编译记录
    build_utility.CleanOldBuildFile(source_dir)

    build_result_str = ''
    isBuildTypeSwitched = False

    # release 构建时,使用产品线发布方式构建
    # be_release_build = build_utility.is_group_release_build(build_rule_file,version_name,buildgroup)

    # if 'true' == be_release_build:
    # 编译发布的二进制文件
    #1)build balong-libs 2)构造产品线编译的环境 3)rm confidential 4)restor balong libs
    # if producttype == "mbb" or \
    # producttype == "phone" :
    # relbuildscriptdic = build_utility.gen_build_scripts(source_dir,version_name,branch_name,buildgroup,buildtype,"balong-libs")
    # build_result_str +=build_utility.exec_group_build(relbuildscriptdic)
    # rm_confidential_code(source_dir)
    # restore_balong_libs(source_dir)

    # 编译camera后,删除camera代码
    # if producttype == "phone" :
    # relbuildscriptdic = build_utility.gen_build_scripts(source_dir,version_name,branch_name,buildgroup,buildtype,"camera",params_dict)
    # build_result_str +=build_utility.exec_group_build(relbuildscriptdic)
    # rm_camera_code(source_dir)

    # 按产品线发布方式编译,传出版本,做内部验证
    if producttype == "tool":
        buildscriptdic = build_utility.gen_build_scripts(
            source_dir, version_name, branch_name, buildgroup, buildtype,
            target, params_dict)
        build_result_str += build_utility.exec_sequ_build(buildscriptdic)
    elif producttype == "ut":
        buildscriptdic = build_utility.gen_build_scripts(
            source_dir, version_name, branch_name, buildgroup, buildtype,
            target, params_dict, False)
        build_result_str += build_utility.exec_group_build(buildscriptdic)
    elif producttype == "inc_chk":
        buildscriptdic = build_utility.gen_build_scripts(
            source_dir, version_name, branch_name, buildgroup, buildtype,
            target, params_dict, False)
        build_result_str += build_utility.exec_group_build(buildscriptdic)
    elif producttype != "phone":
        buildscriptdic = build_utility.gen_build_scripts(
            source_dir, version_name, branch_name, buildgroup, buildtype,
            target, params_dict)
        build_result_str += build_utility.exec_group_build(buildscriptdic)
    else:
        xmlbuildgroupinfo = buildgroup + "\n"
        xmlbuildgroupdic = build_utility.get_rules_of_version(
            build_rule_file, version_name)
        if xmlbuildgroupdic.has_key(buildgroup):
            xmlbuildgroupinfo += str(xmlbuildgroupdic[buildgroup])
        buildtargettype = judge_build_target_type(params_dict, changeid,
                                                  branch_name)
        print 'buildtargettype:' + buildtargettype

        # Temp : add by zhangteng
        #params_dict['system_update'] = get_upated_system(changeid,branch_name)
        # End

        os.system(rm_bak_code_dir_cmd)

        if (target == '' or target == 'balong'):
            if buildtargettype == BUILD_TARGET_PRE_CB_LW:
                curtime = datetime.datetime.now()
                print "search vb_img path start time:" + curtime.strftime(
                    "%H:%M:%S")
                nlw_image_path = nlw_image_save.retractPath(
                    'version_build/BalongV9R1SFT_nlw_manifest.xml',
                    '/home/jenkins_ci/vb_image/' + buildgroup,
                    xmlbuildgroupinfo)
                curtime = datetime.datetime.now()
                print "search vb_img path end time:" + curtime.strftime(
                    "%H:%M:%S")
                if ("" != nlw_image_path):
                    target = "lw_rom"
                    params_dict["nlw_image_path"] = nlw_image_path
                    mv_code_dir.main("hwrom", root_dir, code_bak_dir,
                                     lw_Xml_Path, hw_Xml_path)
                    buildscriptdic = build_utility.gen_build_scripts(
                        source_dir, version_name, branch_name, buildgroup,
                        buildtype, target, params_dict)
                    build_result_str += build_utility.exec_group_build(
                        buildscriptdic)
                    print 'lw_rom build result:' + build_result_str
                    mv_code_dir.main("hwrom", code_bak_dir, root_dir,
                                     lw_Xml_Path, hw_Xml_path)
                    os.system(rm_bak_code_dir_cmd)
                else:
                    buildtargettype = BUILD_TARGET_PRE_CB_NLW
                    isBuildTypeSwitched = True
                    print "LW -> NLW"

            if buildtargettype == BUILD_TARGET_PRE_CB_NLW:
                # 切换轻量级别视图 TBD
                curtime = datetime.datetime.now()
                print "lw_rom_modules start time:" + curtime.strftime(
                    "%H:%M:%S")
                mv_code_dir.main("hwrom", root_dir, code_bak_dir, lw_Xml_Path,
                                 hw_Xml_path)
                # 调用轻量级别编译
                target_lw = "lw_rom_modules"
                lw_params_dict = copy.deepcopy(params_dict)
                if not lw_params_dict.has_key(
                        'trans_targets'
                ) or lw_params_dict["trans_targets"] == "":
                    lw_params_dict['trans_targets'] = "log"
                buildscriptdic = build_utility.gen_build_scripts(
                    source_dir, version_name, branch_name, buildgroup,
                    buildtype, target_lw, lw_params_dict, True)
                build_result_str += build_utility.exec_group_build(
                    buildscriptdic)
                print 'lw_rom_modules build result:' + build_result_str
                curtime = datetime.datetime.now()
                print "lw_rom_modules end time:" + curtime.strftime("%H:%M:%S")

                if (not 'fail' in build_result_str):
                    # 切换重量级别视图
                    mv_code_dir.main("hwrom", code_bak_dir, root_dir,
                                     lw_Xml_Path, hw_Xml_path)
                    if IsnlwSwitchToLw(isBuildTypeSwitched, buildgroup,
                                       xmlbuildgroupinfo, params_dict) == True:
                        print "NLW -> LW"
                        target_lw = "pkg_lw_rom"
                        curtime = datetime.datetime.now()
                        print "pkg_lw_rom start time:" + curtime.strftime(
                            "%H:%M:%S")
                        buildscriptdic = build_utility.gen_build_scripts(
                            source_dir, version_name, branch_name, buildgroup,
                            buildtype, target_lw, params_dict, False)
                        build_result_str += build_utility.exec_group_build(
                            buildscriptdic)
                        curtime = datetime.datetime.now()
                        print "pkg_lw_rom end time:" + curtime.strftime(
                            "%H:%M:%S")
                    else:
                        mv_code_dir.main("lwrom", root_dir, code_bak_dir,
                                         lw_Xml_Path, hw_Xml_path)
                        # 调用重量级别编译   传输
                        target_nlw = "pre_cb_rom"
                        curtime = datetime.datetime.now()
                        print "pre_cb_rom start time:" + curtime.strftime(
                            "%H:%M:%S")
                        buildscriptdic = build_utility.gen_build_scripts(
                            source_dir, version_name, branch_name, buildgroup,
                            buildtype, target_nlw, params_dict, False)
                        build_result_str += build_utility.exec_group_build(
                            buildscriptdic)
                        print 'pre_cb_rom result' + build_result_str
                        curtime = datetime.datetime.now()
                        print "pre_cb_rom end time:" + curtime.strftime(
                            "%H:%M:%S")
                        # 切换重量级别视图
                        mv_code_dir.main("lwrom", code_bak_dir, root_dir,
                                         lw_Xml_Path, hw_Xml_path)
                else:
                    mv_code_dir.main("hwrom", code_bak_dir, root_dir,
                                     lw_Xml_Path, hw_Xml_path)
                os.system(rm_bak_code_dir_cmd)

            if buildtargettype == BUILD_TARGET_VB_ALL:
                buildscriptdic = build_utility.gen_build_scripts(
                    source_dir, version_name, branch_name, buildgroup,
                    buildtype, target, params_dict)
                build_result_str += build_utility.exec_group_build(
                    buildscriptdic)
            # print 'vb result:' + build_result_str
            # if (not 'fail' in build_result_str) :
            #     vbBankDir = '/home/jenkins_ci/vb_image'
            #     if os.path.isdir(vbBankDir) :
            #         curtime = datetime.datetime.now()
            #         print "rsync to vb_img start time:" +  curtime.strftime("%H:%M:%S")
            #         nlw_image_save_result = nlw_image_save.storeImage('version_build/BalongV9R1SFT_nlw_manifest.xml', vbBankDir + '/' + buildgroup, xmlbuildgroupinfo, "delivery")
            #         curtime = datetime.datetime.now()
            #         print "rsync to vb_img end time:" +  curtime.strftime("%H:%M:%S")
            #         if nlw_image_save_result:
            #             print "nlw_image_save excute failed!\n"
            #         else:
            #             print "nlw_image_save excute success!\n"
            #     else :
            #         print "vb bank is not exist, ignore nlw_image_save!\n"
        else:
            curtime = datetime.datetime.now()
            print "HIbuild start time:" + curtime.strftime("%H:%M:%S")
            buildscriptdic = build_utility.gen_build_scripts(
                source_dir, version_name, branch_name, buildgroup, buildtype,
                target, params_dict)
            build_result_str += build_utility.exec_group_build(buildscriptdic)
            curtime = datetime.datetime.now()
            print "HIbuild end time:" + curtime.strftime("%H:%M:%S")
    # 返回编译结果
    print "VERSION_BUILD_RESULT:" + build_result_str
    return 0
def main():
    curtime = datetime.datetime.now()
    print "version_compile start time:" +  curtime.strftime("%H:%M:%S")
    argv_list = sys.argv[1:]
    if len(argv_list) == 0 :
            print "fail,parameters_is_empty"
            return 1
        
    params_dict = {}
    for p in argv_list:
        if string.find(p, ':') != -1 :
            subs = string.split(p,':')
            params_dict[subs[0]]=subs[1]
        else:
            params_dict[p]=""
            
    if not params_dict.has_key('version') or \
       not params_dict.has_key('branch') or \
       not params_dict.has_key('changeid') or \
       not params_dict.has_key('timestamp')    or \
       not params_dict.has_key('tag') or \
       not params_dict.has_key('buildgroup') or \
       not params_dict.has_key('owners'):
            print "fail,params has not enough key"
            return 1
                   
    branch_name = params_dict['branch']
    timestamp = params_dict['timestamp']
    version_name = params_dict['version']
    buildgroup = params_dict['buildgroup']
    changeid = params_dict['changeid']
        
    buildtype ='all'
    if params_dict.has_key('buildtype'):
        buildtype = params_dict['buildtype']

    target =''
    if params_dict.has_key('target'):
        target = params_dict['target']

    if not params_dict.has_key('transfer'):
        params_dict['transfer'] = 'true'   
   

    source_dir = os.path.abspath('../..')

    complie_entry_dir = source_dir+'/build'
    os.chdir(complie_entry_dir)
    
    build_rule_file = source_dir + "/build/version_build/build_rule.xml"
    producttype = build_utility.get_group_product_type(build_rule_file,version_name,buildgroup) 
    print "producttype:" +  producttype
    root_dir = source_dir + "/../../"
    code_bak_dir = root_dir + "/../code_back"
    lw_Xml_Path = source_dir + "/build/version_build/BalongV9R1SFT_lw_manifest.xml"
    hw_Xml_path = source_dir + "/build/version_build/BalongV9R1SFT_nlw_manifest.xml"

    rm_bak_code_dir_cmd = "rm -rf " + code_bak_dir
    #清除上次的编译记录
    build_utility.CleanOldBuildFile(source_dir)
    
    build_result_str =''
    isBuildTypeSwitched = False

    # release 构建时,使用产品线发布方式构建
    # be_release_build = build_utility.is_group_release_build(build_rule_file,version_name,buildgroup)

    # if 'true' == be_release_build:
        # 编译发布的二进制文件
        #1)build balong-libs 2)构造产品线编译的环境 3)rm confidential 4)restor balong libs
        # if producttype == "mbb" or \
            # producttype == "phone" :        
            # relbuildscriptdic = build_utility.gen_build_scripts(source_dir,version_name,branch_name,buildgroup,buildtype,"balong-libs")
            # build_result_str +=build_utility.exec_group_build(relbuildscriptdic)
            # rm_confidential_code(source_dir)
            # restore_balong_libs(source_dir)
            
        # 编译camera后,删除camera代码
        # if producttype == "phone" :
            # relbuildscriptdic = build_utility.gen_build_scripts(source_dir,version_name,branch_name,buildgroup,buildtype,"camera",params_dict)
            # build_result_str +=build_utility.exec_group_build(relbuildscriptdic)            
            # rm_camera_code(source_dir)
            
    
    # 按产品线发布方式编译,传出版本,做内部验证
    if producttype == "tool":
        buildscriptdic = build_utility.gen_build_scripts(source_dir,version_name,branch_name,buildgroup,buildtype,target,params_dict)
        build_result_str += build_utility.exec_sequ_build(buildscriptdic)
    elif producttype == "ut" :
        buildscriptdic = build_utility.gen_build_scripts(source_dir,version_name,branch_name,buildgroup,buildtype,target,params_dict, False)
        build_result_str += build_utility.exec_group_build(buildscriptdic)        
    elif producttype == "inc_chk" :
        buildscriptdic = build_utility.gen_build_scripts(source_dir,version_name,branch_name,buildgroup,buildtype,target,params_dict, False)
        build_result_str += build_utility.exec_group_build(buildscriptdic)        
    elif producttype != "phone" :
        buildscriptdic = build_utility.gen_build_scripts(source_dir,version_name,branch_name,buildgroup,buildtype,target,params_dict)
        build_result_str += build_utility.exec_group_build(buildscriptdic)
    else:
        xmlbuildgroupinfo = buildgroup + "\n"
        xmlbuildgroupdic = build_utility.get_rules_of_version(build_rule_file, version_name)
        if xmlbuildgroupdic.has_key(buildgroup):
            xmlbuildgroupinfo += str(xmlbuildgroupdic[buildgroup])
        buildtargettype = judge_build_target_type(params_dict,changeid,branch_name)
        print 'buildtargettype:' + buildtargettype

        # Temp : add by zhangteng
        #params_dict['system_update'] = get_upated_system(changeid,branch_name)
        # End

        os.system(rm_bak_code_dir_cmd)

        if (target == '' or target == 'balong') :
            if buildtargettype == BUILD_TARGET_PRE_CB_LW:
                curtime = datetime.datetime.now()
                print "search vb_img path start time:" +  curtime.strftime("%H:%M:%S") 
                nlw_image_path = nlw_image_save.retractPath('version_build/BalongV9R1SFT_nlw_manifest.xml', '/home/jenkins_ci/vb_image/' + buildgroup, xmlbuildgroupinfo) 
                curtime = datetime.datetime.now()
                print "search vb_img path end time:" +  curtime.strftime("%H:%M:%S") 
                if ("" != nlw_image_path) :
                    target = "lw_rom"
                    params_dict["nlw_image_path"] = nlw_image_path
                    mv_code_dir.main("hwrom", root_dir, code_bak_dir, lw_Xml_Path, hw_Xml_path)                    
                    buildscriptdic = build_utility.gen_build_scripts(source_dir,version_name,branch_name,buildgroup,buildtype,target,params_dict)                 
                    build_result_str += build_utility.exec_group_build(buildscriptdic)
                    print 'lw_rom build result:' + build_result_str
                    mv_code_dir.main("hwrom", code_bak_dir, root_dir, lw_Xml_Path, hw_Xml_path)                    
                    os.system(rm_bak_code_dir_cmd)
                else :
                    buildtargettype = BUILD_TARGET_PRE_CB_NLW
                    isBuildTypeSwitched = True
                    print "LW -> NLW"

            if buildtargettype == BUILD_TARGET_PRE_CB_NLW:
                # 切换轻量级别视图 TBD                
                curtime = datetime.datetime.now()
                print "lw_rom_modules start time:" +  curtime.strftime("%H:%M:%S")
                mv_code_dir.main("hwrom", root_dir, code_bak_dir, lw_Xml_Path, hw_Xml_path)
                # 调用轻量级别编译 
                target_lw = "lw_rom_modules"
                lw_params_dict = copy.deepcopy(params_dict)
                if not lw_params_dict.has_key('trans_targets') or lw_params_dict["trans_targets"] == "":
                    lw_params_dict['trans_targets'] = "log"
                buildscriptdic = build_utility.gen_build_scripts(source_dir,version_name,branch_name,buildgroup,buildtype,target_lw,lw_params_dict, True)                
                build_result_str += build_utility.exec_group_build(buildscriptdic)                               
                print 'lw_rom_modules build result:' + build_result_str
                curtime = datetime.datetime.now()
                print "lw_rom_modules end time:" +  curtime.strftime("%H:%M:%S")

                if (not 'fail' in build_result_str) :
                    # 切换重量级别视图 
                    mv_code_dir.main("hwrom", code_bak_dir, root_dir, lw_Xml_Path, hw_Xml_path)
                    if IsnlwSwitchToLw(isBuildTypeSwitched, buildgroup, xmlbuildgroupinfo, params_dict) == True:
                        print "NLW -> LW"
                        target_lw = "pkg_lw_rom"
                        curtime = datetime.datetime.now()
                        print "pkg_lw_rom start time:" +  curtime.strftime("%H:%M:%S")
                        buildscriptdic = build_utility.gen_build_scripts(source_dir,version_name,branch_name,buildgroup,buildtype,target_lw,params_dict, False)                
                        build_result_str += build_utility.exec_group_build(buildscriptdic)                               
                        curtime = datetime.datetime.now()
                        print "pkg_lw_rom end time:" +  curtime.strftime("%H:%M:%S")
                    else:
                        mv_code_dir.main("lwrom", root_dir, code_bak_dir, lw_Xml_Path, hw_Xml_path)
                    # 调用重量级别编译   传输
                        target_nlw = "pre_cb_rom"
                        curtime = datetime.datetime.now()
                        print "pre_cb_rom start time:" +  curtime.strftime("%H:%M:%S")
                        buildscriptdic = build_utility.gen_build_scripts(source_dir,version_name,branch_name,buildgroup,buildtype,target_nlw,params_dict, False)                                    
                        build_result_str += build_utility.exec_group_build(buildscriptdic)                                                      
                        print 'pre_cb_rom result' + build_result_str
                        curtime = datetime.datetime.now()
                        print "pre_cb_rom end time:" +  curtime.strftime("%H:%M:%S")
                     # 切换重量级别视图 
                        mv_code_dir.main("lwrom", code_bak_dir, root_dir, lw_Xml_Path, hw_Xml_path)
                else :
                    mv_code_dir.main("hwrom", code_bak_dir, root_dir, lw_Xml_Path, hw_Xml_path)
                os.system(rm_bak_code_dir_cmd)

            if buildtargettype == BUILD_TARGET_VB_ALL:
                buildscriptdic = build_utility.gen_build_scripts(source_dir,version_name,branch_name,buildgroup,buildtype,target,params_dict)               
                build_result_str += build_utility.exec_group_build(buildscriptdic)                             
               # print 'vb result:' + build_result_str
               # if (not 'fail' in build_result_str) :
               #     vbBankDir = '/home/jenkins_ci/vb_image'
               #     if os.path.isdir(vbBankDir) :
               #         curtime = datetime.datetime.now()
               #         print "rsync to vb_img start time:" +  curtime.strftime("%H:%M:%S") 
               #         nlw_image_save_result = nlw_image_save.storeImage('version_build/BalongV9R1SFT_nlw_manifest.xml', vbBankDir + '/' + buildgroup, xmlbuildgroupinfo, "delivery") 
               #         curtime = datetime.datetime.now()
               #         print "rsync to vb_img end time:" +  curtime.strftime("%H:%M:%S") 
               #         if nlw_image_save_result:
               #             print "nlw_image_save excute failed!\n"
               #         else:
               #             print "nlw_image_save excute success!\n"
               #     else :
               #         print "vb bank is not exist, ignore nlw_image_save!\n"
        else :
            curtime = datetime.datetime.now()
            print "HIbuild start time:" +  curtime.strftime("%H:%M:%S")
            buildscriptdic = build_utility.gen_build_scripts(source_dir,version_name,branch_name,buildgroup,buildtype,target,params_dict)
            build_result_str += build_utility.exec_group_build(buildscriptdic)
            curtime = datetime.datetime.now()
            print "HIbuild end time:" +  curtime.strftime("%H:%M:%S")
    # 返回编译结果  
    print "VERSION_BUILD_RESULT:" + build_result_str
    return 0