migrate deploy.sh to mise file task
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
78
.mise/tasks/deploy
Executable file
78
.mise/tasks/deploy
Executable file
@@ -0,0 +1,78 @@
|
||||
#!/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" <<UNIT
|
||||
[Unit]
|
||||
Description=WhatToPlay API server
|
||||
After=network.target postgresql.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=/home/serve/services/whattoplay
|
||||
EnvironmentFile=/home/serve/services/whattoplay/.env
|
||||
ExecStart=/usr/bin/bun run src/server/index.ts
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[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"
|
||||
Reference in New Issue
Block a user