54 lines
1.4 KiB
Bash
54 lines
1.4 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
# Deploy script for Smart Serow Flutter UI
|
||
|
|
# Pushes build bundle to Pi and optionally restarts service
|
||
|
|
|
||
|
|
set -e
|
||
|
|
|
||
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
|
|
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
|
||
|
|
CONFIG_FILE="$SCRIPT_DIR/deploy_target.json"
|
||
|
|
|
||
|
|
# Parse config
|
||
|
|
if [ ! -f "$CONFIG_FILE" ]; then
|
||
|
|
echo "ERROR: Config file not found: $CONFIG_FILE"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
HOST=$(jq -r '.host' "$CONFIG_FILE")
|
||
|
|
REMOTE_PATH=$(jq -r '.remote_path' "$CONFIG_FILE")
|
||
|
|
SERVICE_NAME=$(jq -r '.service_name' "$CONFIG_FILE")
|
||
|
|
|
||
|
|
BUILD_DIR="$PROJECT_ROOT/pi/ui/build/elinux/arm64/release/bundle"
|
||
|
|
|
||
|
|
echo "=== Smart Serow Deploy ==="
|
||
|
|
echo "Target: $HOST:$REMOTE_PATH"
|
||
|
|
echo "Source: $BUILD_DIR"
|
||
|
|
|
||
|
|
if [ ! -d "$BUILD_DIR" ]; then
|
||
|
|
echo "ERROR: Build directory not found. Run build.sh first."
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Sync build to Pi
|
||
|
|
echo ""
|
||
|
|
echo "Syncing files..."
|
||
|
|
rsync -avz --delete \
|
||
|
|
"$BUILD_DIR/" \
|
||
|
|
"$HOST:$REMOTE_PATH/bundle/"
|
||
|
|
|
||
|
|
# Restart service if requested
|
||
|
|
RESTART="${1:-}"
|
||
|
|
if [ "$RESTART" = "--restart" ] || [ "$RESTART" = "-r" ]; then
|
||
|
|
echo ""
|
||
|
|
echo "Restarting service: $SERVICE_NAME"
|
||
|
|
ssh "$HOST" "sudo systemctl restart $SERVICE_NAME"
|
||
|
|
sleep 2
|
||
|
|
ssh "$HOST" "systemctl status $SERVICE_NAME --no-pager"
|
||
|
|
else
|
||
|
|
echo ""
|
||
|
|
echo "Deploy complete. To restart service, run:"
|
||
|
|
echo " ssh $HOST 'sudo systemctl restart $SERVICE_NAME'"
|
||
|
|
echo ""
|
||
|
|
echo "Or run this script with --restart flag"
|
||
|
|
fi
|