#!/usr/bin/env bash # # wt-run — Spin up a dev server for a worktree. # # Usage: wt-run --port # # Run this from inside the worktree directory. # set -euo pipefail WORKTREE_PATH="$(pwd)" if [[ $# -lt 1 ]]; then echo "Usage: $0 --port " exit 1 fi PORT="" while [[ $# -gt 0 ]]; do case "$1" in --port) PORT="$2"; shift 2 ;; *) echo "Unknown option: $1"; exit 1 ;; esac done if [[ -z "$PORT" ]]; then echo "✗ --port is required" exit 1 fi SAFE_NAME="$(basename "$WORKTREE_PATH")" DEV_NAME="dev-${SAFE_NAME//\//-}" # --- Clean up any previous container --- docker rm -f "$DEV_NAME" 2>/dev/null || true # --- Ensure the roomy-dev network exists (so agents can reach this by name) --- docker network inspect roomy-dev >/dev/null 2>&1 || docker network create roomy-dev >/dev/null echo "Starting dev server: $DEV_NAME on port $PORT (roomy-dev)" docker run -d \ --name "$DEV_NAME" \ -v "$WORKTREE_PATH:/app" \ -p "$PORT:$PORT" \ -e "CI=true" \ -e "VITE_PORT=$PORT" \ --network roomy-dev \ node:22 \ bash -c " set -euo pipefail cd /app npm i -g pnpm # Install deps if missing (fresh worktree) if [ ! -d node_modules ]; then echo 'Installing dependencies …' pnpm install --frozen-lockfile fi # Build SDK if not already built (app-lite depends on it) if [ ! -d packages/sdk/dist ]; then echo 'Building @roomy-space/sdk …' pnpm --filter @roomy-space/sdk build fi cd packages/app-lite pnpm run dev --host 0.0.0.0 --port $PORT " echo "✔ Dev server started (http://localhost:$PORT)" echo " Agent (roomy-dev) → http://$DEV_NAME:$PORT" echo "To stop: docker rm -f $DEV_NAME"