| 1 | #!/usr/bin/env bash |
| 2 | set -euo pipefail |
| 3 | |
| 4 | root="$(git rev-parse --show-toplevel)" |
| 5 | desktop_dir="$root/desktop" |
| 6 | |
| 7 | vite_port="${REASONIX_DESKTOP_VITE_PORT:-}" |
| 8 | if [[ $# -gt 0 && "$1" =~ ^[0-9]+$ ]]; then |
| 9 | vite_port="$1" |
| 10 | shift |
| 11 | fi |
| 12 | |
| 13 | if [[ -z "$vite_port" ]]; then |
| 14 | branch="$(git -C "$root" branch --show-current || true)" |
| 15 | if [[ -z "$branch" ]]; then |
| 16 | branch="$(git -C "$root" rev-parse --short HEAD)" |
| 17 | fi |
| 18 | key="$root:$branch" |
| 19 | hash="$(printf "%s" "$key" | cksum | awk '{print $1}')" |
| 20 | vite_port=$((5173 + (hash % 100))) |
| 21 | fi |
| 22 | |
| 23 | if (( vite_port < 1024 || vite_port > 36000 )); then |
| 24 | echo "dev: Vite port must be between 1024 and 36000, got $vite_port" >&2 |
| 25 | exit 2 |
| 26 | fi |
| 27 | |
| 28 | export REASONIX_DESKTOP_VITE_PORT="$vite_port" |
| 29 | export REASONIX_DEV=1 |
| 30 | # pnpm honors npm_config_* not PNPM_CONFIG_*; suppress headless TTY purge prompt + age gate. |
| 31 | export npm_config_confirm_modules_purge=false |
| 32 | export npm_config_minimum_release_age=0 |
| 33 | |
| 34 | service="$desktop_dir/build/bin/reasonix-desktop-service" |
| 35 | if [[ "$OSTYPE" == msys* || "$OSTYPE" == cygwin* || "$OSTYPE" == win32* ]]; then |
| 36 | service="$service.exe" |
| 37 | fi |
| 38 | |
| 39 | echo "Reasonix desktop dev (Electron shell)" |
| 40 | echo " worktree: $root" |
| 41 | echo " vite: http://127.0.0.1:$vite_port" |
| 42 | echo " service: $service" |
| 43 | |
| 44 | mkdir -p "$(dirname "$service")" |
| 45 | (cd "$desktop_dir" && go build -o "$service" .) |
| 46 | |
| 47 | # The Vite dev server hot-reloads the frontend; the Electron shell loads it via |
| 48 | # REASONIX_ELECTRON_DEV_URL (see desktop/electron/scripts/start.mjs). |
| 49 | (cd "$desktop_dir/frontend" && exec pnpm dev) & |
| 50 | vite_pid=$! |
| 51 | trap 'kill "$vite_pid" 2>/dev/null || true' EXIT |
| 52 | |
| 53 | cd "$desktop_dir" |
| 54 | exec pnpm --dir electron dev "$@" |
| 55 |