79 lines
3.2 KiB
Bash
Executable File
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}" |