Files
fold-stack/scripts/report-git-sync.sh
T
2025-05-26 22:53:24 -05:00

116 lines
3.8 KiB
Bash
Executable File

#!/bin/bash
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo "================================="
echo "📊 GIT-SYNC SYNC REPORT"
echo "================================="
echo "📅 Date: $(date)"
echo ""
# Helper function to print section headers
print_section() {
echo "---------------------------------"
echo "📌 $1"
echo "---------------------------------"
}
# Helper function to print success
print_success() {
echo -e "${GREEN}$1${NC}"
}
# Helper function to print warning
print_warning() {
echo -e "${YELLOW}⚠️ $1${NC}"
}
# Helper function to print error
print_error() {
echo -e "${RED}$1${NC}"
}
# 1. Check if Git-Sync Container is Running
print_section "Container Status"
if docker ps --format '{{.Names}}' | grep -q "git_sync_dev"; then
print_success "Git-Sync container (git_sync_dev) is running."
else
print_error "Git-Sync container (git_sync_dev) is not running. Start it with: ./scripts/up-dev.sh"
exit 1
fi
# 2. Get Latest Commit in Local Repository
print_section "Local Repository Latest Commit"
if docker exec git_sync_dev test -d "/repos/local/.git"; then
LATEST_COMMIT=$(docker exec git_sync_dev git -C /repos/local rev-parse HEAD)
LATEST_COMMIT_MSG=$(docker exec git_sync_dev git -C /repos/local log -1 --pretty=%B)
LATEST_COMMIT_TIME=$(docker exec git_sync_dev git -C /repos/local log -1 --pretty=%cd)
echo "Commit: $LATEST_COMMIT"
echo "Message: $LATEST_COMMIT_MSG"
echo "Time: $LATEST_COMMIT_TIME"
else
print_error "Local repository not initialized at /repos/local."
exit 1
fi
# 3. Analyze Logs for Sync Activity
print_section "Latest Sync Activity by Remote"
while IFS='|' read -r remote_name type url enabled; do
if [ "$enabled" -eq 1 ]; then
echo "Remote: $remote_name ($type, $url)"
# Search logs for the last sync to this remote
LAST_SYNC=$(docker logs git_sync_dev 2>&1 | grep "Successfully synced.*$remote_name" | tail -n 1)
if [ -n "$LAST_SYNC" ]; then
# Extract timestamp and message
TIMESTAMP=$(echo "$LAST_SYNC" | grep -oE "^\[[^]]+\]" | head -n 1)
if [ "$type" = "git" ] || [ "$type" = "radicle" ]; then
# For Git and Radicle, assume the latest commit was synced
echo "Last Synced Commit: $LATEST_COMMIT"
echo "Commit Message: $LATEST_COMMIT_MSG"
else
# For Rclone (IA, Web3), look for the bundle file name in logs
BUNDLE_FILE=$(echo "$LAST_SYNC" | grep -oE "repo-[0-9]+\.bundle" | head -n 1)
if [ -n "$BUNDLE_FILE" ]; then
echo "Last Synced Bundle: $BUNDLE_FILE"
else
echo "Last Synced Bundle: Unknown"
fi
fi
echo "Timestamp: $TIMESTAMP"
print_success "Status: Successfully synced"
else
print_warning "Status: No successful sync found in logs for $remote_name"
fi
echo ""
else
print_warning "Skipping disabled remote: $remote_name"
echo ""
fi
done < config/git-sync/remotes.conf
# 4. Check for Failed Syncs
print_section "Failed Syncs (Last 10 Errors)"
FAILED_SYNCS=$(docker logs git_sync_dev 2>&1 | grep "\[ERROR\].*Failed to sync" | tail -n 10)
if [ -n "$FAILED_SYNCS" ]; then
echo "$FAILED_SYNCS"
else
print_success "No failed syncs found in recent logs."
fi
# 5. Summary
print_section "Summary"
echo "Latest Local Commit: $LATEST_COMMIT"
echo "Check the above sections for sync status per remote."
echo "If a remote has not been synced recently, check logs or run diagnostics:"
echo " ./scripts/diagnose-git-sync.sh"
echo ""
echo "================================="
echo "✅ Report Generation Completed"
echo "================================="