162 lines
5.0 KiB
Bash
Executable File
162 lines
5.0 KiB
Bash
Executable File
#!/bin/bash
|
|
# Deploy core_room to server
|
|
#
|
|
# Two deployment modes:
|
|
# 1. Docker (default): Full core_room structure + source code
|
|
# 2. Bare metal (--bare-metal): Only soleprint source to systemd services
|
|
#
|
|
# Usage:
|
|
# ./deploy.sh # Deploy Docker setup (default)
|
|
# ./deploy.sh --bare-metal # Deploy bare metal soleprint only
|
|
# ./deploy.sh --dry-run # Preview what would be synced
|
|
# ./deploy.sh --bare-metal --dry-run # Preview bare metal sync
|
|
|
|
set -e
|
|
|
|
# Load configuration
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
source "$SCRIPT_DIR/.env.sync" 2>/dev/null || true
|
|
|
|
SERVER="${DEPLOY_SERVER:-mariano@mcrn.ar}"
|
|
REMOTE_PATH="${DEPLOY_REMOTE_PATH:-~/core_room}"
|
|
BARE_METAL_PATH="${DEPLOY_BARE_METAL_PATH:-~/soleprint}"
|
|
|
|
# Source code paths (defaults if not in .env.sync)
|
|
LOCAL_AMAR_BACKEND="${LOCAL_AMAR_BACKEND:-$HOME/wdir/ama/amar_django_back}"
|
|
LOCAL_AMAR_FRONTEND="${LOCAL_AMAR_FRONTEND:-$HOME/wdir/ama/amar_frontend}"
|
|
LOCAL_SOLEPRINT="${LOCAL_SOLEPRINT:-$HOME/wdir/ama/soleprint}"
|
|
|
|
DRY_RUN=""
|
|
BARE_METAL=""
|
|
|
|
for arg in "$@"; do
|
|
case $arg in
|
|
--dry-run) DRY_RUN="--dry-run" ;;
|
|
--bare-metal) BARE_METAL="true" ;;
|
|
esac
|
|
done
|
|
|
|
cd "$SCRIPT_DIR/.." # Go to root (parent of ctrl/)
|
|
|
|
# Common rsync options (using single .exclude file for everything)
|
|
RSYNC_CMD="rsync -avz --mkpath --delete --progress --exclude-from=ctrl/.exclude"
|
|
|
|
# =============================================================================
|
|
# BARE METAL DEPLOYMENT
|
|
# =============================================================================
|
|
if [ -n "$BARE_METAL" ]; then
|
|
echo "=== Deploying to Bare Metal (Systemd Services) ==="
|
|
echo ""
|
|
|
|
# Only sync soleprint source
|
|
if [ -d "$LOCAL_SOLEPRINT" ] && [ -f "$LOCAL_SOLEPRINT/main.py" ]; then
|
|
echo "Syncing soleprint source to bare metal..."
|
|
$RSYNC_CMD $DRY_RUN \
|
|
"$LOCAL_SOLEPRINT/" \
|
|
"$SERVER:$BARE_METAL_PATH/"
|
|
echo " ✓ Soleprint synced to $BARE_METAL_PATH"
|
|
else
|
|
echo "⚠ Soleprint not found at: $LOCAL_SOLEPRINT"
|
|
exit 1
|
|
fi
|
|
echo ""
|
|
|
|
if [ -n "$DRY_RUN" ]; then
|
|
echo "=== Dry run complete ==="
|
|
exit 0
|
|
fi
|
|
|
|
echo "=== Bare Metal Sync Complete ==="
|
|
echo ""
|
|
echo "Next steps on server (as mariano user):"
|
|
echo " Restart systemd services:"
|
|
echo " sudo systemctl restart soleprint artery album ward"
|
|
echo ""
|
|
echo " Check status:"
|
|
echo " sudo systemctl status soleprint artery album ward"
|
|
echo ""
|
|
exit 0
|
|
fi
|
|
|
|
# =============================================================================
|
|
# DOCKER DEPLOYMENT (DEFAULT)
|
|
# =============================================================================
|
|
echo "=== Deploying to Docker ==="
|
|
echo ""
|
|
|
|
# 1. Sync core_room structure (excluding src directories - they're synced separately)
|
|
echo "1. Syncing core_room structure..."
|
|
$RSYNC_CMD $DRY_RUN \
|
|
--exclude='*/src/' \
|
|
./ \
|
|
"$SERVER:$REMOTE_PATH/"
|
|
echo " [OK] Core room structure synced"
|
|
echo ""
|
|
|
|
# 2. Sync amar backend source
|
|
if [ -d "$LOCAL_AMAR_BACKEND" ]; then
|
|
echo "2. Syncing amar backend source..."
|
|
$RSYNC_CMD $DRY_RUN \
|
|
"$LOCAL_AMAR_BACKEND/" \
|
|
"$SERVER:$REMOTE_PATH/amar/src/back/"
|
|
echo " [OK] Backend synced"
|
|
else
|
|
echo "2. [WARN] Backend source not found at: $LOCAL_AMAR_BACKEND"
|
|
fi
|
|
echo ""
|
|
|
|
# 3. Sync amar frontend source
|
|
if [ -d "$LOCAL_AMAR_FRONTEND" ]; then
|
|
echo "3. Syncing amar frontend source..."
|
|
$RSYNC_CMD $DRY_RUN \
|
|
"$LOCAL_AMAR_FRONTEND/" \
|
|
"$SERVER:$REMOTE_PATH/amar/src/front/"
|
|
echo " [OK] Frontend synced"
|
|
else
|
|
echo "3. [WARN] Frontend source not found at: $LOCAL_AMAR_FRONTEND"
|
|
fi
|
|
echo ""
|
|
|
|
# 4. Sync soleprint source
|
|
if [ -d "$LOCAL_SOLEPRINT" ] && [ -f "$LOCAL_SOLEPRINT/main.py" ]; then
|
|
echo "4. Syncing soleprint source..."
|
|
$RSYNC_CMD $DRY_RUN \
|
|
"$LOCAL_SOLEPRINT/" \
|
|
"$SERVER:$REMOTE_PATH/soleprint/src/"
|
|
echo " [OK] Soleprint synced"
|
|
else
|
|
echo "4. [INFO] Soleprint not found at: $LOCAL_SOLEPRINT"
|
|
fi
|
|
echo ""
|
|
|
|
# 5. Sync tests to ward (silent fail if not available)
|
|
if [ -z "$DRY_RUN" ]; then
|
|
echo "5. Syncing tests to ward..."
|
|
if SILENT_FAIL=true "$SCRIPT_DIR/sync-tests.sh" >/dev/null 2>&1; then
|
|
echo " [OK] Tests synced"
|
|
else
|
|
echo " [SKIP] Tests sync not configured or not available"
|
|
fi
|
|
echo ""
|
|
fi
|
|
|
|
if [ -n "$DRY_RUN" ]; then
|
|
echo "=== Dry run complete ==="
|
|
exit 0
|
|
fi
|
|
|
|
echo "=== Docker Sync Complete ==="
|
|
echo ""
|
|
echo "Next steps on server (as mariano user):"
|
|
echo " 1. Setup (first time only):"
|
|
echo " ssh $SERVER 'cd $REMOTE_PATH/ctrl/server && ./setup.sh'"
|
|
echo ""
|
|
echo " 2. Setup test symlinks (optional, enables test sharing):"
|
|
echo " ssh $SERVER 'cd $REMOTE_PATH/ctrl/server && ./setup-symlinks.sh'"
|
|
echo " Or sync tests without symlinks: ./ctrl/sync-tests.sh"
|
|
echo ""
|
|
echo " 3. Build and start:"
|
|
echo " ssh $SERVER 'cd $REMOTE_PATH/ctrl && ./build.sh && ./start.sh -d'"
|
|
echo ""
|
|
echo "Note: Bare metal services remain running as fallback (*.bare.mcrn.ar)"
|