mirror of
https://github.com/Heretek-AI/openclaw.git
synced 2026-07-19 20:23:34 -04:00
107 lines
3.7 KiB
Bash
Executable File
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)"
|