#!/usr/bin/env bash # 统一设置桌面端版本号(一个命令完成:写 PEP 440 版本 → 同步 Tauri semver)。 # # 版本唯一来源:src/pineagents/__version__.py(PEP 440,如 0.0.1b1)。 # 本脚本: # 1) 规范化版本号:接受 PEP 440(0.0.1b1)或 semver(0.0.1-beta.1)两种写法 # 2) 写入 src/pineagents/__version__.py # 3) 运行 sync_tauri_version.mjs,生成 gitignored 的 console/src-tauri/tauri.version.conf.json # (Tauri 打包时通过 --config 读取,产出产物、更新 manifest 均以此版本为准) # # 用法: # ./scripts/version-bump.sh 0.0.1b1 # 预发布(beta,PEP 440 写法) # ./scripts/version-bump.sh 0.0.1-beta.1 # 预发布(beta,semver 写法,自动转换) # ./scripts/version-bump.sh 0.0.1 # 正式版 # ./scripts/version-bump.sh 0.0.1-rc.1 # RC # ./scripts/version-bump.sh 0.0.1.post1 # 构建号 # # 支持格式(PEP 440 子集): # N.N.N | N.N.N(a|b|rc)N | N.N.N.postN | N.N.N.devN(可组合,如 0.0.1b1.post2) set -euo pipefail REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)" VERSION_FILE="${REPO_ROOT}/src/pineagents/__version__.py" SYNC_SCRIPT="${REPO_ROOT}/scripts/pack-tauri/sync_tauri_version.mjs" NEW_VERSION="${1:-}" if [[ -z "${NEW_VERSION}" ]]; then echo "用法: $0 " >&2 echo "示例: $0 0.0.1b1 → Tauri semver 0.0.1-beta.1" >&2 echo " $0 0.0.1-beta.1 → 同上(semver 写法自动转 PEP 440)" >&2 echo " $0 0.0.1 → 正式版" >&2 exit 1 fi # 版本号规范化:接受 PEP 440(0.0.1b1 / 0.0.1rc1 / 0.0.1.post1 / 0.0.1.dev2) # 或 semver 预发布写法(0.0.1-beta.1 / 0.0.1-alpha.1 / 0.0.1-rc.1 / 0.0.1-dev.1), # 统一转为 PEP 440 后写入 __version__.py(与 sync_tauri_version.mjs 的 toSemver 支持集合一致)。 NORM_VERSION=$(python3 - "${NEW_VERSION}" <<'PY' import re, sys v = sys.argv[1] if re.match(r"^[0-9]+\.[0-9]+\.[0-9]+((a|b|rc)[0-9]+)?(\.post[0-9]+)?(\.dev[0-9]+)?$", v): print(v) sys.exit(0) m = re.match(r"^([0-9]+\.[0-9]+\.[0-9]+)-(alpha|beta|rc|dev)\.([0-9]+)$", v) if m: base, label, num = m.groups() mapping = {"alpha": "a", "beta": "b", "rc": "rc", "dev": "dev"} print(f"{base}{mapping[label]}{num}" if label != "dev" else f"{base}.dev{num}") sys.exit(0) print(f"版本号不合法: {v}", file=sys.stderr) sys.exit(1) PY ) || exit 1 echo "== 设置版本号 ==" echo " PEP 440 : ${NORM_VERSION} (输入: ${NEW_VERSION})" # 1) 写入 __version__.py(保留文件头注释,仅替换 __version__ 行) if ! grep -q '^__version__[[:space:]]*=' "${VERSION_FILE}"; then echo "ERROR: ${VERSION_FILE} 缺少 __version__ 行" >&2 exit 1 fi sed -i.bak "s/^__version__[[:space:]]*=.*/__version__ = \"${NORM_VERSION}\"/" "${VERSION_FILE}" rm -f "${VERSION_FILE}.bak" echo " 已写入 ${VERSION_FILE}" # 2) 同步 Tauri semver(写入 gitignored 的 tauri.version.conf.json) if [[ ! -f "${SYNC_SCRIPT}" ]]; then echo "ERROR: 未找到 ${SYNC_SCRIPT}" >&2 exit 1 fi node "${SYNC_SCRIPT}" # 3) 回显最终结果 SEMVER=$(python3 - <