Files
openclaw/scripts/consolidate-workspace.sh
T

107 lines
3.7 KiB
Bash
Executable File

#!/bin/bash
# Workspace Consolidation — Merges fragmented workspaces into single shared codebase
# Usage: ./scripts/consolidate-workspace.sh [--force]
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
WORKSPACE_ROOT="$(dirname "$SCRIPT_DIR")"
SSH_KEY="$HOME/.ssh/triad_key"
echo "🦞 === Workspace Consolidation ==="
echo ""
# Check for fragmented workspace on TM-1
if [ -d /root/openclaw/.git ]; then
echo "⚠️ Found /root/openclaw (fragmented workspace)"
ROOT_HASH=$(git -C /root/openclaw rev-parse HEAD 2>/dev/null || echo "error")
WORKSPACE_HASH=$(git -C "$WORKSPACE_ROOT" rev-parse HEAD 2>/dev/null || echo "error")
if [ "$ROOT_HASH" != "error" ] && [ "$WORKSPACE_HASH" != "error" ] && [ "$ROOT_HASH" != "$WORKSPACE_HASH" ]; then
echo "🔀 Unique work detected in /root/openclaw — migrating..."
cd /root/openclaw
# Check if Heretek remote exists
if ! git remote get-url heretek &>/dev/null; then
git remote add heretek https://github.com/Heretek-AI/openclaw.git
fi
git fetch heretek
git push heretek main 2>&1 || echo "⚠️ Push may require auth"
echo "✅ Pushed to Heretek-AI/openclaw"
fi
# Remove fragmented workspace
rm -rf /root/openclaw
echo "✅ Removed /root/openclaw"
else
echo "✅ No /root/openclaw (clean)"
fi
# Ensure canonical workspace exists
if [ ! -d "$WORKSPACE_ROOT/.git" ]; then
echo "📦 Cloning canonical workspace..."
rm -rf "$WORKSPACE_ROOT"
git clone https://github.com/Heretek-AI/openclaw.git "$WORKSPACE_ROOT"
fi
# Sync TM-1
cd "$WORKSPACE_ROOT"
git fetch origin
git reset --hard origin/main
echo "✅ TM-1 synced: $(git rev-parse HEAD)"
# Migrate TM-2, TM-3, TM-4
for NODE_IP in 192.168.31.209 192.168.31.85 192.168.31.205; do
NODE_NAME=$(ssh -i "$SSH_KEY" -o StrictHostKeyChecking=no root@$NODE_IP "hostname" 2>/dev/null || echo "unknown")
echo ""
echo "=== $NODE_NAME ($NODE_IP) ==="
# Check for fragmented workspace
if ssh -i "$SSH_KEY" root@$NODE_IP "[ -d /root/openclaw/.git ]" 2>/dev/null; then
echo "⚠️ Found /root/openclaw on $NODE_NAME"
ROOT_HASH=$(ssh -i "$SSH_KEY" root@$NODE_IP "git -C /root/openclaw rev-parse HEAD" 2>/dev/null || echo "error")
WORKSPACE_HASH=$(ssh -i "$SSH_KEY" root@$NODE_IP "git -C /home/openclaw/.openclaw/workspace rev-parse HEAD" 2>/dev/null || echo "error")
if [ "$ROOT_HASH" != "error" ] && [ "$WORKSPACE_HASH" != "error" ] && [ "$ROOT_HASH" != "$WORKSPACE_HASH" ]; then
echo "🔀 Unique work detected — pushing to Heretek..."
ssh -i "$SSH_KEY" root@$NODE_IP << 'MIGRATEOF'
cd /root/openclaw
git remote add heretek https://github.com/Heretek-AI/openclaw.git 2>/dev/null || true
git fetch heretek
git push heretek main 2>&1 || echo "Push may require auth"
MIGRATEOF
echo "✅ Pushed unique work"
fi
# Remove fragmented workspace
ssh -i "$SSH_KEY" root@$NODE_IP "rm -rf /root/openclaw"
echo "✅ Removed /root/openclaw"
else
echo "✅ No /root/openclaw on $NODE_NAME"
fi
# Sync canonical workspace
ssh -i "$SSH_KEY" root@$NODE_IP << 'SYNCOF'
cd /home/openclaw/.openclaw/workspace
git fetch origin
git reset --hard origin/main
echo "✅ Synced: $(git rev-parse HEAD)"
SYNCOF
echo "$NODE_NAME synced"
done
# Log to SQLite
sqlite3 "$WORKSPACE_ROOT/.aura/consensus.db" \
"INSERT INTO workspace_syncs (timestamp, node_id, workspace_path, git_hash, remote_url, branch, sync_status)
VALUES (datetime('now'), 'all', '/home/openclaw/.openclaw/workspace', '$(git rev-parse HEAD)', 'origin', 'main', 'consolidated')" 2>/dev/null || true
echo ""
echo "🦞 Workspace consolidation complete"
echo " All nodes: $(git rev-parse HEAD)"
echo " Remote: $(git remote get-url origin)"
echo " Branch: $(git branch --show-current)"