#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" VERSION_FILE="$PROJECT_ROOT/VERSION" if [ $# -ge 1 ]; then echo "$1" > "$VERSION_FILE" fi if [ ! -f "$VERSION_FILE" ]; then echo "ERROR: VERSION file not found at $VERSION_FILE" >&2 exit 1 fi VERSION=$(cat "$VERSION_FILE") # Sanitize: strip leading v/V, trim whitespace VERSION=$(echo "$VERSION" | sed 's/^[vV]//' | tr -d '[:space:]') # Validate semver (X.Y.Z) if ! echo "$VERSION" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+$'; then echo "ERROR: '$VERSION' is not valid semver (expected X.Y.Z)" >&2 exit 1 fi echo "Bumping to version $VERSION" # 1. package.json cd "$PROJECT_ROOT" npm pkg set "version=$VERSION" --json 2>/dev/null || npm pkg set "version=$VERSION" echo " ✓ package.json" # 2. src-tauri/Cargo.toml — update [package] version (first version = line) sed -i '' "s/^version = \".*\"/version = \"$VERSION\"/" "$PROJECT_ROOT/src-tauri/Cargo.toml" echo " ✓ src-tauri/Cargo.toml" # 3. src-tauri/tauri.conf.json node -e " const fs = require('fs'); const path = '$PROJECT_ROOT/src-tauri/tauri.conf.json'; const conf = JSON.parse(fs.readFileSync(path, 'utf8')); conf.version = '$VERSION'; fs.writeFileSync(path, JSON.stringify(conf, null, 2) + '\n'); " echo " ✓ src-tauri/tauri.conf.json" # 4. Sync Cargo.lock cd "$PROJECT_ROOT/src-tauri" cargo generate-lockfile 2>/dev/null echo " ✓ src-tauri/Cargo.lock" echo "" echo "Done — all manifests set to $VERSION"