#!/usr/bin/env bash #MISE description="Build and deploy frontend + backend to Uberspace" set -euo pipefail UBERSPACE_HOST="${UBERSPACE_HOST:-serve}" REMOTE_HTML_DIR="~/www/html/whattoplay" REMOTE_SERVICE_DIR="~/services/whattoplay" SERVICE_NAME="whattoplay" PORT=3001 echo "==> building frontend..." bun run build echo "==> syncing frontend to $REMOTE_HTML_DIR/" ssh "$UBERSPACE_HOST" "mkdir -p $REMOTE_HTML_DIR" rsync -avz --delete dist/ "$UBERSPACE_HOST:$REMOTE_HTML_DIR/" echo "==> syncing project to $REMOTE_SERVICE_DIR/" ssh "$UBERSPACE_HOST" "mkdir -p $REMOTE_SERVICE_DIR" rsync -avz --delete \ --exclude='.git/' \ --exclude='.env' \ --exclude='dist/' \ --exclude='node_modules/' \ --exclude='.DS_Store' \ ./ "$UBERSPACE_HOST:$REMOTE_SERVICE_DIR/" echo "==> ensuring data directories exist..." ssh "$UBERSPACE_HOST" "mkdir -p $REMOTE_SERVICE_DIR/src/server/data/steam-icons $REMOTE_SERVICE_DIR/src/server/data/igdb-images/thumb $REMOTE_SERVICE_DIR/src/server/data/igdb-images/cover_big $REMOTE_SERVICE_DIR/src/server/data/igdb-images/screenshot_med" echo "==> installing dependencies..." ssh "$UBERSPACE_HOST" "cd $REMOTE_SERVICE_DIR && bun install" echo "==> creating .env if missing..." ssh "$UBERSPACE_HOST" "test -f $REMOTE_SERVICE_DIR/.env || cat > $REMOTE_SERVICE_DIR/.env" <<'ENV' PORT=3001 ALLOWED_ORIGIN=https://serve.uber.space TWITCH_CLIENT_ID= TWITCH_CLIENT_SECRET= DATABASE_URL= ENV echo "==> ensuring DATABASE_URL is set..." ssh "$UBERSPACE_HOST" "grep -q '^DATABASE_URL=' $REMOTE_SERVICE_DIR/.env || echo 'DATABASE_URL=' >> $REMOTE_SERVICE_DIR/.env" echo "==> running database migrations..." ssh "$UBERSPACE_HOST" "cd $REMOTE_SERVICE_DIR && bunx drizzle-kit migrate" echo "==> setting up web backend..." ssh "$UBERSPACE_HOST" "uberspace web backend add /whattoplay/api port $PORT --remove-prefix --force" || true echo "==> setting up systemd service..." ssh "$UBERSPACE_HOST" "mkdir -p ~/.config/systemd/user" ssh "$UBERSPACE_HOST" "cat > ~/.config/systemd/user/$SERVICE_NAME.service" < checking service status..." ssh "$UBERSPACE_HOST" "systemctl --user status $SERVICE_NAME --no-pager" || true echo "==> deploy complete" echo " frontend: https://serve.uber.space/whattoplay/" echo " api: https://serve.uber.space/whattoplay/api/health"