Files
agent-desktop/scripts/version-bump.sh
T

93 lines
3.8 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# 统一设置桌面端版本号(一个命令完成:写 PEP 440 版本 → 同步 Tauri semver)。
#
# 版本唯一来源:src/pineagents/__version__.pyPEP 440,如 0.0.1b1)。
# 本脚本:
# 1) 规范化版本号:接受 PEP 4400.0.1b1)或 semver0.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 # 预发布(betaPEP 440 写法)
# ./scripts/version-bump.sh 0.0.1-beta.1 # 预发布(betasemver 写法,自动转换)
# ./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 <version>" >&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 4400.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 - <<PY
import re
v = "${NORM_VERSION}"
m = re.match(r"^(\d+)\.(\d+)\.(\d+)(?:(a|b|rc)(\d+))?(?:\.post(\d+))?(?:\.dev(\d+))?$", v)
major, minor, patch, pre, pre_n, post, dev = m.groups()
labels = []
if pre:
labels.append({"a": "alpha", "b": "beta", "rc": "rc"}[pre] + "." + pre_n)
if dev:
labels.append("dev." + dev)
suffix = "-" + ".".join(labels) if labels else ""
post_meta = "+post." + post if post else ""
print(f"{major}.{minor}.{patch}{suffix}{post_meta}")
PY
)
echo " Tauri : ${SEMVER}"
echo "== 完成。打包时 Tauri 自动使用版本 ${SEMVER} =="
echo " 更新源 endpoint(如需覆盖): export TAURI_UPDATER_ENDPOINTS='[\"https://opc.pinesound.cn/desktop-updates/latest.json\"]'"