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