#!/bin/bash set -Eeuo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 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 ./project_release.sh --list 流程: 1. buildArmPrj.sh -r 2. project_pkg_desktop.sh 或 project_pkg_service.sh 3. project_updateversion.sh 支持发布的项目: EOF list_projects | sed 's/^/ - /' } run_step() { local title=$1; shift CURRENT_STEP="${title}" echo echo "==> ${title}" "$@" echo "${title} 成功" } if [ $# -eq 1 ] && [ "$1" = "--list" ]; then list_projects; exit 0 fi if [ $# -eq 1 ] && { [ "$1" = "-h" ] || [ "$1" = "--help" ]; }; then show_help; exit 0 fi if [ $# -ne 1 ]; then show_help; exit 1 fi PROJECT_NAME=$1 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 "${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" "${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)) 秒"