GrabBag/GrabBagPrj/project_updateversion.sh

107 lines
2.5 KiB
Bash
Raw Permalink Normal View History

#!/bin/bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
APP_LIST_FILE="${SCRIPT_DIR}/AppList.md"
source "${SCRIPT_DIR}/project_registry.sh"
show_help() {
cat <<'EOF'
用法:
./project_updateversion.sh <ProjectName>
支持更新版本的项目:
EOF
list_projects | sed 's/^/ - /'
}
if [ $# -eq 1 ] && { [ "$1" = "-h" ] || [ "$1" = "--help" ]; }; then
show_help
exit 0
fi
if [ $# -ne 1 ]; then
show_help
exit 1
fi
if ! load_version_project_meta "$1"; then
echo "未知项目: $1" >&2
echo >&2
show_help >&2
exit 1
fi
VERSION_FILE="${REPO_DIR}/${VERSION_FILE_REL}"
if [ ! -f "${VERSION_FILE}" ]; then
echo "缺少版本文件: ${VERSION_FILE}" >&2
exit 1
fi
if [ ! -f "${APP_LIST_FILE}" ]; then
echo "缺少应用列表文件: ${APP_LIST_FILE}" >&2
exit 1
fi
read_project_version "${VERSION_FILE}" "${VERSION_MACRO}"
FULL_VERSION="${PROJECT_VERSION}.${PROJECT_BUILD}"
echo "项目: ${VERSION_PROJECT}"
echo "发布名称: ${PUBLISH_NAME}"
echo "版本文件: ${VERSION_FILE}"
echo "完整版本号: ${FULL_VERSION}"
if ! grep -qE "\\|[[:space:]]*${PUBLISH_NAME}[[:space:]]*\\|" "${APP_LIST_FILE}"; then
2026-06-26 17:49:32 +08:00
echo "警告: AppList.md 中未找到 ${PUBLISH_NAME},自动添加..."
# 获取当前最大序号
max_num=$(awk -F'|' 'NF >= 6 && $2 ~ /^[[:space:]]*[0-9]+[[:space:]]*$/ {
num = $2
gsub(/^[[:space:]]+|[[:space:]]+$/, "", num)
if (num > max) max = num
} END { print max+0 }' "${APP_LIST_FILE}")
next_num=$((max_num + 1))
# 获取项目描述(如果有)
project_desc=$(get_project_meta "${VERSION_PROJECT}" package_description)
if [ -z "$project_desc" ]; then
project_desc="${VERSION_PROJECT}"
fi
# 在表格末尾(最后一个空行之前)添加新行
sed -i "/^$/i | ${next_num} | ${project_desc} | ${PUBLISH_NAME} | ${FULL_VERSION} |" "${APP_LIST_FILE}"
echo "已添加 ${PUBLISH_NAME} 到 AppList.md (序号: ${next_num})"
fi
tmp_file="$(mktemp)"
trap 'rm -f "${tmp_file}"' EXIT
awk -F'|' -v publish="${PUBLISH_NAME}" -v version="${FULL_VERSION}" '
BEGIN {
OFS = "|"
}
{
if (NF >= 6) {
app_name = $4
gsub(/^[[:space:]]+|[[:space:]]+$/, "", app_name)
if (app_name == publish) {
$5 = " " version " "
}
}
print
}
' "${APP_LIST_FILE}" > "${tmp_file}"
mv "${tmp_file}" "${APP_LIST_FILE}"
trap - EXIT
echo "已将 ${PUBLISH_NAME} 更新为 ${FULL_VERSION}"