#!/usr/bin/env bash set -euo pipefail eval "$(mise activate bash)" 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 server to $REMOTE_SERVICE_DIR/" ssh "$UBERSPACE_HOST" "mkdir -p $REMOTE_SERVICE_DIR/src $REMOTE_SERVICE_DIR/data/steam-icons $REMOTE_SERVICE_DIR/data/igdb-images/thumb $REMOTE_SERVICE_DIR/data/igdb-images/cover_big $REMOTE_SERVICE_DIR/data/igdb-images/screenshot_med" rsync -avz --delete \ server/src/ "$UBERSPACE_HOST:$REMOTE_SERVICE_DIR/src/" rsync -avz \ server/package.json "$UBERSPACE_HOST:$REMOTE_SERVICE_DIR/" echo "==> installing server dependencies..." ssh "$UBERSPACE_HOST" "cd $REMOTE_SERVICE_DIR && bun install --production" 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= ENV 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" <<'UNIT' [Unit] Description=WhatToPlay API server After=network.target [Service] ExecStart=/usr/bin/bun run src/index.ts WorkingDirectory=%h/services/whattoplay Restart=always RestartSec=5 EnvironmentFile=%h/services/whattoplay/.env [Install] WantedBy=default.target UNIT ssh "$UBERSPACE_HOST" "systemctl --user daemon-reload && systemctl --user enable $SERVICE_NAME && systemctl --user restart $SERVICE_NAME" echo "==> 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"