GrabBag/GrabBagPrj/project_release.sh

109 lines
2.7 KiB
Bash
Raw Normal View History

#!/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
流程:
2026-08-04 14:23:07 +08:00
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)) 秒"