Files
XStats/Scripts/version.sh
T

35 lines
1.5 KiB
Bash
Executable File

#!/bin/bash
# 版本号:营销版本 X.Y.Z 只在发布时改,构建号四位数字每次本地构建加一,显示为 “0.2.0 (0003)”。
#
# Scripts/version.sh # 显示当前版本
# Scripts/version.sh build # 构建号加一(make build 会自动调用)
# Scripts/version.sh patch # 小改发布:0.2.0 → 0.2.1
# Scripts/version.sh minor # 大改发布:0.2.1 → 0.3.0
# Scripts/version.sh major # 1.0.0 这类里程碑
#
# 构建号跨版本持续递增、不归零,保证每个安装包的 CFBundleVersion 都比之前的大。
set -euo pipefail
cd "$(dirname "$0")/.."
FILE=project.yml
version="$(sed -nE 's/^ *MARKETING_VERSION: *"?([0-9.]+)"?.*/\1/p' "$FILE" | head -1)"
build="$(sed -nE 's/^ *CURRENT_PROJECT_VERSION: *"?([0-9]+)"?.*/\1/p' "$FILE" | head -1)"
set_value() {
sed -i '' -E "s/^( *$1: *)\"?[0-9.]+\"?/\1\"$2\"/" "$FILE"
}
IFS=. read -r major minor patch <<< "$version"
case "${1:-show}" in
show) ;;
build)
build=$(printf "%04d" $((10#$build + 1)))
set_value CURRENT_PROJECT_VERSION "$build"
;;
patch) version="$major.$minor.$((patch + 1))"; set_value MARKETING_VERSION "$version" ;;
minor) version="$major.$((minor + 1)).0"; set_value MARKETING_VERSION "$version" ;;
major) version="$((major + 1)).0.0"; set_value MARKETING_VERSION "$version" ;;
*) echo "用法:Scripts/version.sh [show|build|patch|minor|major]" >&2; exit 1 ;;
esac
echo "$version ($(printf "%04d" $((10#$build))))"