GrabBag/GrabBagPrj/project_release.sh

109 lines
2.7 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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)) 秒"