Add sync.sh for content sync between local and server
All checks were successful
Deploy to Server / deploy (push) Successful in 22s

- pull: server → local
- push: local → server
- watch: auto-push on file changes via fswatch
- status: dry-run diff
- dev.sh: ./dev.sh --sync pulls before starting

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Peter Meier
2026-03-15 22:50:13 +01:00
parent 261c2fe338
commit 1db203841d
2 changed files with 93 additions and 0 deletions

87
sync.sh Executable file
View File

@@ -0,0 +1,87 @@
#!/usr/bin/env bash
# Sync content between local and server
#
# Usage:
# ./sync.sh pull # Server → Local (before starting dev)
# ./sync.sh push # Local → Server (after local edits)
# ./sync.sh watch # Auto-push on local file changes (requires fswatch)
# ./sync.sh status # Show diff between local and server
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"
SERVER="root@167.86.74.105"
SSH_KEY="$HOME/.ssh/contabo_rsa"
REMOTE_CONTENT="/opt/rustycms/content"
LOCAL_CONTENT="./content"
SSH_OPTS="-o StrictHostKeyChecking=no -i $SSH_KEY"
RSYNC_OPTS="-avz --delete -e \"ssh $SSH_OPTS\""
# Colors
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
pull() {
echo -e "${BLUE}← Pulling content from server...${NC}"
rsync -avz --delete \
-e "ssh $SSH_OPTS" \
"$SERVER:$REMOTE_CONTENT/" \
"$LOCAL_CONTENT/"
echo -e "${GREEN}✓ Pull complete${NC}"
}
push() {
echo -e "${BLUE}→ Pushing content to server...${NC}"
rsync -avz --delete \
-e "ssh $SSH_OPTS" \
"$LOCAL_CONTENT/" \
"$SERVER:$REMOTE_CONTENT/"
echo -e "${GREEN}✓ Push complete${NC}"
}
status() {
echo -e "${BLUE}~ Comparing local ↔ server...${NC}"
rsync -avzn --delete \
-e "ssh $SSH_OPTS" \
"$LOCAL_CONTENT/" \
"$SERVER:$REMOTE_CONTENT/" \
| grep -v "^sending\|^sent\|^total\|^$" || true
echo -e "${YELLOW}(dry-run, no changes made)${NC}"
}
watch() {
if ! command -v fswatch &>/dev/null; then
echo "fswatch not found. Install with: brew install fswatch"
exit 1
fi
echo -e "${BLUE}👁 Watching ./content for changes (Ctrl+C to stop)...${NC}"
fswatch -o "$LOCAL_CONTENT" | while read -r _; do
echo -e "${BLUE}→ Change detected, pushing...${NC}"
rsync -az --delete \
-e "ssh $SSH_OPTS" \
"$LOCAL_CONTENT/" \
"$SERVER:$REMOTE_CONTENT/" \
&& echo -e "${GREEN}✓ Pushed$(date +' %H:%M:%S')${NC}"
done
}
case "${1:-}" in
pull) pull ;;
push) push ;;
status) status ;;
watch) watch ;;
*)
echo "Usage: ./sync.sh [pull|push|status|watch]"
echo ""
echo " pull Server → Local (fetch latest content before dev)"
echo " push Local → Server (upload local edits)"
echo " status Show what would change on push (dry-run)"
echo " watch Auto-push on local file changes (requires fswatch)"
exit 1
;;
esac