GrabBag/GrabBagPrj/project_release.sh

91 lines
2.1 KiB
Bash

#!/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 <ProjectName>
./project_release.sh --list
流程:
1. buildArmPrj.sh -r <ProjectName>
2. project_pkg_desktop.sh 或 project_pkg_service.sh <ProjectName>
3. project_updateversion.sh <ProjectName>
支持发布的项目:
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))"