|
| 1 | +#!/usr/bin/env bash |
| 2 | +# ============================================================================= |
| 3 | +# sync-versions.sh |
| 4 | +# ============================================================================= |
| 5 | +# Single-source version bump across the monorepo. Updates every manifest that |
| 6 | +# carries a version string so they all match the requested release version. |
| 7 | +# |
| 8 | +# Usage: |
| 9 | +# scripts/sync-versions.sh <new_version> |
| 10 | +# |
| 11 | +# Example: |
| 12 | +# scripts/sync-versions.sh 0.20.0 |
| 13 | +# scripts/sync-versions.sh v0.20.0 # 'v' prefix is stripped |
| 14 | +# |
| 15 | +# What it touches: |
| 16 | +# sdk/runanywhere-commons/VERSION (single line) |
| 17 | +# sdk/runanywhere-commons/VERSIONS (PROJECT_VERSION line) |
| 18 | +# Package.swift (sdkVersion line) |
| 19 | +# sdk/runanywhere-kotlin/gradle.properties (runanywhere.nativeLibVersion) |
| 20 | +# sdk/runanywhere-web/package.json (root version) |
| 21 | +# sdk/runanywhere-web/packages/*/package.json (each package version) |
| 22 | +# sdk/runanywhere-react-native/package.json (root) |
| 23 | +# sdk/runanywhere-react-native/packages/*/package.json (each package) |
| 24 | +# sdk/runanywhere-flutter/packages/*/pubspec.yaml (each version: line) |
| 25 | +# |
| 26 | +# Does NOT touch (intentional): |
| 27 | +# - SwiftPM XCFramework checksums (use sync-checksums.sh after release artifacts exist) |
| 28 | +# - VERSIONS file dependency versions (those track upstream library versions, not our release) |
| 29 | +# ============================================================================= |
| 30 | + |
| 31 | +set -euo pipefail |
| 32 | + |
| 33 | +if [ $# -ne 1 ]; then |
| 34 | + echo "Usage: $0 <new_version>" >&2 |
| 35 | + echo "Example: $0 0.20.0" >&2 |
| 36 | + exit 1 |
| 37 | +fi |
| 38 | + |
| 39 | +# Strip leading 'v' if present |
| 40 | +NEW_VERSION="${1#v}" |
| 41 | + |
| 42 | +# Validate semver-ish format |
| 43 | +if ! [[ "$NEW_VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+([.-][A-Za-z0-9.-]+)?$ ]]; then |
| 44 | + echo "ERROR: '$NEW_VERSION' does not look like a semver version" >&2 |
| 45 | + exit 1 |
| 46 | +fi |
| 47 | + |
| 48 | +REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" |
| 49 | + |
| 50 | +bump_line() { |
| 51 | + # Replaces a line matching $pattern with $replacement, in $file. |
| 52 | + # Cross-platform sed -i (BSD sed on macOS needs '' after -i). |
| 53 | + local file="$1" pattern="$2" replacement="$3" |
| 54 | + if [ ! -f "$file" ]; then |
| 55 | + echo " skip (not found): $file" |
| 56 | + return 0 |
| 57 | + fi |
| 58 | + if [[ "$OSTYPE" == "darwin"* ]]; then |
| 59 | + sed -i '' -E "s|${pattern}|${replacement}|" "$file" |
| 60 | + else |
| 61 | + sed -i -E "s|${pattern}|${replacement}|" "$file" |
| 62 | + fi |
| 63 | + echo " bumped: $file" |
| 64 | +} |
| 65 | + |
| 66 | +bump_json_version() { |
| 67 | + local file="$1" |
| 68 | + bump_line "$file" '"version": "[^"]+"' "\"version\": \"${NEW_VERSION}\"" |
| 69 | +} |
| 70 | + |
| 71 | +bump_pubspec_version() { |
| 72 | + local file="$1" |
| 73 | + bump_line "$file" '^version: .+' "version: ${NEW_VERSION}" |
| 74 | +} |
| 75 | + |
| 76 | +echo ">> Syncing versions to ${NEW_VERSION}" |
| 77 | +echo ">> Repo root: ${REPO_ROOT}" |
| 78 | +echo "" |
| 79 | + |
| 80 | +# 1. commons VERSION + VERSIONS |
| 81 | +echo ">> commons:" |
| 82 | +echo "$NEW_VERSION" > "${REPO_ROOT}/sdk/runanywhere-commons/VERSION" |
| 83 | +echo " bumped: sdk/runanywhere-commons/VERSION" |
| 84 | +bump_line "${REPO_ROOT}/sdk/runanywhere-commons/VERSIONS" \ |
| 85 | + '^PROJECT_VERSION=.*' "PROJECT_VERSION=${NEW_VERSION}" |
| 86 | + |
| 87 | +# 2. Swift Package.swift (root) |
| 88 | +echo "" |
| 89 | +echo ">> Swift SDK:" |
| 90 | +bump_line "${REPO_ROOT}/Package.swift" \ |
| 91 | + 'let sdkVersion = "[^"]+"' "let sdkVersion = \"${NEW_VERSION}\"" |
| 92 | + |
| 93 | +# 3. Kotlin gradle.properties |
| 94 | +echo "" |
| 95 | +echo ">> Kotlin SDK:" |
| 96 | +KOTLIN_PROPS="${REPO_ROOT}/sdk/runanywhere-kotlin/gradle.properties" |
| 97 | +if [ -f "$KOTLIN_PROPS" ]; then |
| 98 | + if grep -q '^runanywhere\.nativeLibVersion=' "$KOTLIN_PROPS"; then |
| 99 | + bump_line "$KOTLIN_PROPS" \ |
| 100 | + '^runanywhere\.nativeLibVersion=.*' "runanywhere.nativeLibVersion=${NEW_VERSION}" |
| 101 | + else |
| 102 | + echo "runanywhere.nativeLibVersion=${NEW_VERSION}" >> "$KOTLIN_PROPS" |
| 103 | + echo " appended: runanywhere.nativeLibVersion to $KOTLIN_PROPS" |
| 104 | + fi |
| 105 | + if grep -q '^SDK_VERSION=' "$KOTLIN_PROPS"; then |
| 106 | + bump_line "$KOTLIN_PROPS" \ |
| 107 | + '^SDK_VERSION=.*' "SDK_VERSION=${NEW_VERSION}" |
| 108 | + fi |
| 109 | +fi |
| 110 | + |
| 111 | +# 4. Web SDK packages |
| 112 | +echo "" |
| 113 | +echo ">> Web SDK:" |
| 114 | +for pkg in \ |
| 115 | + "${REPO_ROOT}/sdk/runanywhere-web/package.json" \ |
| 116 | + "${REPO_ROOT}/sdk/runanywhere-web/packages/core/package.json" \ |
| 117 | + "${REPO_ROOT}/sdk/runanywhere-web/packages/llamacpp/package.json" \ |
| 118 | + "${REPO_ROOT}/sdk/runanywhere-web/packages/onnx/package.json"; do |
| 119 | + bump_json_version "$pkg" |
| 120 | +done |
| 121 | + |
| 122 | +# 5. React Native SDK packages |
| 123 | +echo "" |
| 124 | +echo ">> React Native SDK:" |
| 125 | +for pkg in \ |
| 126 | + "${REPO_ROOT}/sdk/runanywhere-react-native/package.json" \ |
| 127 | + "${REPO_ROOT}/sdk/runanywhere-react-native/packages/core/package.json" \ |
| 128 | + "${REPO_ROOT}/sdk/runanywhere-react-native/packages/llamacpp/package.json" \ |
| 129 | + "${REPO_ROOT}/sdk/runanywhere-react-native/packages/onnx/package.json"; do |
| 130 | + bump_json_version "$pkg" |
| 131 | +done |
| 132 | + |
| 133 | +# 6. Flutter SDK packages |
| 134 | +echo "" |
| 135 | +echo ">> Flutter SDK:" |
| 136 | +for pkg in \ |
| 137 | + "${REPO_ROOT}/sdk/runanywhere-flutter/packages/runanywhere/pubspec.yaml" \ |
| 138 | + "${REPO_ROOT}/sdk/runanywhere-flutter/packages/runanywhere_llamacpp/pubspec.yaml" \ |
| 139 | + "${REPO_ROOT}/sdk/runanywhere-flutter/packages/runanywhere_onnx/pubspec.yaml"; do |
| 140 | + bump_pubspec_version "$pkg" |
| 141 | +done |
| 142 | + |
| 143 | +echo "" |
| 144 | +echo ">> Done. Verify with:" |
| 145 | +echo " git diff -- sdk/ Package.swift" |
| 146 | +echo "" |
| 147 | +echo ">> Then commit, tag, and push:" |
| 148 | +echo " git add -u" |
| 149 | +echo " git commit -m \"chore: release ${NEW_VERSION}\"" |
| 150 | +echo " git tag v${NEW_VERSION}" |
| 151 | +echo " git push origin main v${NEW_VERSION}" |
0 commit comments