Files
chanora/tools/sync-version.sh
T

79 lines
3.2 KiB
Bash
Executable File

#!/usr/bin/env bash
# sync-version.sh — Synchronize version across the project.
#
# Source of truth: apps/chanora_flutter/pubspec.yaml
# Format: X.Y.Z-pre.N+BUILD (e.g., 0.2.0-beta.1+75)
#
# Derived files:
# Cargo.toml (workspace version)
# ios/Runner.xcodeproj/project.pbxproj (MARKETING_VERSION)
# macos/Runner.xcodeproj/project.pbxproj (MARKETING_VERSION) — if exists
# windows/Runner/Runner.rc (VERSION_AS_STRING)
# tools/build-ios.sh (VERSION)
# tools/build-windows.ps1 ($Version)
#
# Usage:
# ./tools/sync-version.sh # read from pubspec, write to all
# ./tools/sync-version.sh 0.3.0-rc.1+80 # set version, then sync
set -euo pipefail
cd "$(dirname "$0")/.."
# --- Parse or set version ---
if [[ $# -gt 0 ]]; then
NEW_VERSION="$1"
# Update pubspec.yaml
sed -i '' "s/^version: .*/version: ${NEW_VERSION}/" apps/chanora_flutter/pubspec.yaml
echo "Set pubspec.yaml version to ${NEW_VERSION}"
else
NEW_VERSION=$(grep '^version:' apps/chanora_flutter/pubspec.yaml | sed 's/version: //')
echo "Using pubspec.yaml version: ${NEW_VERSION}"
fi
# --- Split version into components ---
# pubspec format: X.Y.Z-tag+BUILD (Flutter uses + for build number)
FULL="${NEW_VERSION}"
BASE=$(echo "${FULL}" | sed 's/+.*//') # 0.2.0-beta.1
MAJOR_MINOR_PATCH=$(echo "${BASE}" | sed 's/-.*//') # 0.2.0
MARKETING=$(echo "${MAJOR_MINOR_PATCH}" | cut -d. -f1,2) # 0.2
BUILD=$(echo "${FULL}" | sed 's/.*+//') # 75
VVERSION="v${BASE}" # v0.2.0-beta.1
echo " Full: ${FULL}"
echo " Base: ${BASE}"
echo " Major.Minor.Patch: ${MAJOR_MINOR_PATCH}"
echo " Marketing: ${MARKETING}"
echo " Build: ${BUILD}"
echo " V-prefixed: ${VVERSION}"
# --- Cargo.toml (workspace version = base without build number) ---
sed -i '' "s/^version = \".*\"/version = \"${BASE}\"/" Cargo.toml
echo "Updated Cargo.toml → ${BASE}"
# --- iOS Xcode project (MARKETING_VERSION) ---
sed -i '' "s/MARKETING_VERSION = .*;/MARKETING_VERSION = ${MARKETING};/g" \
apps/chanora_flutter/ios/Runner.xcodeproj/project.pbxproj
echo "Updated ios/Runner.xcodeproj → MARKETING_VERSION = ${MARKETING}"
# --- macOS Xcode project (if exists) ---
if [[ -f apps/chanora_flutter/macos/Runner.xcodeproj/project.pbxproj ]]; then
sed -i '' "s/MARKETING_VERSION = .*;/MARKETING_VERSION = ${MARKETING};/g" \
apps/chanora_flutter/macos/Runner.xcodeproj/project.pbxproj
echo "Updated macos/Runner.xcodeproj → MARKETING_VERSION = ${MARKETING}"
fi
# --- Windows Runner.rc ---
sed -i '' "s/VERSION_AS_STRING \".*\"/VERSION_AS_STRING \"${MAJOR_MINOR_PATCH}\"/g" \
apps/chanora_flutter/windows/Runner/Runner.rc
echo "Updated windows/Runner/Runner.rc → ${MAJOR_MINOR_PATCH}"
# --- tools/build-ios.sh ---
sed -i '' "s/^VERSION=\".*\"/VERSION=\"${VVERSION}\"/" tools/build-ios.sh
echo "Updated tools/build-ios.sh → ${VVERSION}"
# --- tools/build-windows.ps1 ---
sed -i '' "s/\$Version = '.*'/\$Version = '${VVERSION}'/" tools/build-windows.ps1
echo "Updated tools/build-windows.ps1 → ${VVERSION}"
echo ""
echo "All versions synced to ${FULL}"