#!/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 支持更新版本的项目: 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 echo "错误: AppList.md 中未找到 ${PUBLISH_NAME}" >&2 exit 1 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}"