109 lines
2.7 KiB
Bash
109 lines
2.7 KiB
Bash
#!/bin/bash
|
||
|
||
set -Eeuo pipefail
|
||
|
||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
|
||
SDK_VARIANT="${SDK_VARIANT:-vznl}"
|
||
RELEASE_ARGS=()
|
||
while [ $# -gt 0 ]; do
|
||
case "$1" in
|
||
--sdk)
|
||
[ $# -ge 2 ] || { echo "--sdk 缺少参数" >&2; exit 1; }
|
||
SDK_VARIANT="$2"
|
||
shift 2
|
||
;;
|
||
--sdk=*) SDK_VARIANT="${1#*=}"; shift ;;
|
||
*) RELEASE_ARGS+=("$1"); shift ;;
|
||
esac
|
||
done
|
||
export SDK_VARIANT
|
||
|
||
case "${SDK_VARIANT}" in
|
||
vznl|wood) ;;
|
||
*) echo "不支持的 SDK: ${SDK_VARIANT}(可选 vznl 或 wood)" >&2; exit 1 ;;
|
||
esac
|
||
|
||
source "${SCRIPT_DIR}/project_registry.sh"
|
||
|
||
CURRENT_STEP="initializing"
|
||
|
||
on_error() {
|
||
local exit_code=$1 line_no=$2 failed_command=$3
|
||
echo >&2
|
||
echo "发布流程失败,当前步骤: ${CURRENT_STEP}" >&2
|
||
echo "行号: ${line_no},命令: ${failed_command},退出码: ${exit_code}" >&2
|
||
exit "${exit_code}"
|
||
}
|
||
|
||
trap 'on_error $? $LINENO "$BASH_COMMAND"' ERR
|
||
|
||
show_help() {
|
||
cat <<'EOF'
|
||
用法:
|
||
./project_release.sh [--sdk vznl|wood] <ProjectName>
|
||
./project_release.sh --list
|
||
|
||
流程:
|
||
project_release.sh 统一执行编译、打包和版本更新。
|
||
|
||
支持发布的项目:
|
||
EOF
|
||
list_projects | sed 's/^/ - /'
|
||
}
|
||
|
||
run_step() {
|
||
local title=$1; shift
|
||
CURRENT_STEP="${title}"
|
||
echo
|
||
echo "==> ${title}"
|
||
"$@"
|
||
echo "${title} 成功"
|
||
}
|
||
|
||
if [ ${#RELEASE_ARGS[@]} -eq 1 ] && [ "${RELEASE_ARGS[0]}" = "--list" ]; then
|
||
list_projects; exit 0
|
||
fi
|
||
|
||
if [ ${#RELEASE_ARGS[@]} -eq 1 ] && { [ "${RELEASE_ARGS[0]}" = "-h" ] || [ "${RELEASE_ARGS[0]}" = "--help" ]; }; then
|
||
show_help; exit 0
|
||
fi
|
||
|
||
if [ ${#RELEASE_ARGS[@]} -ne 1 ]; then
|
||
show_help; exit 1
|
||
fi
|
||
|
||
PROJECT_NAME=${RELEASE_ARGS[0]}
|
||
|
||
if ! is_project "${PROJECT_NAME}"; then
|
||
echo "不支持的发布目标: ${PROJECT_NAME}" >&2
|
||
echo >&2
|
||
show_help >&2
|
||
exit 1
|
||
fi
|
||
|
||
START_TIME=$(date +%s)
|
||
echo "发布流程开始"
|
||
echo "项目: ${PROJECT_NAME}"
|
||
|
||
run_step "编译 ARM 项目 ${PROJECT_NAME}" \
|
||
bash "${SCRIPT_DIR}/buildArmPrj.sh" -r --sdk "${SDK_VARIANT}" "${PROJECT_NAME}"
|
||
|
||
PKG_KIND=$(get_project_meta "${PROJECT_NAME}" package_kind)
|
||
if [ "${PKG_KIND}" = "service" ]; then
|
||
run_step "打包服务 ${PROJECT_NAME}" \
|
||
bash "${SCRIPT_DIR}/project_pkg_service.sh" --sdk "${SDK_VARIANT}" "${PROJECT_NAME}"
|
||
else
|
||
run_step "打包桌面应用 ${PROJECT_NAME}" \
|
||
bash "${SCRIPT_DIR}/project_pkg_desktop.sh" "${PROJECT_NAME}"
|
||
fi
|
||
|
||
run_step "更新 ${PROJECT_NAME} 发布版本信息" \
|
||
bash "${SCRIPT_DIR}/project_updateversion.sh" "${PROJECT_NAME}"
|
||
|
||
CURRENT_STEP="completed"
|
||
END_TIME=$(date +%s)
|
||
ELAPSED=$((END_TIME - START_TIME))
|
||
echo
|
||
echo "发布流程完成,总耗时 $((ELAPSED / 60)) 分 $((ELAPSED % 60)) 秒"
|