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>
88 lines
2.4 KiB
Bash
Executable File
88 lines
2.4 KiB
Bash
Executable File
#!/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
|