16e7c69efSopenharmony_ci#  Copyright (c) 2023 Huawei Device Co., Ltd.
26e7c69efSopenharmony_ci#  Licensed under the Apache License, Version 2.0 (the "License");
36e7c69efSopenharmony_ci#  you may not use this file except in compliance with the License.
46e7c69efSopenharmony_ci#  You may obtain a copy of the License at
56e7c69efSopenharmony_ci
66e7c69efSopenharmony_ci#      http://www.apache.org/licenses/LICENSE-2.0
76e7c69efSopenharmony_ci
86e7c69efSopenharmony_ci#  Unless required by applicable law or agreed to in writing, software
96e7c69efSopenharmony_ci#  distributed under the License is distributed on an "AS IS" BASIS,
106e7c69efSopenharmony_ci#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
116e7c69efSopenharmony_ci#  See the License for the specific language governing permissions and
126e7c69efSopenharmony_ci#  limitations under the License.
136e7c69efSopenharmony_ci
146e7c69efSopenharmony_ci#!/bin/bash
156e7c69efSopenharmony_ci
166e7c69efSopenharmony_ciCUR_PATH=$(cd $(dirname ${BASH_SOURCE[0]}) && pwd)
176e7c69efSopenharmony_ciBASE_PATH=$(dirname ${CUR_PATH})
186e7c69efSopenharmony_ci
196e7c69efSopenharmony_ci#时间统计
206e7c69efSopenharmony_cistartTime=`date +%Y%m%d-%H:%M:%S`
216e7c69efSopenharmony_cistartTime_s=`date +%s`
226e7c69efSopenharmony_ci
236e7c69efSopenharmony_ci#npm
246e7c69efSopenharmony_cinpm config set @ohos:registry=https://repo.harmonyos.com/npm/
256e7c69efSopenharmony_ci
266e7c69efSopenharmony_ci#ohpm
276e7c69efSopenharmony_ci#ohpm config set @ohos:registry=https://repo.harmonyos.com/ohpm/
286e7c69efSopenharmony_ci
296e7c69efSopenharmony_ciTEST_HAP_PATH=entry/build/default/outputs/ohosTest/entry-ohosTest-unsigned.hap
306e7c69efSopenharmony_ciHAP_PATH=entry/build/default/outputs/default/entry-default-unsigned.hap
316e7c69efSopenharmony_ciSTAGE_TEST_HAP_PATH=product/build/default/outputs/ohosTest/product-ohosTest-unsigned.hap
326e7c69efSopenharmony_ciSTAGE_HAP_PATH=product/build/default/outputs/default/product-default-unsigned.hap
336e7c69efSopenharmony_ciTIME=16
346e7c69efSopenharmony_ciRESOLVE=0
356e7c69efSopenharmony_ci
366e7c69efSopenharmony_ciarg_sign="true"
376e7c69efSopenharmony_ciarg_sdk_path=${BASE_PATH}/sdk
386e7c69efSopenharmony_ciarg_full_sdk_path=${BASE_PATH}/sdk-full
396e7c69efSopenharmony_ciarg_help="0"
406e7c69efSopenharmony_ciarg_compile_dir=""
416e7c69efSopenharmony_ciarg_jdk=""
426e7c69efSopenharmony_ciarg_node=""
436e7c69efSopenharmony_ciarg_ohpm="false"
446e7c69efSopenharmony_ciarg_p=""
456e7c69efSopenharmony_ci
466e7c69efSopenharmony_ciurl=""
476e7c69efSopenharmony_citag_url='url='
486e7c69efSopenharmony_ciname=""
496e7c69efSopenharmony_citag_name='name='
506e7c69efSopenharmony_cibranch=""
516e7c69efSopenharmony_citag_branch='branch='
526e7c69efSopenharmony_cifull_list=()
536e7c69efSopenharmony_citag_full_list='fullSdkAssembleList='
546e7c69efSopenharmony_cibasic_list=()
556e7c69efSopenharmony_citag_basic_list='basicSignList='
566e7c69efSopenharmony_cicore_list=()
576e7c69efSopenharmony_citag_core_list='coreSignList='
586e7c69efSopenharmony_cisystem_app_list=()
596e7c69efSopenharmony_citag_system_app_list='systemAppList='
606e7c69efSopenharmony_cinormal_list=()
616e7c69efSopenharmony_cipublic_list=()
626e7c69efSopenharmony_ci#没测试用例
636e7c69efSopenharmony_cisimple_list=() 
646e7c69efSopenharmony_ci
656e7c69efSopenharmony_cifunction print_help() {
666e7c69efSopenharmony_ci  cat <<EOF
676e7c69efSopenharmony_ci  use assembleHap [options] <mainclass> [args...]
686e7c69efSopenharmony_ci
696e7c69efSopenharmony_ci    --p=config path
706e7c69efSopenharmony_ci    --sign=true/false - Whether the signature (default:$arg_sign)
716e7c69efSopenharmony_ci    --sdk_path=[public sdk absolute address] (default:$arg_sdk_path)
726e7c69efSopenharmony_ci    --full_sdk_path=[full sdk absolute address] (default:$arg_full_sdk_path)
736e7c69efSopenharmony_ci    --ohpm=true/false -whether use ohpm (default:$arg_ohpm)  
746e7c69efSopenharmony_ci    --help  - prints help screen
756e7c69efSopenharmony_ci
766e7c69efSopenharmony_ciEOF
776e7c69efSopenharmony_ci}
786e7c69efSopenharmony_ci
796e7c69efSopenharmony_cifunction parse_arguments() {
806e7c69efSopenharmony_ci        local helperKey="";
816e7c69efSopenharmony_ci        local helperValue="";
826e7c69efSopenharmony_ci        local current="";
836e7c69efSopenharmony_ci
846e7c69efSopenharmony_ci        while [ "$1" != "" ]; do
856e7c69efSopenharmony_ci                current=$1;
866e7c69efSopenharmony_ci                helperKey=${current#*--};
876e7c69efSopenharmony_ci                helperKey=${helperKey%%=*};
886e7c69efSopenharmony_ci                helperKey=$(echo "$helperKey" | tr '-' '_');
896e7c69efSopenharmony_ci                helperValue=${current#*=};
906e7c69efSopenharmony_ci                if [ "$helperValue" == "$current" ]; then
916e7c69efSopenharmony_ci                        helperValue="1";
926e7c69efSopenharmony_ci                fi
936e7c69efSopenharmony_ci                # echo "eval arg_$helperKey=\"$helperValue\"";
946e7c69efSopenharmony_ci
956e7c69efSopenharmony_ci                eval "arg_$helperKey=\"$helperValue\"";
966e7c69efSopenharmony_ci                shift
976e7c69efSopenharmony_ci        done
986e7c69efSopenharmony_ci}
996e7c69efSopenharmony_ci
1006e7c69efSopenharmony_ciparse_arguments ${@};
1016e7c69efSopenharmony_ci
1026e7c69efSopenharmony_ciif [ "$arg_help" != "0" ]; then
1036e7c69efSopenharmony_ci        print_help;
1046e7c69efSopenharmony_ci        exit 1;
1056e7c69efSopenharmony_cifi
1066e7c69efSopenharmony_ci
1076e7c69efSopenharmony_ciif [ "$arg_p" == "" ]; then
1086e7c69efSopenharmony_ci        echo "--p cannot be empty"
1096e7c69efSopenharmony_ci        exit 1
1106e7c69efSopenharmony_cifi
1116e7c69efSopenharmony_ci
1126e7c69efSopenharmony_ciif [ "$arg_jdk" != "" ]; then
1136e7c69efSopenharmony_ci        export JAVA_HOME=${arg_jdk}
1146e7c69efSopenharmony_ci        export PATH=$JAVA_HOME/bin:$PATH
1156e7c69efSopenharmony_cifi
1166e7c69efSopenharmony_ci
1176e7c69efSopenharmony_ciif [ "$arg_node" != "" ]; then
1186e7c69efSopenharmony_ci        export NODE_HOME=${arg_node}
1196e7c69efSopenharmony_ci        export PATH=$NODE_HOME:$PATH
1206e7c69efSopenharmony_cifi
1216e7c69efSopenharmony_ci
1226e7c69efSopenharmony_cifunction clear_dir(){
1236e7c69efSopenharmony_ci        if [ ! -d "$1" ]; then
1246e7c69efSopenharmony_ci                mkdir -p $1
1256e7c69efSopenharmony_ci        else
1266e7c69efSopenharmony_ci                rm -rf $1/*
1276e7c69efSopenharmony_ci        fi
1286e7c69efSopenharmony_ci}
1296e7c69efSopenharmony_cifunction clear_file(){
1306e7c69efSopenharmony_ci        if [ -f "$1" ]; then
1316e7c69efSopenharmony_ci                rm $1
1326e7c69efSopenharmony_ci        fi
1336e7c69efSopenharmony_ci        touch $1
1346e7c69efSopenharmony_ci}
1356e7c69efSopenharmony_ci
1366e7c69efSopenharmony_cifunction del_dir(){
1376e7c69efSopenharmony_ci        if [ -d "$1" ]; then
1386e7c69efSopenharmony_ci                rm -rf $1/*
1396e7c69efSopenharmony_ci        fi
1406e7c69efSopenharmony_ci}
1416e7c69efSopenharmony_cifunction del_file(){
1426e7c69efSopenharmony_ci        if [ -f "$1" ]; then
1436e7c69efSopenharmony_ci                rm $1
1446e7c69efSopenharmony_ci        fi
1456e7c69efSopenharmony_ci}
1466e7c69efSopenharmony_ci
1476e7c69efSopenharmony_cifunction is_project_root(){
1486e7c69efSopenharmony_ci        if [[ -f $1"/build-profile.json5" && -f $1"/hvigorfile.js" ]] || [[ -f $1"/build-profile.json5" && -f $1"/hvigorfile.ts" ]]; then
1496e7c69efSopenharmony_ci                while read line
1506e7c69efSopenharmony_ci                do
1516e7c69efSopenharmony_ci                        if [[ ${line} =~ "srcPath" ]]; then
1526e7c69efSopenharmony_ci                                pa=${line%\"*}
1536e7c69efSopenharmony_ci                                pa=${pa##*\".}
1546e7c69efSopenharmony_ci                                if [ -d "$1/AppScope" ]; then
1556e7c69efSopenharmony_ci                                        is_entry=`cat $1${pa}/src/main/module.json5 | sed 's/ //g' | grep "\"type\":\"entry\""`
1566e7c69efSopenharmony_ci                                        is_feature=`cat $1${pa}/src/main/module.json5 | sed 's/ //g' | grep "\"type\":\"feature\""`
1576e7c69efSopenharmony_ci                                        if [[ "${is_entry}" != "" || "${is_feature}" != "" ]]; then
1586e7c69efSopenharmony_ci                                                if [[ -d $1${pa}"/src/ohosTest" ]]; then
1596e7c69efSopenharmony_ci                                                        return 0
1606e7c69efSopenharmony_ci                                                fi
1616e7c69efSopenharmony_ci                                        fi
1626e7c69efSopenharmony_ci                                else
1636e7c69efSopenharmony_ci                                        is_entry=`cat $1${pa}/src/main/config.json | sed 's/ //g' | grep "\"moduleType\":\"entry\""`
1646e7c69efSopenharmony_ci                                        is_feature=`cat $1${pa}/src/main/config.json | sed 's/ //g' | grep "\"moduleType\":\"feature\""`
1656e7c69efSopenharmony_ci                                        if [[ "${is_entry}" != "" || "${is_feature}" != "" ]]; then
1666e7c69efSopenharmony_ci                                                if [[ -d $1${pa}"/src/ohosTest" ]]; then
1676e7c69efSopenharmony_ci                                                        return 0
1686e7c69efSopenharmony_ci                                                fi
1696e7c69efSopenharmony_ci                                        fi
1706e7c69efSopenharmony_ci                                fi
1716e7c69efSopenharmony_ci                        fi
1726e7c69efSopenharmony_ci                done < $1"/build-profile.json5"
1736e7c69efSopenharmony_ci                return 1
1746e7c69efSopenharmony_ci        else
1756e7c69efSopenharmony_ci                return 2
1766e7c69efSopenharmony_ci        fi
1776e7c69efSopenharmony_ci}
1786e7c69efSopenharmony_ci
1796e7c69efSopenharmony_cifunction read_project(){
1806e7c69efSopenharmony_ci        if [ -d "$1" ]
1816e7c69efSopenharmony_ci        then
1826e7c69efSopenharmony_ci                # 是项目工程根目录则记录当前路径 否则递归判断
1836e7c69efSopenharmony_ci                is_project_root $1
1846e7c69efSopenharmony_ci		res=$?
1856e7c69efSopenharmony_ci                if [ ${res} -eq 0 ]; then
1866e7c69efSopenharmony_ci			public_list[${#public_list[*]}]=${1#*compile-tool/projects/${name}/}
1876e7c69efSopenharmony_ci                elif [ ${res} -eq 1 ]; then
1886e7c69efSopenharmony_ci                        simple_list[${#simple_list[*]}]=${1#*compile-tool/projects/${name}/}
1896e7c69efSopenharmony_ci		elif [ ${res} -eq 2 ]; then
1906e7c69efSopenharmony_ci                        for file in `ls $1`
1916e7c69efSopenharmony_ci                        do
1926e7c69efSopenharmony_ci                                read_project "${1}/${file}"
1936e7c69efSopenharmony_ci                        done
1946e7c69efSopenharmony_ci                fi
1956e7c69efSopenharmony_ci        fi
1966e7c69efSopenharmony_ci}
1976e7c69efSopenharmony_ci
1986e7c69efSopenharmony_cifunction exclude_full_project(){
1996e7c69efSopenharmony_ci	if [ ${#full_list[*]} -eq 0 ]; then
2006e7c69efSopenharmony_ci		return
2016e7c69efSopenharmony_ci	fi
2026e7c69efSopenharmony_ci	diff_list=()
2036e7c69efSopenharmony_ci	full_true_list=()
2046e7c69efSopenharmony_ci	f=0
2056e7c69efSopenharmony_ci	t=0
2066e7c69efSopenharmony_ci	flag=0
2076e7c69efSopenharmony_ci	for item1 in "${public_list[@]}"; do
2086e7c69efSopenharmony_ci		for item2 in "${full_list[@]}"; do
2096e7c69efSopenharmony_ci			if [[ "${item1}" == "${item2}" ]]; then
2106e7c69efSopenharmony_ci				full_true_list[f]=${item2}
2116e7c69efSopenharmony_ci				f=$((f+1))
2126e7c69efSopenharmony_ci				flag=1
2136e7c69efSopenharmony_ci				break
2146e7c69efSopenharmony_ci			fi
2156e7c69efSopenharmony_ci		done
2166e7c69efSopenharmony_ci		if [ ${flag} -eq 0 ]; then
2176e7c69efSopenharmony_ci			diff_list[t]=${item1}
2186e7c69efSopenharmony_ci			t=$((t+1))
2196e7c69efSopenharmony_ci		else
2206e7c69efSopenharmony_ci			flag=0
2216e7c69efSopenharmony_ci		fi
2226e7c69efSopenharmony_ci	done
2236e7c69efSopenharmony_ci	public_list=(${diff_list[@]})
2246e7c69efSopenharmony_ci	full_list=(${full_true_list[@]})
2256e7c69efSopenharmony_ci	echo "use public sdk project numbers =  "${#public_list[@]}
2266e7c69efSopenharmony_ci	echo "use full sdk project numbers =  "${#full_list[@]}
2276e7c69efSopenharmony_ci}
2286e7c69efSopenharmony_ci
2296e7c69efSopenharmony_cifunction del_module_name(){
2306e7c69efSopenharmony_ci        local name=${1}
2316e7c69efSopenharmony_ci        for i in "${!module_name[@]}"
2326e7c69efSopenharmony_ci        do
2336e7c69efSopenharmony_ci                if [[ "${module_name[i]}" == "${name}" ]]; then
2346e7c69efSopenharmony_ci                        unset module_name[i]
2356e7c69efSopenharmony_ci                        echo "移除"${name}" , 剩余 : "${module_name[@]} >> ${compile_result_error}/${hap}".log" 2>&1
2366e7c69efSopenharmony_ci                        return 0
2376e7c69efSopenharmony_ci                fi
2386e7c69efSopenharmony_ci        done
2396e7c69efSopenharmony_ci        return 1
2406e7c69efSopenharmony_ci}
2416e7c69efSopenharmony_ci
2426e7c69efSopenharmony_cifunction load_dep(){
2436e7c69efSopenharmony_ci        local cur_m_n=${1}
2446e7c69efSopenharmony_ci	local cur_module
2456e7c69efSopenharmony_ci        for cur_module in ${module_list[@]}
2466e7c69efSopenharmony_ci        do
2476e7c69efSopenharmony_ci                if [[ "${cur_module}" =~ "${cur_m_n}" ]]; then
2486e7c69efSopenharmony_ci                        del_module_name ${cur_m_n}
2496e7c69efSopenharmony_ci                        for m_n_1 in ${module_name[@]}
2506e7c69efSopenharmony_ci                        do
2516e7c69efSopenharmony_ci                                rr=$(cat ${cur_module}"/package.json" | grep "${m_n_1}")
2526e7c69efSopenharmony_ci                                if [[ "${rr}" != "" ]]; then
2536e7c69efSopenharmony_ci                                        load_dep ${m_n_1}
2546e7c69efSopenharmony_ci                                fi
2556e7c69efSopenharmony_ci                        done
2566e7c69efSopenharmony_ci                        cd ${cur_module}
2576e7c69efSopenharmony_ci                        echo ${cur_module}" 执行npm install" >> ${compile_result_error}/${hap}".log" 2>&1
2586e7c69efSopenharmony_ci                        npm i >> ${compile_result_error}/${hap}".log" 2>&1
2596e7c69efSopenharmony_ci                fi
2606e7c69efSopenharmony_ci        done
2616e7c69efSopenharmony_ci}
2626e7c69efSopenharmony_ci
2636e7c69efSopenharmony_cifunction load_oh_dep(){
2646e7c69efSopenharmony_ci        local cur_m_n=${1}
2656e7c69efSopenharmony_ci	local cur_module
2666e7c69efSopenharmony_ci        for cur_module in ${module_list[@]}
2676e7c69efSopenharmony_ci        do
2686e7c69efSopenharmony_ci                if [[ "${cur_module}" =~ "${cur_m_n}" ]]; then
2696e7c69efSopenharmony_ci                        del_module_name ${cur_m_n}
2706e7c69efSopenharmony_ci                        for m_n_1 in ${module_name[@]}
2716e7c69efSopenharmony_ci                        do
2726e7c69efSopenharmony_ci                                rr=$(cat ${cur_module}"/oh-package.json5" | grep "${m_n_1}")
2736e7c69efSopenharmony_ci                                if [[ "${rr}" != "" ]]; then
2746e7c69efSopenharmony_ci                                        load_oh_dep ${m_n_1}
2756e7c69efSopenharmony_ci                                fi
2766e7c69efSopenharmony_ci                        done
2776e7c69efSopenharmony_ci                        cd ${cur_module}
2786e7c69efSopenharmony_ci                        echo ${cur_module}" 执行ohpm install" >> ${compile_result_error}/${hap}".log" 2>&1
2796e7c69efSopenharmony_ci                        if [[ -e "oh-package.json5" ]]; then
2806e7c69efSopenharmony_ci                                ohpm i >> ${compile_result_error}/${hap}".log" 2>&1
2816e7c69efSopenharmony_ci                        else   
2826e7c69efSopenharmony_ci                                ohpm init >> ${compile_result_error}/${hap}".log" 2>&1
2836e7c69efSopenharmony_ci                                ohpm install >> ${compile_result_error}/${hap}".log" 2>&1
2846e7c69efSopenharmony_ci                        fi      
2856e7c69efSopenharmony_ci                fi
2866e7c69efSopenharmony_ci        done
2876e7c69efSopenharmony_ci}
2886e7c69efSopenharmony_ci
2896e7c69efSopenharmony_ci
2906e7c69efSopenharmony_cifunction compile(){
2916e7c69efSopenharmony_ci        # echo "compile $1"
2926e7c69efSopenharmony_ci        hap=${1////_}
2936e7c69efSopenharmony_ci        project_path=${BASE_PATH}/projects/${name}/${1}
2946e7c69efSopenharmony_ci	compile_result=${2}
2956e7c69efSopenharmony_ci	compile_result_error=${3}
2966e7c69efSopenharmony_ci	nosign_hap_result=${4}
2976e7c69efSopenharmony_ci        compile_result_success=${5}
2986e7c69efSopenharmony_ci        if [ ! -d "${project_path}" ]; then
2996e7c69efSopenharmony_ci                echo "${project_path} 路径不存在"
3006e7c69efSopenharmony_ci                return
3016e7c69efSopenharmony_ci        fi
3026e7c69efSopenharmony_ci        
3036e7c69efSopenharmony_ci        if [ -e "${project_path}/local.properties" ]; then
3046e7c69efSopenharmony_ci                rm ${project_path}"/local.properties"
3056e7c69efSopenharmony_ci        fi
3066e7c69efSopenharmony_ci        
3076e7c69efSopenharmony_ci        # echo "sdk.dir="${arg_full_sdk_path} >> ${project_path}"/local.properties" 2>&1
3086e7c69efSopenharmony_ci        cd ${project_path}
3096e7c69efSopenharmony_ci        if [[ -e "${project_path}/package.json" ]]; then
3106e7c69efSopenharmony_ci                sed -i 's/\"@ohos\/hypium\".*\.[0-9]*\"/\"@ohos\/hypium\": \"1.0.3\"/g' ./package.json
3116e7c69efSopenharmony_ci                sed -i 's/\"@ohos\/hvigor-ohos-plugin\".*\.[0-9]*\"/\"@ohos\/hvigor-ohos-plugin\": \"1.3.1\"/g' ./package.json
3126e7c69efSopenharmony_ci                sed -i 's/\"@ohos\/hvigor\".*\.[0-9]*\"/\"@ohos\/hvigor\": \"1.3.1\"/g' ./package.json
3136e7c69efSopenharmony_ci        fi
3146e7c69efSopenharmony_ci	module_list=()
3156e7c69efSopenharmony_ci        module_name=()
3166e7c69efSopenharmony_ci        out_module=()
3176e7c69efSopenharmony_ci	bundle_name=""
3186e7c69efSopenharmony_ci        while read line
3196e7c69efSopenharmony_ci        do
3206e7c69efSopenharmony_ci                if [[ ${line} =~ "srcPath" ]]; then
3216e7c69efSopenharmony_ci                        pa=${line%\"*}
3226e7c69efSopenharmony_ci                        pa=${pa##*\".}
3236e7c69efSopenharmony_ci                        module_list[${#module_list[*]}]=${project_path}${pa}
3246e7c69efSopenharmony_ci			del_dir ${project_path}${pa}/node_modules
3256e7c69efSopenharmony_ci                        del_file ${project_path}${pa}/package-lock.json
3266e7c69efSopenharmony_ci                        del_dir ${project_path}${pa}/oh_modules
3276e7c69efSopenharmony_ci                        del_file ${project_path}${pa}/oh-package-lock.json5
3286e7c69efSopenharmony_ci                        module_name[${#module_name[*]}]=${pa}
3296e7c69efSopenharmony_ci                        if [ -d "${project_path}/AppScope" ]; then
3306e7c69efSopenharmony_ci				cur_bundle_line=`cat ${project_path}/AppScope/app.json5 | grep "\"bundleName\""`
3316e7c69efSopenharmony_ci                                bundle_name=${cur_bundle_line%\"*}
3326e7c69efSopenharmony_ci                                bundle_name=${bundle_name##*\"}
3336e7c69efSopenharmony_ci                                # echo "bundleName : "${bundle_name}
3346e7c69efSopenharmony_ci                                is_entry=`cat ${project_path}${pa}/src/main/module.json5 | sed 's/ //g' | grep "\"type\":\"entry\""`
3356e7c69efSopenharmony_ci                                is_feature=`cat ${project_path}${pa}/src/main/module.json5 | sed 's/ //g' | grep "\"type\":\"feature\""`
3366e7c69efSopenharmony_ci                                if [[ "${is_entry}" != "" || "${is_feature}" != "" ]]; then
3376e7c69efSopenharmony_ci                                        echo "hap输出module: "${project_path}${pa} >> ${compile_result_error}/${hap}".log" 2>&1
3386e7c69efSopenharmony_ci                                        out_module[${#out_module[*]}]=${project_path}${pa}
3396e7c69efSopenharmony_ci                                fi
3406e7c69efSopenharmony_ci                        else
3416e7c69efSopenharmony_ci				cur_bundle_line=`cat ${project_path}${pa}/src/main/config.json | grep "\"bundleName\""`
3426e7c69efSopenharmony_ci                                bundle_name=${cur_bundle_line%\"*}
3436e7c69efSopenharmony_ci                                bundle_name=${bundle_name##*\"}
3446e7c69efSopenharmony_ci                                # echo "bundleName : "${bundle_name}
3456e7c69efSopenharmony_ci                                is_entry=`cat ${project_path}${pa}/src/main/config.json | sed 's/ //g' | grep "\"moduleType\":\"entry\""`
3466e7c69efSopenharmony_ci                                is_feature=`cat ${project_path}${pa}/src/main/config.json | sed 's/ //g' | grep "\"moduleType\":\"feature\""`
3476e7c69efSopenharmony_ci                                if [[ "${is_entry}" != "" || "${is_feature}" != "" ]]; then
3486e7c69efSopenharmony_ci                                        echo "hap输出module: "${project_path}${pa} >> ${compile_result_error}/${hap}".log" 2>&1
3496e7c69efSopenharmony_ci                                        out_module[${#out_module[*]}]=${project_path}${pa}
3506e7c69efSopenharmony_ci                                fi
3516e7c69efSopenharmony_ci                        fi
3526e7c69efSopenharmony_ci                fi
3536e7c69efSopenharmony_ci        done < ${project_path}"/build-profile.json5"
3546e7c69efSopenharmony_ci
3556e7c69efSopenharmony_ci        if [[ -e "${project_path}/oh-package.json5" ]]; then #如果是ohpm包管理方式
3566e7c69efSopenharmony_ci                for module in ${module_list[@]}
3576e7c69efSopenharmony_ci                do
3586e7c69efSopenharmony_ci                        del_module_name ${module##${project_path}}
3596e7c69efSopenharmony_ci                        if [ $? -eq 0 ]; then
3606e7c69efSopenharmony_ci                                for m_n in ${module_name[@]}
3616e7c69efSopenharmony_ci                                do
3626e7c69efSopenharmony_ci                                        echo "查找 ${m_n} 是否是${module} 的依赖" >> ${compile_result_error}/${hap}".log" 2>&1
3636e7c69efSopenharmony_ci                                        rr=$(cat ${module}"/oh-package.json5" | grep "${m_n}")
3646e7c69efSopenharmony_ci                                        if [[ "${rr}" != "" ]]; then
3656e7c69efSopenharmony_ci                                                echo "处理循环依赖 : "${m_n} >> ${compile_result_error}/${hap}".log" 2>&1
3666e7c69efSopenharmony_ci                                                load_oh_dep ${m_n}
3676e7c69efSopenharmony_ci                                        fi
3686e7c69efSopenharmony_ci                                        
3696e7c69efSopenharmony_ci                                done
3706e7c69efSopenharmony_ci                                cd ${module}
3716e7c69efSopenharmony_ci                                echo ${module}" 执行ohpm install" >> ${compile_result_error}/${hap}".log" 2>&1
3726e7c69efSopenharmony_ci
3736e7c69efSopenharmony_ci                                if [[ -e "oh-package.json5" ]]; then
3746e7c69efSopenharmony_ci                                        ohpm i >> ${compile_result_error}/${hap}".log" 2>&1
3756e7c69efSopenharmony_ci                                else   
3766e7c69efSopenharmony_ci                                        ohpm init >> ${compile_result_error}/${hap}".log" 2>&1
3776e7c69efSopenharmony_ci                                        ohpm install >> ${compile_result_error}/${hap}".log" 2>&1
3786e7c69efSopenharmony_ci                                fi    
3796e7c69efSopenharmony_ci
3806e7c69efSopenharmony_ci                        fi
3816e7c69efSopenharmony_ci                done
3826e7c69efSopenharmony_ci        else 
3836e7c69efSopenharmony_ci                for module in ${module_list[@]}
3846e7c69efSopenharmony_ci                do
3856e7c69efSopenharmony_ci                        del_module_name ${module##${project_path}}
3866e7c69efSopenharmony_ci                        if [ $? -eq 0 ]; then
3876e7c69efSopenharmony_ci                                for m_n in ${module_name[@]}
3886e7c69efSopenharmony_ci                                do
3896e7c69efSopenharmony_ci                                        echo "查找 ${m_n} 是否是${module} 的依赖" >> ${compile_result_error}/${hap}".log" 2>&1
3906e7c69efSopenharmony_ci                                        rr=$(cat ${module}"/package.json" | grep "${m_n}")
3916e7c69efSopenharmony_ci                                        if [[ "${rr}" != "" ]]; then
3926e7c69efSopenharmony_ci                                                echo "处理循环依赖 : "${m_n} >> ${compile_result_error}/${hap}".log" 2>&1
3936e7c69efSopenharmony_ci                                                load_dep ${m_n}
3946e7c69efSopenharmony_ci                                        fi
3956e7c69efSopenharmony_ci                                        
3966e7c69efSopenharmony_ci                                done
3976e7c69efSopenharmony_ci                                cd ${module}
3986e7c69efSopenharmony_ci                                echo ${module}" 执行npm install" >> ${compile_result_error}/${hap}".log" 2>&1
3996e7c69efSopenharmony_ci                                npm i >> ${compile_result_error}/${hap}".log" 2>&1
4006e7c69efSopenharmony_ci                        fi
4016e7c69efSopenharmony_ci                done
4026e7c69efSopenharmony_ci                
4036e7c69efSopenharmony_ci        fi
4046e7c69efSopenharmony_ci
4056e7c69efSopenharmony_ci
4066e7c69efSopenharmony_ci	cd ${project_path}
4076e7c69efSopenharmony_ci	del_dir ${project_path}/node_modules
4086e7c69efSopenharmony_ci        del_dir ${project_path}/oh_modules
4096e7c69efSopenharmony_ci        del_file ${project_path}/package-lock.json
4106e7c69efSopenharmony_ci        del_file ${project_path}/oh-package-lock.json5
4116e7c69efSopenharmony_ci        echo ${project_path}" 执行npm install" >> ${compile_result_error}/${hap}".log" 2>&1
4126e7c69efSopenharmony_ci
4136e7c69efSopenharmony_ci        if [[ -e "${project_path}/oh-package.json5" ]]; then
4146e7c69efSopenharmony_ci                ohpm i >> ${compile_result_error}/${hap}".log" 2>&1
4156e7c69efSopenharmony_ci                chmod +x hvigorw 
4166e7c69efSopenharmony_ci                ./hvigorw clean --no-daemon >> ${compile_result_error}/${hap}".log" 2>&1
4176e7c69efSopenharmony_ci        else 
4186e7c69efSopenharmony_ci                npm install >> ${compile_result_error}/${hap}".log" 2>&1
4196e7c69efSopenharmony_ci                node ./node_modules/@ohos/hvigor/bin/hvigor.js clean --no-daemon >> ${compile_result_error}/${hap}".log" 2>&1
4206e7c69efSopenharmony_ci        fi
4216e7c69efSopenharmony_ci
4226e7c69efSopenharmony_ci
4236e7c69efSopenharmony_ci
4246e7c69efSopenharmony_ci        rm -rf ${project_path}/sign_tool
4256e7c69efSopenharmony_ci        cp -r ${BASE_PATH}/tool/sign_tool ${project_path}
4266e7c69efSopenharmony_ci
4276e7c69efSopenharmony_ci	cd ${project_path}/sign_tool
4286e7c69efSopenharmony_ci	if [[ $(echo ${basic_list[@]} | grep "${hap//_//}") != "" ]]; then
4296e7c69efSopenharmony_ci                echo "${hap} 使用basic签名" >> ${compile_result_error}/${hap}".log" 2>&1
4306e7c69efSopenharmony_ci		sed -i "s/\"normal\"/\"system_basic\"/g" ./UnsgnedReleasedProfileTemplate.json >> ${compile_result_error}/${hap}".log" 2>&1
4316e7c69efSopenharmony_ci	elif [[ $(echo ${core_list[@]} | grep "${hap//_//}") != "" ]]; then
4326e7c69efSopenharmony_ci                echo "${hap} 使用core签名" >> ${compile_result_error}/${hap}".log" 2>&1
4336e7c69efSopenharmony_ci		sed -i "s/\"normal\"/\"system_core\"/g" ./UnsgnedReleasedProfileTemplate.json >> ${compile_result_error}/${hap}".log" 2>&1
4346e7c69efSopenharmony_ci	fi
4356e7c69efSopenharmony_ci	if [[ $(echo ${system_app_list[@]} | grep "${hap//_//}") != "" ]]; then
4366e7c69efSopenharmony_ci                echo "${hap} 系统应用" >> ${compile_result_error}/${hap}".log" 2>&1
4376e7c69efSopenharmony_ci		sed -i "s/\"hos_normal_app\"/\"hos_system_app\"/g" ./UnsgnedReleasedProfileTemplate.json >> ${compile_result_error}/${hap}".log" 2>&1
4386e7c69efSopenharmony_ci	fi
4396e7c69efSopenharmony_ci	if [ "${bundle_name}" != "" ]; then
4406e7c69efSopenharmony_ci                echo "bundleName = ${bundle_name}" >> ${compile_result_error}/${hap}".log" 2>&1
4416e7c69efSopenharmony_ci                sed -i "s/\"com.OpenHarmony.app.test\"/\"${bundle_name}\"/g" ./UnsgnedReleasedProfileTemplate.json >> ${compile_result_error}/${hap}".log" 2>&1
4426e7c69efSopenharmony_ci        fi
4436e7c69efSopenharmony_ci
4446e7c69efSopenharmony_ci
4456e7c69efSopenharmony_ci	sign_hap_num=0
4466e7c69efSopenharmony_ci        for module in ${out_module[@]}
4476e7c69efSopenharmony_ci        do
4486e7c69efSopenharmony_ci		cd ${project_path}
4496e7c69efSopenharmony_ci                cur_out_module_name=${module##*/}
4506e7c69efSopenharmony_ci                if [[ -e "${project_path}/oh-package.json5" ]]; then
4516e7c69efSopenharmony_ci                        chmod +x hvigorw
4526e7c69efSopenharmony_ci		        ./hvigorw --mode module -p module=${cur_out_module_name} assembleHap --no-daemon >> ${compile_result_error}/${hap}".log" 2>&1
4536e7c69efSopenharmony_ci                        if [[ -d ${module}"/src/ohosTest" ]]; then
4546e7c69efSopenharmony_ci		                ./hvigorw --mode module -p module=${cur_out_module_name}@ohosTest assembleHap --no-daemon >> ${compile_result_error}/${hap}".log" 2>&1
4556e7c69efSopenharmony_ci                        fi
4566e7c69efSopenharmony_ci                else 
4576e7c69efSopenharmony_ci		        node ./node_modules/@ohos/hvigor/bin/hvigor.js --mode module -p module=${cur_out_module_name} assembleHap  --no-daemon>> ${compile_result_error}/${hap}".log" 2>&1
4586e7c69efSopenharmony_ci                        if [[ -d ${module}"/src/ohosTest" ]]; then
4596e7c69efSopenharmony_ci		                node ./node_modules/@ohos/hvigor/bin/hvigor.js --mode module -p module=${cur_out_module_name}@ohosTest assembleHap  --no-daemon>> ${compile_result_error}/${hap}".log" 2>&1
4606e7c69efSopenharmony_ci                        fi
4616e7c69efSopenharmony_ci                fi
4626e7c69efSopenharmony_ci
4636e7c69efSopenharmony_ci                is_sign=false
4646e7c69efSopenharmony_ci                echo "module = ${module} , cur_out_module_name=${cur_out_module_name}" >> ${compile_result_error}/${hap}".log" 2>&1
4656e7c69efSopenharmony_ci                if [ ! -d ${module}/build/default/outputs/default/ -o ! -d ${module}/build/default/outputs/ohosTest/ -a -d ${module}"/src/ohosTest" ]; then
4666e7c69efSopenharmony_ci                        echo "module = ${module}, assembleHap error !!!" >> ${compile_result_error}/${hap}".log" 2>&1
4676e7c69efSopenharmony_ci                        continue
4686e7c69efSopenharmony_ci                fi
4696e7c69efSopenharmony_ci		sign_hap_path=""
4706e7c69efSopenharmony_ci		test_sign_hap_path=""
4716e7c69efSopenharmony_ci		nosign_hap_path=""
4726e7c69efSopenharmony_ci		test_nosign_hap_path=""
4736e7c69efSopenharmony_ci		for out_file in `ls ${module}/build/default/outputs/default/`
4746e7c69efSopenharmony_ci		do
4756e7c69efSopenharmony_ci			if [[ "${out_file}" =~ "-unsigned.hap" ]]; then
4766e7c69efSopenharmony_ci				echo "发现unsigned包 : "${out_file}",开始使用签名工具签名" >> ${compile_result_error}/${hap}".log" 2>&1
4776e7c69efSopenharmony_ci				nosign_hap_path=${module}/build/default/outputs/default/${out_file}
4786e7c69efSopenharmony_ci				sign_hap_path=${module}/build/default/outputs/default/${out_file/unsigned/signed}
4796e7c69efSopenharmony_ci				cd ${project_path}/sign_tool
4806e7c69efSopenharmony_ci				java -jar ${BASE_PATH}/tool/hap-sign-tool.jar sign-profile -keyAlias "openharmony application profile release" -signAlg "SHA256withECDSA" -mode "localSign" -profileCertFile "OpenHarmonyProfileRelease.pem" -inFile "UnsgnedReleasedProfileTemplate.json" -keystoreFile "OpenHarmony.p12" -outFile "openharmony_sx.p7b" -keyPwd "123456" -keystorePwd "123456" >> ${compile_result_error}/${hap}".log" 2>&1
4816e7c69efSopenharmony_ci				java -jar ${BASE_PATH}/tool/hap-sign-tool.jar sign-app -keyAlias "openharmony application release" -signAlg "SHA256withECDSA" -mode "localSign" -appCertFile "OpenHarmonyApplication.pem" -profileFile "openharmony_sx.p7b" -inFile "${nosign_hap_path}" -keystoreFile "OpenHarmony.p12" -outFile "${sign_hap_path}" -keyPwd "123456" -keystorePwd "123456" >> ${compile_result_error}/${hap}".log" 2>&1
4826e7c69efSopenharmony_ci			fi
4836e7c69efSopenharmony_ci		done
4846e7c69efSopenharmony_ci
4856e7c69efSopenharmony_ci                if [[ -d ${module}"/src/ohosTest" ]]; then
4866e7c69efSopenharmony_ci                        for out_file in `ls ${module}/build/default/outputs/ohosTest/`
4876e7c69efSopenharmony_ci                        do
4886e7c69efSopenharmony_ci                                if [[ "${out_file}" =~ "-unsigned.hap" ]]; then
4896e7c69efSopenharmony_ci                                        echo "发现unsigned包 : "${out_file}",开始使用签名工具签名" >> ${compile_result_error}/${hap}".log" 2>&1
4906e7c69efSopenharmony_ci                                        test_nosign_hap_path=${module}/build/default/outputs/ohosTest/${out_file}
4916e7c69efSopenharmony_ci                                        test_sign_hap_path=${module}/build/default/outputs/ohosTest/${out_file/unsigned/signed}
4926e7c69efSopenharmony_ci                                        cd ${project_path}/sign_tool
4936e7c69efSopenharmony_ci                                        java -jar ${BASE_PATH}/tool/hap-sign-tool.jar sign-profile -keyAlias "openharmony application profile release" -signAlg "SHA256withECDSA" -mode "localSign" -profileCertFile "OpenHarmonyProfileRelease.pem" -inFile "UnsgnedReleasedProfileTemplate.json" -keystoreFile "OpenHarmony.p12" -outFile "openharmony_sx.p7b" -keyPwd "123456" -keystorePwd "123456" >> ${compile_result_error}/${hap}".log" 2>&1
4946e7c69efSopenharmony_ci                                        java -jar ${BASE_PATH}/tool/hap-sign-tool.jar sign-app -keyAlias "openharmony application release" -signAlg "SHA256withECDSA" -mode "localSign" -appCertFile "OpenHarmonyApplication.pem" -profileFile "openharmony_sx.p7b" -inFile "${test_nosign_hap_path}" -keystoreFile "OpenHarmony.p12" -outFile "${test_sign_hap_path}" -keyPwd "123456" -keystorePwd "123456" >> ${compile_result_error}/${hap}".log" 2>&1
4956e7c69efSopenharmony_ci                                fi
4966e7c69efSopenharmony_ci                        done
4976e7c69efSopenharmony_ci                fi
4986e7c69efSopenharmony_ci
4996e7c69efSopenharmony_ci		if [[ ${sign_hap_path} != "" && -f ${sign_hap_path} && ( -f ${test_sign_hap_path} || ! -d ${module}"/src/ohosTest") ]]; then
5006e7c69efSopenharmony_ci			cp ${sign_hap_path} ${compile_result}/${hap}_${cur_out_module_name}_signed.hap
5016e7c69efSopenharmony_ci			cp ${nosign_hap_path} ${nosign_hap_result}/${hap}_${cur_out_module_name}_signed.hap
5026e7c69efSopenharmony_ci                        
5036e7c69efSopenharmony_ci                        if [[ -d ${module}"/src/ohosTest" ]]; then
5046e7c69efSopenharmony_ci                                cp ${test_sign_hap_path} ${compile_result}/${hap}_${cur_out_module_name}_ohosTest_signed.hap
5056e7c69efSopenharmony_ci                                cp ${test_nosign_hap_path} ${nosign_hap_result}/${hap}_${cur_out_module_name}_ohosTest_signed.hap
5066e7c69efSopenharmony_ci                        fi
5076e7c69efSopenharmony_ci			sign_hap_num=$(expr ${sign_hap_num} + 1)
5086e7c69efSopenharmony_ci			echo "${module} assembleHap success !!!" >> ${compile_result_error}/${hap}".log" 2>&1
5096e7c69efSopenharmony_ci		else
5106e7c69efSopenharmony_ci			echo "${module} assembleHap error !!!" >> ${compile_result_error}/${hap}".log" 2>&1
5116e7c69efSopenharmony_ci		fi
5126e7c69efSopenharmony_ci        done
5136e7c69efSopenharmony_ci        if [[ ${#out_module[@]} == ${sign_hap_num} ]]; then
5146e7c69efSopenharmony_ci                #rm ${compile_result_error}/${hap}".log"
5156e7c69efSopenharmony_ci                mv ${compile_result_error}/${hap}.log ${compile_result_success}/${hap}.log
5166e7c69efSopenharmony_ci                echo "success compile ${hap} !!! "
5176e7c69efSopenharmony_ci	else
5186e7c69efSopenharmony_ci		echo "error   compile ${hap} QwQ ,log at ${compile_result_error}/${hap}.log"
5196e7c69efSopenharmony_ci	fi
5206e7c69efSopenharmony_ci}
5216e7c69efSopenharmony_ci
5226e7c69efSopenharmony_ci
5236e7c69efSopenharmony_cifunction compile_project(){
5246e7c69efSopenharmony_ci        echo "use public sdk compile..."
5256e7c69efSopenharmony_ci        project_path=${1}
5266e7c69efSopenharmony_ci        project_name=${2}
5276e7c69efSopenharmony_ci        COMPILE_RESULT=${BASE_PATH}/out/${project_name}/public-sdk/hap-out-with-nosigned
5286e7c69efSopenharmony_ci        COMPILE_RESULT_ERROR=${BASE_PATH}/out/${project_name}/public-sdk/compile-error-log
5296e7c69efSopenharmony_ci        COMPILE_RESULT_SUCCESS=${BASE_PATH}/out/${project_name}/public-sdk/compile-success-log
5306e7c69efSopenharmony_ci        SIGN_RESULT=${BASE_PATH}/out/${project_name}/public-sdk/hap-out-with-signed
5316e7c69efSopenharmony_ci
5326e7c69efSopenharmony_ci        clear_dir $COMPILE_RESULT
5336e7c69efSopenharmony_ci        clear_dir $COMPILE_RESULT_ERROR
5346e7c69efSopenharmony_ci        clear_dir $COMPILE_RESULT_SUCCESS
5356e7c69efSopenharmony_ci        clear_dir $SIGN_RESULT
5366e7c69efSopenharmony_ci
5376e7c69efSopenharmony_ci
5386e7c69efSopenharmony_ci        export OHOS_SDK_HOME=${arg_sdk_path}
5396e7c69efSopenharmony_ci        export OHOS_BASE_SDK_HOME=${arg_sdk_path}
5406e7c69efSopenharmony_ci        echo "OHOS_SDK_HOME="${OHOS_SDK_HOME}
5416e7c69efSopenharmony_ci        echo "OHOS_BASE_SDK_HOME="${OHOS_BASE_SDK_HOME}
5426e7c69efSopenharmony_ci        
5436e7c69efSopenharmony_ci	EOF=0
5446e7c69efSopenharmony_ci        curr=0
5456e7c69efSopenharmony_ci        while [ $EOF -ne 1 ]; do
5466e7c69efSopenharmony_ci                for ((i=1; i<=$TIME; i++)); do
5476e7c69efSopenharmony_ci                        if  [ ${curr} -eq ${#public_list[@]} ]; then
5486e7c69efSopenharmony_ci                                EOF=1
5496e7c69efSopenharmony_ci                                break
5506e7c69efSopenharmony_ci                        fi
5516e7c69efSopenharmony_ci                        compile ${public_list[$curr]} ${SIGN_RESULT} ${COMPILE_RESULT_ERROR} ${COMPILE_RESULT} ${COMPILE_RESULT_SUCCESS} &
5526e7c69efSopenharmony_ci                        curr=$((curr+1))
5536e7c69efSopenharmony_ci                done
5546e7c69efSopenharmony_ci                wait
5556e7c69efSopenharmony_ci        done
5566e7c69efSopenharmony_ci}
5576e7c69efSopenharmony_ci
5586e7c69efSopenharmony_cifunction compile_project_full(){
5596e7c69efSopenharmony_ci        echo "use full sdk compile..."
5606e7c69efSopenharmony_ci        project_path=${1}
5616e7c69efSopenharmony_ci        project_name=${2}
5626e7c69efSopenharmony_ci        COMPILE_RESULT=${BASE_PATH}/out/${project_name}/full-sdk/hap-out-with-nosigned
5636e7c69efSopenharmony_ci        COMPILE_RESULT_ERROR=${BASE_PATH}/out/${project_name}/full-sdk/compile-error-log
5646e7c69efSopenharmony_ci        COMPILE_RESULT_SUCCESS=${BASE_PATH}/out/${project_name}/full-sdk/compile-success-log
5656e7c69efSopenharmony_ci        SIGN_RESULT=${BASE_PATH}/out/${project_name}/full-sdk/hap-out-with-signed
5666e7c69efSopenharmony_ci
5676e7c69efSopenharmony_ci        clear_dir $COMPILE_RESULT
5686e7c69efSopenharmony_ci        clear_dir $COMPILE_RESULT_ERROR
5696e7c69efSopenharmony_ci        clear_dir $COMPILE_RESULT_SUCCESS
5706e7c69efSopenharmony_ci        clear_dir $SIGN_RESULT
5716e7c69efSopenharmony_ci
5726e7c69efSopenharmony_ci        export OHOS_SDK_HOME=${arg_full_sdk_path}
5736e7c69efSopenharmony_ci        export OHOS_BASE_SDK_HOME=${arg_full_sdk_path}
5746e7c69efSopenharmony_ci        echo "OHOS_SDK_HOME="${OHOS_SDK_HOME}
5756e7c69efSopenharmony_ci        echo "OHOS_BASE_SDK_HOME="${OHOS_BASE_SDK_HOME}
5766e7c69efSopenharmony_ci
5776e7c69efSopenharmony_ci	EOF=0
5786e7c69efSopenharmony_ci        curr=0
5796e7c69efSopenharmony_ci        while [ $EOF -ne 1 ]; do
5806e7c69efSopenharmony_ci                for ((i=1; i<=$TIME; i++)); do
5816e7c69efSopenharmony_ci                        if  [ ${curr} -eq ${#full_list[@]} ]; then
5826e7c69efSopenharmony_ci                                EOF=1
5836e7c69efSopenharmony_ci                                break
5846e7c69efSopenharmony_ci                        fi
5856e7c69efSopenharmony_ci                        compile ${full_list[$curr]} ${SIGN_RESULT} ${COMPILE_RESULT_ERROR} ${COMPILE_RESULT} ${COMPILE_RESULT_SUCCESS} &
5866e7c69efSopenharmony_ci                        curr=$((curr+1))
5876e7c69efSopenharmony_ci                done
5886e7c69efSopenharmony_ci                wait
5896e7c69efSopenharmony_ci        done
5906e7c69efSopenharmony_ci}
5916e7c69efSopenharmony_ci
5926e7c69efSopenharmony_cifunction load(){
5936e7c69efSopenharmony_ci	project_url=${1}
5946e7c69efSopenharmony_ci	project_branch=${2}
5956e7c69efSopenharmony_ci	project_name=${3}
5966e7c69efSopenharmony_ci	if test -d ${BASE_PATH}/projects/${project_name}
5976e7c69efSopenharmony_ci 	then
5986e7c69efSopenharmony_ci                echo "${project_name} exists,ready for update..."
5996e7c69efSopenharmony_ci                cd ${BASE_PATH}/projects/${project_name}
6006e7c69efSopenharmony_ci                git reset --hard origin/${project_branch}
6016e7c69efSopenharmony_ci                git checkout -b ${project_branch} origin/${project_branch}
6026e7c69efSopenharmony_ci                git checkout ${project_branch}
6036e7c69efSopenharmony_ci                git lfs fetch origin ${project_branch}
6046e7c69efSopenharmony_ci		git pull
6056e7c69efSopenharmony_ci        else
6066e7c69efSopenharmony_ci                echo "${project_name} dose not exist,ready to download..."
6076e7c69efSopenharmony_ci                if [ ! -d ${BASE_PATH}/projects ]; then
6086e7c69efSopenharmony_ci			mkdir -p ${BASE_PATH}/projects
6096e7c69efSopenharmony_ci		fi
6106e7c69efSopenharmony_ci                cd ${BASE_PATH}/projects
6116e7c69efSopenharmony_ci                git lfs clone -b ${project_branch} ${project_url} ${project_name}
6126e7c69efSopenharmony_ci                git checkout -b ${project_branch} origin/${project_branch}
6136e7c69efSopenharmony_ci        fi
6146e7c69efSopenharmony_ci        if [ -d "${BASE_PATH}/projects/${project_name}/${arg_compile_dir}" ]; then
6156e7c69efSopenharmony_ci                read_project ${BASE_PATH}/projects/${project_name}/${arg_compile_dir}
6166e7c69efSopenharmony_ci                exclude_full_project
6176e7c69efSopenharmony_ci		compile_project ${BASE_PATH}/projects/${project_name} ${project_name}
6186e7c69efSopenharmony_ci		compile_project_full ${BASE_PATH}/projects/${project_name} ${project_name}
6196e7c69efSopenharmony_ci        fi
6206e7c69efSopenharmony_ci}
6216e7c69efSopenharmony_ci
6226e7c69efSopenharmony_ci
6236e7c69efSopenharmony_ciwhile read line
6246e7c69efSopenharmony_cido
6256e7c69efSopenharmony_ci        if [[ ${line} == ${tag_url}* ]]; then
6266e7c69efSopenharmony_ci                url=${line##*${tag_url}}
6276e7c69efSopenharmony_ci        elif [[ ${line} == ${tag_branch}* ]]; then
6286e7c69efSopenharmony_ci                branch=${line##*${tag_branch}}
6296e7c69efSopenharmony_ci        elif [[ ${line} == ${tag_name}* ]]; then
6306e7c69efSopenharmony_ci                name=${line##*${tag_name}}
6316e7c69efSopenharmony_ci        elif [[ ${line} == ${tag_full_list}* ]]; then
6326e7c69efSopenharmony_ci                temp_string=${line##*${tag_full_list}}
6336e7c69efSopenharmony_ci                full_list=(${temp_string//;/ })
6346e7c69efSopenharmony_ci        elif [[ ${line} == ${tag_basic_list}* ]]; then
6356e7c69efSopenharmony_ci                temp_string=${line##*${tag_basic_list}}
6366e7c69efSopenharmony_ci                basic_list=(${temp_string//;/ })
6376e7c69efSopenharmony_ci        elif [[ ${line} == ${tag_core_list}* ]]; then
6386e7c69efSopenharmony_ci                temp_string=${line##*${tag_core_list}}
6396e7c69efSopenharmony_ci                core_list=(${temp_string//;/ })
6406e7c69efSopenharmony_ci	elif [[ ${line} == ${tag_system_app_list}* ]]; then
6416e7c69efSopenharmony_ci                temp_string=${line##*${tag_system_app_list}}
6426e7c69efSopenharmony_ci                system_app_list=(${temp_string//;/ })
6436e7c69efSopenharmony_ci        fi
6446e7c69efSopenharmony_cidone < ${arg_p}
6456e7c69efSopenharmony_ci
6466e7c69efSopenharmony_ciload ${url} ${branch} ${name}
6476e7c69efSopenharmony_ci
6486e7c69efSopenharmony_ciendTime=`date +%Y%m%d-%H:%M:%S`
6496e7c69efSopenharmony_ciendTime_s=`date +%s`
6506e7c69efSopenharmony_cisumTime=$[ $endTime_s - $startTime_s ]
6516e7c69efSopenharmony_ci
6526e7c69efSopenharmony_ciecho "$startTime ---> $endTime" "耗时:$sumTime seconds"
6536e7c69efSopenharmony_ciecho "| public-sdk--|-------------|-------------|-------------|-------------|-------------"
6546e7c69efSopenharmony_ciecho "| 仓库        | 项目数量    | 成功数量    | 失败数量    | Hap数量    | 签名成功    "
6556e7c69efSopenharmony_ciecho "|-------------|-------------|-------------|-------------|-------------"
6566e7c69efSopenharmony_ciecho "| ${name} | ${#public_list[@]}         | $(ls -l ${BASE_PATH}/out/${name}/public-sdk/compile-success-log|grep "^-"|wc -l)           | $(ls -l ${BASE_PATH}/out/${name}/public-sdk/compile-error-log|grep "^-"|wc -l)           | "`expr $(ls -l ${BASE_PATH}/out/${name}/public-sdk/hap-out-with-nosigned|grep "^-"|wc -l) / 2`"         | "`expr $(ls -l ${BASE_PATH}/out/${name}/public-sdk/hap-out-with-signed|grep "^-"|wc -l) / 2`
6576e7c69efSopenharmony_ciif (( $(ls -l ${BASE_PATH}/out/${name}/public-sdk/compile-error-log|grep "^-"|wc -l) > 0 )); then
6586e7c69efSopenharmony_ci        echo "| 失败项目列表|-------------|-------------|-------------|-------------|-------------"
6596e7c69efSopenharmony_ci	for z in `ls ${BASE_PATH}/out/${name}/public-sdk/compile-error-log`
6606e7c69efSopenharmony_ci        do
6616e7c69efSopenharmony_ci                z=${z//_//}
6626e7c69efSopenharmony_ci                z=${z%.log}
6636e7c69efSopenharmony_ci                echo "| "${z}" |"
6646e7c69efSopenharmony_ci        done
6656e7c69efSopenharmony_cifi
6666e7c69efSopenharmony_ciecho "| 失败项目日志汇总地址|-------------|-------------|-------------|-------------------"
6676e7c69efSopenharmony_ciecho "| ${BASE_PATH}/out/${name}/public-sdk/compile-error-log"
6686e7c69efSopenharmony_ciecho "| full-sdk----|-------------|-------------|-------------|-------------|-------------"
6696e7c69efSopenharmony_ciecho "| 仓库        | 项目数量    | 成功数量    | 失败数量    | Hap数量    | 签名成功    "
6706e7c69efSopenharmony_ciecho "|-------------|-------------|-------------|-------------|-------------|-------------"
6716e7c69efSopenharmony_ciecho "| ${name} | ${#full_list[@]}          | $(ls -l ${BASE_PATH}/out/${name}/full-sdk/compile-success-log|grep "^-"|wc -l)           | $(ls -l ${BASE_PATH}/out/${name}/full-sdk/compile-error-log|grep "^-"|wc -l)           | "`expr $(ls -l ${BASE_PATH}/out/${name}/full-sdk/hap-out-with-nosigned|grep "^-"|wc -l) / 2`"          | "`expr $(ls -l ${BASE_PATH}/out/${name}/full-sdk/hap-out-with-signed|grep "^-"|wc -l) / 2`
6726e7c69efSopenharmony_ciif (( $(ls -l ${BASE_PATH}/out/${name}/full-sdk/compile-error-log|grep "^-"|wc -l) > 0 )); then
6736e7c69efSopenharmony_ci        echo "| 失败项目列表|-------------|-------------|-------------|-------------|-------------"
6746e7c69efSopenharmony_ci	for z in `ls ${BASE_PATH}/out/${name}/full-sdk/compile-error-log`
6756e7c69efSopenharmony_ci        do
6766e7c69efSopenharmony_ci                z=${z//_//}
6776e7c69efSopenharmony_ci                z=${z%.log}
6786e7c69efSopenharmony_ci                echo "| "${z}" |"
6796e7c69efSopenharmony_ci        done
6806e7c69efSopenharmony_cifi
6816e7c69efSopenharmony_ciecho "| 失败项目日志汇总地址|-------------|-------------|-------------------"
6826e7c69efSopenharmony_ciecho "| ${BASE_PATH}/out/${name}/full-sdk/compile-error-log"
6836e7c69efSopenharmony_ciecho "|-------------|-------------|-------------|-------------|-------------"
6846e7c69efSopenharmony_ciecho "| 成功项目日志汇总地址|-------------|-------------|-------------------"
6856e7c69efSopenharmony_ciecho "| ${BASE_PATH}/out/${name}/full-sdk/compile-success-log"
6866e7c69efSopenharmony_ciecho "| 不含测试用例项目|-------------|-------------|-------------------"
6876e7c69efSopenharmony_ci        for simple in ${simple_list[@]};do
6886e7c69efSopenharmony_ci        echo "| "${simple}" |"
6896e7c69efSopenharmony_ci        done
6906e7c69efSopenharmony_ciecho "|-------------|-------------|-------------|-------------|-------------"
6916e7c69efSopenharmony_ciecho "compile completed..."
692