#!/bin/bash # Strata Framework - Upgrade Script # Usage: ./scripts/upgrade.sh [options] # --check Only check for updates, don't install # --force Force reinstall even if up-to-date # --help Show this help message set -e # Colors RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' CYAN='\033[0;36m' NC='\033[0m' BOLD='\033[1m' # Directories STRATA_HOME="${STRATA_HOME:-$HOME/.strata}" STRATA_CONFIG="$STRATA_HOME/config" # Script directory SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_DIR="$(dirname "$SCRIPT_DIR")" # Options CHECK_ONLY=false FORCE=false # Parse arguments while [[ $# -gt 0 ]]; do case $1 in --check) CHECK_ONLY=true shift ;; --force|-f) FORCE=true shift ;; --help|-h) echo "Strata Framework - Upgrade Script" echo "" echo "Usage: ./scripts/upgrade.sh [options]" echo "" echo "Options:" echo " --check Only check for updates" echo " --force Force reinstall even if up-to-date" echo " --help Show this help message" exit 0 ;; *) echo -e "${RED}Unknown option: $1${NC}" exit 1 ;; esac done print_step() { echo -e "${BLUE}▶${NC} $1" } print_success() { echo -e "${GREEN}✓${NC} $1" } print_warning() { echo -e "${YELLOW}⚠${NC} $1" } print_error() { echo -e "${RED}✗${NC} $1" } # Get current installed version get_installed_version() { if [ -f "$STRATA_CONFIG/strata.json" ]; then grep '"version"' "$STRATA_CONFIG/strata.json" | cut -d'"' -f4 elif [ -x "$STRATA_HOME/bin/strata" ]; then "$STRATA_HOME/bin/strata" version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1 || echo "unknown" else echo "not installed" fi } # Get repo version from package.json get_repo_version() { if [ -f "$REPO_DIR/package.json" ]; then grep '"version"' "$REPO_DIR/package.json" | head -1 | cut -d'"' -f4 else echo "unknown" fi } # Compare versions (returns 0 if $1 < $2) version_lt() { [ "$(printf '%s\n' "$1" "$2" | sort -V | head -n1)" = "$1" ] && [ "$1" != "$2" ] } echo "" echo -e "${CYAN}╔═══════════════════════════════════════════════════════╗${NC}" echo -e "${CYAN}║ Strata Framework - Upgrade Check ║${NC}" echo -e "${CYAN}╚═══════════════════════════════════════════════════════╝${NC}" echo "" # Check versions print_step "Checking versions..." INSTALLED_VERSION=$(get_installed_version) REPO_VERSION=$(get_repo_version) echo " Installed: $INSTALLED_VERSION" echo " Available: $REPO_VERSION" echo "" # Determine if upgrade is needed if [ "$INSTALLED_VERSION" = "not installed" ]; then print_warning "Strata is not installed" echo "" echo " Run the installer:" echo -e " ${CYAN}./scripts/install.sh${NC}" exit 0 fi NEEDS_UPGRADE=false if [ "$INSTALLED_VERSION" = "unknown" ] || [ "$REPO_VERSION" = "unknown" ]; then print_warning "Unable to determine version comparison" NEEDS_UPGRADE=true elif version_lt "$INSTALLED_VERSION" "$REPO_VERSION"; then NEEDS_UPGRADE=true fi if [ "$NEEDS_UPGRADE" = false ] && [ "$FORCE" = false ]; then print_success "Strata is up-to-date!" exit 0 fi if [ "$NEEDS_UPGRADE" = true ]; then echo -e "${YELLOW}Update available: $INSTALLED_VERSION → $REPO_VERSION${NC}" else echo "Forcing reinstall of version $REPO_VERSION" fi echo "" if [ "$CHECK_ONLY" = true ]; then echo "Run without --check to install the update." exit 0 fi # Perform upgrade print_step "Pulling latest changes..." cd "$REPO_DIR" if [ -d ".git" ]; then git pull --rebase 2>/dev/null || print_warning "Could not pull (not a git repo or no remote)" fi print_step "Rebuilding compiler..." cd "$REPO_DIR/compiler" go mod download go build -ldflags="-s -w" -o "$REPO_DIR/bin/strata" ./cmd/strata cp "$REPO_DIR/bin/strata" "$STRATA_HOME/bin/strata" chmod +x "$STRATA_HOME/bin/strata" print_step "Updating npm dependencies..." cd "$REPO_DIR" npm install --silent print_step "Updating configuration..." # Update version in config if [ -f "$STRATA_CONFIG/strata.json" ]; then if [[ "$OSTYPE" == "darwin"* ]]; then sed -i '' "s/\"version\": \".*\"/\"version\": \"$REPO_VERSION\"/" "$STRATA_CONFIG/strata.json" else sed -i "s/\"version\": \".*\"/\"version\": \"$REPO_VERSION\"/" "$STRATA_CONFIG/strata.json" fi fi echo "" echo -e "${GREEN}════════════════════════════════════════════════════════${NC}" echo -e "${GREEN} Upgrade Complete! ${NC}" echo -e "${GREEN}════════════════════════════════════════════════════════${NC}" echo "" echo " Strata has been upgraded to version $REPO_VERSION" echo "" echo " Run 'strata version' to verify." echo ""