#!/usr/bin/env bash # upgrade.sh — Upgrade existing Automaton projects to support .state files and status.py # Usage: ./upgrade.sh [project-path] set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" STATUS_SCRIPT="$SCRIPT_DIR/status.py" if [ -n "${1:-}" ]; then PROJECT_DIR="$(cd "$1" && pwd)" else PROJECT_DIR="$(pwd)" fi TASKS_DIR="$PROJECT_DIR/.automaton/tasks" FRAMEWORK_DIR="$HOME/.automaton" echo "=== Automaton Upgrade ===" echo "Project: $PROJECT_DIR" echo "" # Bootstrap .state files for tasks using status.py --upgrade if [ -f "$STATUS_SCRIPT" ]; then echo "Step 1: Bootstrapping .state files for existing tasks..." python3 "$STATUS_SCRIPT" --upgrade --project "$PROJECT_DIR" || true echo "" fi # Add version marker to config.md if not present CONFIG_FILE="$FRAMEWORK_DIR/config.md" if [ -f "$CONFIG_FILE" ]; then if ! grep -q "Framework Version" "$CONFIG_FILE"; then echo "" >> "$CONFIG_FILE" echo "## Framework Version" >> "$CONFIG_FILE" echo "- **Version**: 2.0" >> "$CONFIG_FILE" echo "- **State enforcement**: enabled (.state file + status.py)" >> "$CONFIG_FILE" echo "" >> "$CONFIG_FILE" echo "Added version marker to $CONFIG_FILE" else echo "Version marker already present in $CONFIG_FILE" fi else echo "WARNING: $CONFIG_FILE not found. Creating with version marker." cat > "$CONFIG_FILE" << 'EOF' # Framework Configuration ## Framework Version - **Version**: 2.0 - **State enforcement**: enabled (.state file + status.py) EOF fi echo "" echo "=== Upgrade Complete ===" echo "Run 'python ~/.automaton/scripts/status.py --list --project $PROJECT_DIR' to verify task states." echo "Run 'python ~/.automaton/scripts/status.py --audit --project $PROJECT_DIR' to check for violations." echo "" # Install pre-commit hook if project uses git GIT_DIR="$PROJECT_DIR/.git" if [ -d "$GIT_DIR/hooks" ]; then HOOK_TARGET="$GIT_DIR/hooks/pre-commit" HOOK_SOURCE="$FRAMEWORK_DIR/scripts/git-hooks/pre-commit" if [ -f "$HOOK_TARGET" ]; then if [ -L "$HOOK_TARGET" ]; then EXISTING_TARGET="$(readlink "$HOOK_TARGET")" if [ "$EXISTING_TARGET" = "$HOOK_SOURCE" ]; then echo "Pre-commit hook already linked to automaton." else echo "WARNING: pre-commit hook already exists (symlink to: $EXISTING_TARGET)" echo " To use automaton's hook, run: ln -sf $HOOK_SOURCE $HOOK_TARGET" fi else echo "WARNING: pre-commit hook already exists at $HOOK_TARGET" echo " To replace it with automaton's hook, run: ln -sf $HOOK_SOURCE $HOOK_TARGET" fi else ln -sf "$HOOK_SOURCE" "$HOOK_TARGET" echo "Installed pre-commit hook at $HOOK_TARGET" fi else echo "NOTE: No .git/hooks/ directory found. Install the hook manually if this project uses git:" echo " ln -sf $FRAMEWORK_DIR/scripts/git-hooks/pre-commit \$PROJECT_DIR/.git/hooks/pre-commit" fi