Add sync.sh for content sync between local and server
All checks were successful
Deploy to Server / deploy (push) Successful in 22s
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:
6
dev.sh
6
dev.sh
@@ -12,6 +12,12 @@ cleanup() {
|
||||
}
|
||||
trap cleanup EXIT INT TERM
|
||||
|
||||
# Optional: sync content from server
|
||||
if [ "${SYNC:-}" = "1" ] || [ "${1:-}" = "--sync" ]; then
|
||||
echo "Syncing content from server..."
|
||||
./sync.sh pull
|
||||
fi
|
||||
|
||||
# Start API in background
|
||||
echo "Starting RustyCMS API on http://127.0.0.1:3000 ..."
|
||||
cargo run &
|
||||
|
||||
87
sync.sh
Executable file
87
sync.sh
Executable 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
|
||||
Reference in New Issue
Block a user