#!/bin/bash
set -e
function init_env() {
export NODE_OPTIONS="--max-old-space-size=20000"
export NODE_HOME="${NODE_HOME%/bin}"
export IS_DT_IN_LINUX=true
echo ${NODE_HOME}
echo "${HM_SDK_HOME}"
node -v
npm -v
PROJECT_PATH=$(pwd -P)
TOOLS_INSTALL_DIR=${PROJECT_PATH}
npm config set strict-ssl false
if [ "${DT_DEVICE_FLAG}" == "pc" ];then
ohpm config set resolve_conflict false
fi
}
function ohpm_install() {
pushd "$1"
ohpm install
popd
}
function ohpm_install_deps() {
cd ${PROJECT_PATH}
ohpm -v
ohpm_install "${PROJECT_PATH}"
ohpm_install "${PROJECT_PATH}/staticcommon/screenlockcommon"
ohpm_install "${PROJECT_PATH}/feature/appcenter"
ohpm_install "${PROJECT_PATH}/feature/carcastsource"
ohpm_install "${PROJECT_PATH}/feature/castengine"
ohpm_install "${PROJECT_PATH}/feature/devecoviewer"
ohpm_install "${PROJECT_PATH}/feature/controlcentercomponent"
ohpm_install "${PROJECT_PATH}/feature/desktop/bigfolder"
ohpm_install "${PROJECT_PATH}/feature/desktop/emergencymode"
ohpm_install "${PROJECT_PATH}/feature/desktop/desktopedit"
ohpm_install "${PROJECT_PATH}/feature/desktop/form"
ohpm_install "${PROJECT_PATH}/feature/desktop/formstack"
ohpm_install "${PROJECT_PATH}/feature/desktop/numbadge"
ohpm_install "${PROJECT_PATH}/feature/desktop/pagedesktop"
ohpm_install "${PROJECT_PATH}/feature/desktop/smallfolder"
ohpm_install "${PROJECT_PATH}/feature/desktopfilefolder"
ohpm_install "${PROJECT_PATH}/feature/engineservice"
ohpm_install "${PROJECT_PATH}/feature/gesturenavigation"
ohpm_install "${PROJECT_PATH}/feature/immersivekeyguard"
ohpm_install "${PROJECT_PATH}/feature/liveview/"
ohpm_install "${PROJECT_PATH}/feature/multiinput"
ohpm_install "${PROJECT_PATH}/feature/notification/managementcomponent"
ohpm_install "${PROJECT_PATH}/feature/notification/notificationcomponent"
ohpm_install "${PROJECT_PATH}/feature/notification/notificationmanagement"
ohpm_install "${PROJECT_PATH}/feature/recents"
ohpm_install "${PROJECT_PATH}/feature/screenlockcomponent"
ohpm_install "${PROJECT_PATH}/feature/smartdock/commonsmartdock"
ohpm_install "${PROJECT_PATH}/feature/smartdock/pcsmartdock"
ohpm_install "${PROJECT_PATH}/feature/statusbarcomponent"
ohpm_install "${PROJECT_PATH}/feature/superprivacy"
ohpm_install "${PROJECT_PATH}/feature/systemcontrol/brightnesscomponent"
ohpm_install "${PROJECT_PATH}/feature/systemcontrol/hcastcomponent"
ohpm_install "${PROJECT_PATH}/feature/systemcontrol/superprivacycomponent"
ohpm_install "${PROJECT_PATH}/feature/systemcontrol/mediacontrolcomponent"
ohpm_install "${PROJECT_PATH}/feature/systemcontrol/powercomponent"
ohpm_install "${PROJECT_PATH}/feature/systemcontrol/eyecomfortcomponent"
ohpm_install "${PROJECT_PATH}/feature/systemcontrol/superhubtogglecomponent"
ohpm_install "${PROJECT_PATH}/feature/systemcontrol/powersavingtogglecomponent"
ohpm_install "${PROJECT_PATH}/feature/systemcontrol/nearlinktogglecomponent"
ohpm_install "${PROJECT_PATH}/feature/systemcontrol/soundcomponent"
ohpm_install "${PROJECT_PATH}/feature/systemdialog"
ohpm_install "${PROJECT_PATH}/feature/collaborationfwkdialog"
ohpm_install "${PROJECT_PATH}/feature/systemstatus/airplanecomponent"
ohpm_install "${PROJECT_PATH}/feature/systemstatus/autorotatecomponent"
ohpm_install "${PROJECT_PATH}/feature/systemstatus/batterycomponent"
ohpm_install "${PROJECT_PATH}/feature/systemstatus/bluetoothcomponent"
ohpm_install "${PROJECT_PATH}/feature/systemstatus/cameraindicator"
ohpm_install "${PROJECT_PATH}/feature/systemstatus/clockcomponent"
ohpm_install "${PROJECT_PATH}/feature/systemstatus/customcomponent"
ohpm_install "${PROJECT_PATH}/feature/systemstatus/darkmodecomponent"
ohpm_install "${PROJECT_PATH}/feature/systemstatus/datetimecomponent"
ohpm_install "${PROJECT_PATH}/feature/systemstatus/earphonecomponent"
ohpm_install "${PROJECT_PATH}/feature/systemstatus/flashlightcomponent"
ohpm_install "${PROJECT_PATH}/feature/systemstatus/hotspotcomponent"
ohpm_install "${PROJECT_PATH}/feature/systemstatus/inputmethodcomponent"
ohpm_install "${PROJECT_PATH}/feature/systemstatus/linkspeedcomponent"
ohpm_install "${PROJECT_PATH}/feature/systemstatus/locationcomponent"
ohpm_install "${PROJECT_PATH}/feature/systemstatus/microphonecomponent"
ohpm_install "${PROJECT_PATH}/feature/systemstatus/mobiledatacomponent"
ohpm_install "${PROJECT_PATH}/feature/systemstatus/nfccomponent"
ohpm_install "${PROJECT_PATH}/feature/systemstatus/plugincomponent"
ohpm_install "${PROJECT_PATH}/feature/systemstatus/ringmodecomponent"
ohpm_install "${PROJECT_PATH}/feature/systemstatus/signalcomponent"
ohpm_install "${PROJECT_PATH}/feature/systemstatus/starflashcomponent"
ohpm_install "${PROJECT_PATH}/feature/systemstatus/statusbarsuperprivacycomponent"
ohpm_install "${PROJECT_PATH}/feature/systemstatus/wificomponent"
ohpm_install "${PROJECT_PATH}/feature/systemstatus/plugincardcomponent"
ohpm_install "${PROJECT_PATH}/feature/themecomponent"
ohpm_install "${PROJECT_PATH}/feature/volume/volumepanel"
ohpm_install "${PROJECT_PATH}/feature/volume/volumepanelcomponent"
ohpm_install "${PROJECT_PATH}/feature/togglehome"
ohpm_install "${PROJECT_PATH}/feature/wallpapercomponent"
ohpm_install "${PROJECT_PATH}/feature/statusbarextension"
ohpm_install "${PROJECT_PATH}/product/phone"
ohpm_install "${PROJECT_PATH}/product/pc"
ohpm_install "${PROJECT_PATH}/staticcommon/systemuicommon"
ohpm_install "${PROJECT_PATH}/staticcommon/launchercommon"
ohpm_install "${PROJECT_PATH}/feature/themeservice/themeservice_base"
ohpm_install "${PROJECT_PATH}/feature/themeservice/themeservice_inner_api"
ohpm_install "${PROJECT_PATH}/feature/themeservice/themeservice_core_lem"
ohpm_install "${PROJECT_PATH}/feature/themeservice/themeservice_kit"
ohpm_install "${PROJECT_PATH}/feature/themeservice/themeservice_core"
ohpm_install "${PROJECT_PATH}/product/pcbase"
ohpm_install "${PROJECT_PATH}/product/pad"
ohpm_install "${PROJECT_PATH}/product/phonebase"
}
function clean() {
cd ${PROJECT_PATH}
hvigorw clean --no-daemon
}
function shell_replace() {
if [ "${DT_TASK_FLAG}" == "coverage" ] || [ "${DT_TASK_FLAG}" == "fullCoverage" ];then
node ./shell/Test_withcoverage.build.js
elif [ "${DT_TASK_FLAG}" == "fullCoverageReboot" ];then
node ./shell/Test_cov_reboot.build.js
fi
}
function update_sdk_interface() {
echo "[OHOS INFO] update_sdk_interface begin"
node ${PROJECT_PATH}/hvigor/update-sdk-interface.js ${HM_SDK_HOME}/default/openharmony/
echo "[OHOS INFO] update_sdk_interface end"
}
function dtpinpeline_zip() {
if [ -e "build/DTPipeline.zip" ];then
echo "build/DTPipeline.zip is exist"
rm -rf ${PROJECT_PATH}/build/DTPipeline.zip
cd build/outputs
if [ $? -ne 0 ];then
echo "build/outputs is not exist"
exit 1
fi
zip -r ${PROJECT_PATH}/build/DTPipeline.zip ./*
cd ${PROJECT_PATH}
else
echo "build/DTPipeline.zip is not exist"
cd build/outputs
if [ $? -ne 0 ];then
echo "build/outputs is not exist"
exit 1
fi
zip -r ${PROJECT_PATH}/build/DTPipeline.zip ./*
cd ${PROJECT_PATH}
fi
}
function build() {
cat ${HOME}/.npmrc | grep 'lockfile=false' || echo 'lockfile=false' >> ${HOME}/.npmrc
cd ${PROJECT_PATH}/signature
chmod +x build.sh
./build.sh
cd ${PROJECT_PATH}
update_sdk_interface
hvigorw clean --no-daemon
shell_replace
mkdir build
mkdir build/outputs
mkdir build/outputs/SceneBoard
hvigorw assembleHap --mode module -p module=default_notificationmanagement --no-daemon -p debuggable=false -p build_mode=release -p hvigor-obfuscation=false
hvigorw assembleHap --mode module -p module=engineservice --no-daemon -p debuggable=false -p build_mode=release -p hvigor-obfuscation=false
hvigorw assembleHap --mode module -p module=themecomponent --no-daemon -p debuggable=false -p build_mode=release -p hvigor-obfuscation=false
hvigorw assembleHsp --mode module -p module=basecommon@default -p product=default --no-daemon -p debuggable=false -p build_mode=release -p hvigor-obfuscation=false
cp ./feature/notification/notificationmanagement/build/default/outputs/default/default_notificationmanagement-phone_sceneboard-default-signed.hap ./build/outputs/SceneBoard/SceneBoard_NotificationManagement.hap
cp ./feature/engineservice/build/default/outputs/default/engineservice-phone_sceneboard-default-signed.hap ./build/outputs/SceneBoard/SceneBoard_EngineService.hap
cp ./feature/themecomponent/build/default/outputs/default/themecomponent-phone_sceneboard-default-signed.hap ./build/outputs/SceneBoard/SceneBoard_ThemeComponent.hap
cp ./basecommon/build/default/outputs/default/basecommon-default-signed.hsp ./build/outputs/SceneBoard/basecommon.hsp
if [ "${DT_TASK_FLAG}" == "fullCoverage" ] || [ "${DT_TASK_FLAG}" == "fullCoverageReboot" ];then
echo "hvigorw phone_sceneboard"
hvigorw assembleHap --mode module -p module=phone_sceneboard --no-daemon -p debuggable=false -p build_mode=release -p ohos-test-coverage=true -p hvigor-obfuscation=false
mv ./product/phone/build/default/outputs/default/phone_sceneboard-default-signed.hap ./product/phone/build/default/outputs/default/SceneBoard.hap
else
hvigorw assembleHap --mode module -p module=phone_sceneboard --no-daemon -p debuggable=false -p build_mode=release -p hvigor-obfuscation=false
fi
if [ "${DT_TASK_FLAG}" == "coverage" ] || [ "${DT_TASK_FLAG}" == "fullCoverage" ] || [ "${DT_TASK_FLAG}" == "fullCoverageReboot" ];then
echo "hvigorw phone_sceneboard@ohosTest"
hvigorw --mode module -p module=phone_sceneboard@ohosTest packageTesting --no-daemon -p debuggable=false -p build_mode=release -p ohos-test-coverage=true -p hvigor-obfuscation=false
else
hvigorw --mode module -p module=phone_sceneboard@ohosTest packageTesting --no-daemon -p debuggable=false -p build_mode=release -p hvigor-obfuscation=false
fi
dtpinpeline_zip
}
function build_pad() {
cat ${HOME}/.npmrc | grep 'lockfile=false' || echo 'lockfile=false' >> ${HOME}/.npmrc
cd ${PROJECT_PATH}/signature
chmod +x build.sh
./build.sh
cd ${PROJECT_PATH}
update_sdk_interface
hvigorw clean --no-daemon
shell_replace
mkdir build
mkdir build/outputs
mkdir build/outputs/SceneBoard
hvigorw assembleHap --mode module -p module=default_notificationmanagement --no-daemon -p debuggable=false -p build_mode=release -p hvigor-obfuscation=false
hvigorw assembleHap --mode module -p module=engineservice --no-daemon -p debuggable=false -p build_mode=release -p hvigor-obfuscation=false
hvigorw assembleHap --mode module -p module=themecomponent --no-daemon -p debuggable=false -p build_mode=release -p hvigor-obfuscation=false
hvigorw assembleHsp --mode module -p module=basecommon@default -p product=default --no-daemon -p debuggable=false -p build_mode=release -p hvigor-obfuscation=false
cp ./feature/notification/notificationmanagement/build/default/outputs/default/default_notificationmanagement-phone_sceneboard-default-signed.hap ./build/outputs/SceneBoard/SceneBoard_NotificationManagement.hap
cp ./feature/engineservice/build/default/outputs/default/engineservice-phone_sceneboard-default-signed.hap ./build/outputs/SceneBoard/SceneBoard_EngineService.hap
cp ./feature/themecomponent/build/default/outputs/default/themecomponent-phone_sceneboard-default-signed.hap ./build/outputs/SceneBoard/SceneBoard_ThemeComponent.hap
cp ./basecommon/build/default/outputs/default/basecommon-default-signed.hsp ./build/outputs/SceneBoard/basecommon.hsp
if [ "${DT_TASK_FLAG}" == "fullCoverage" ] || [ "${DT_TASK_FLAG}" == "fullCoverageReboot" ];then
echo "hvigorw pad_sceneboard"
hvigorw assembleHap --mode module -p module=pad_sceneboard --no-daemon -p debuggable=false -p build_mode=release -p ohos-test-coverage=true -p hvigor-obfuscation=false
mv ./product/pad/build/default/outputs/default/pad_sceneboard-default-signed.hap ./product/pad/build/default/outputs/default/SceneBoard.hap
else
hvigorw assembleHap --mode module -p module=pad_sceneboard --no-daemon -p debuggable=false -p build_mode=release -p hvigor-obfuscation=false
fi
if [ "${DT_TASK_FLAG}" == "coverage" ] || [ "${DT_TASK_FLAG}" == "fullCoverage" ] || [ "${DT_TASK_FLAG}" == "fullCoverageReboot" ];then
echo "hvigorw pad_sceneboard@ohosTest"
hvigorw --mode module -p module=pad_sceneboard@ohosTest packageTesting --no-daemon -p debuggable=false -p build_mode=release -p ohos-test-coverage=true -p hvigor-obfuscation=false
else
hvigorw --mode module -p module=pad_sceneboard@ohosTest packageTesting --no-daemon -p debuggable=false -p build_mode=release -p hvigor-obfuscation=false
fi
dtpinpeline_zip
}
function build_pc() {
cat ${HOME}/.npmrc | grep 'lockfile=false' || echo 'lockfile=false' >> ${HOME}/.npmrc
cd ${PROJECT_PATH}/signature
chmod +x build.sh
./build.sh
cd ${PROJECT_PATH}
update_sdk_interface
hvigorw clean --no-daemon
mkdir build
mkdir build/outputs
mkdir build/outputs/PCDockAndAppCenter
hvigorw assembleHap --mode module -p module=pc_sceneboard --no-daemon -p debuggable=false -p build_mode=release -p hvigor-obfuscation=false
mv ./product/pc/build/default/outputs/default/pc_sceneboard-default-signed.hap ./product/pc/build/default/outputs/default/SceneBoard.hap
cp ./product/pc/build/default/outputs/default/SceneBoard.hap ./build/outputs/PCDockAndAppCenter/SceneBoard.hap
if [ "${DT_TASK_FLAG}" == "coverage" ];then
hvigorw --mode module -p module=pc_sceneboard@ohosTest packageTesting --no-daemon -p debuggable=false -p build_mode=release -p ohos-test-coverage=true -p hvigor-obfuscation=false
else
hvigorw --mode module -p module=pc_sceneboard@ohosTest packageTesting --no-daemon -p debuggable=false -p build_mode=release -p hvigor-obfuscation=false
fi
dtpinpeline_zip
}
function build_themeservice() {
cat ${HOME}/.npmrc | grep 'lockfile=false' || echo 'lockfile=false' >> ${HOME}/.npmrc
cd ${PROJECT_PATH}/signature
chmod +x build.sh
./build.sh
cd ${PROJECT_PATH}
update_sdk_interface
hvigorw clean --no-daemon
mkdir build
mkdir build/outputs
mkdir build/outputs/ThemeService
hvigorw assembleHap --mode module -p module=themeservice_core --daemon -p debuggable=false -p build_mode=release -p ohos-test-coverage=true -p hvigor-obfuscation=false
mv ./feature/themeservice/themeservice_core/build/default/outputs/default/themeservice_core-phone_sceneboard-default-signed.hap ./feature/themeservice/themeservice_core/build/default/outputs/default/ThemeService.hap
if [ "${DT_TASK_FLAG}" == "coverage" ] || [ "${DT_TASK_FLAG}" == "fullCoverage" ];then
hvigorw --mode module -p module=themeservice_core@ohosTest -p debuggable=false -p ohos-test-coverage=true hvigor-obfuscation=false assembleHap packageTesting --parallel --incremental --no-daemon --stacktrace
else
hvigorw --mode module -p module=themeservice_core@ohosTest packageTesting --no-daemon -p debuggable=false -p build_mode=release -p
fi
dtpinpeline_zip
}
function main() {
local start_time=$(date '+%s')
init_env
clean
ohpm_install_deps
if [ "${DT_DEVICE_FLAG}" == "pc" ];then
build_pc
elif [ "${DT_DEVICE_FLAG}" == "themeservice" ];then
build_themeservice
elif [ "${DT_DEVICE_FLAG}" == "pad" ];then
build_pad
else
build
fi
local end_time=$(date '+%s')
local elapsed_time=$(expr $end_time - $start_time)
echo "build success in ${elapsed_time}s..."
}
if [ "$1" == "clean" ] || [ "$1" == "projects" ];then
echo "do nothing"
elif [ "$1" == "SystemUI_DT" ];then
sh ./feature/notification/systemui_build.sh "${@:2}"
else
DT_TASK_FLAG=$2
DT_DEVICE_FLAG=$3
echo "DT_TASK_FLAG is ${DT_TASK_FLAG}, DT_DEVICE_FLAG is ${DT_DEVICE_FLAG}"
main
fi