#!/bin/bash # --- Hardware iteration (live Pi at onefinity.local) --- # # Rsyncs the freshly built static UI tree (build/http/) onto the Pi's # bbctrl egg directory and restarts bbctrl. This is much faster than # a full firmware update and is the fastest way to iterate on the V09 # UI changes against real machine state (W axis, jog feedback, etc). # # Defaults: # HOST=onefinity.local # USER=bbmc # PASSWORD=onefinity (used for sudo on the Pi) # # Override: # HOST=10.1.10.55 ./deploy.sh hardware set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" cd "$SCRIPT_DIR" HOST="${HOST:-onefinity.local}" # REMOTE_USER (not USER, which the shell pre-populates with the local # logged-in account). REMOTE_USER="${REMOTE_USER:-bbmc}" PASSWORD="${PASSWORD:-onefinity}" echo "🛠 Building UI bundle..." make build/http/index.html >/dev/null # Discover the on-Pi http path; the bbctrl egg version may change. echo "🔍 Locating bbctrl http/ directory on $HOST..." REMOTE_HTTP_DIR="$(ssh -o ConnectTimeout=5 "${REMOTE_USER}@${HOST}" \ "ls -d /usr/local/lib/python*/dist-packages/bbctrl-*-py*.egg/bbctrl/http 2>/dev/null | head -1")" if [[ -z "$REMOTE_HTTP_DIR" ]]; then echo "❌ Could not find bbctrl http/ directory on $HOST" exit 1 fi echo " $REMOTE_HTTP_DIR" echo "🚚 Rsyncing build/http/ → $HOST:$REMOTE_HTTP_DIR/" # Stage to a tmp dir owned by $REMOTE_USER, then sudo-mv into place. # This avoids needing root over rsync. REMOTE_TMP="/tmp/onefin_ui_$$" ssh -o ConnectTimeout=5 "${REMOTE_USER}@${HOST}" "mkdir -p '${REMOTE_TMP}'" rsync -avz --delete \ --exclude='hostinfo.txt' \ -e "ssh -o ConnectTimeout=5" \ build/http/ "${REMOTE_USER}@${HOST}:${REMOTE_TMP}/" echo "📦 Installing into ${REMOTE_HTTP_DIR}/ (sudo)..." ssh -o ConnectTimeout=5 "${REMOTE_USER}@${HOST}" \ "echo '${PASSWORD}' | sudo -S bash -c ' rsync -a --delete --exclude=hostinfo.txt \"${REMOTE_TMP}/\" \"${REMOTE_HTTP_DIR}/\" \ && rm -rf \"${REMOTE_TMP}\" '" 2>&1 | tail -3 echo "🔁 Restarting bbctrl service..." ssh -o ConnectTimeout=5 "${REMOTE_USER}@${HOST}" \ "echo '${PASSWORD}' | sudo -S systemctl restart bbctrl" 2>&1 | tail -3 echo "" echo "✅ Deployed to http://${HOST}/" echo " Logs: ssh ${REMOTE_USER}@${HOST} 'journalctl -u bbctrl -f'" echo " Open: open -a 'Google Chrome' http://${HOST}/"