Files
hermes-workspace/scripts/install-dashboard-service.sh
2026-06-05 16:56:08 -04:00

106 lines
3.0 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
# Install Hermes Workspace as a user-level service.
# macOS: launchd user agent
# Linux: systemd --user unit
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
SERVICE_NAME="hermes-workspace"
PORT="${PORT:-3000}"
HOST="${HOST:-127.0.0.1}"
NODE_ENV="${NODE_ENV:-production}"
PNPM_BIN="${PNPM_BIN:-$(command -v pnpm || true)}"
if [[ -z "$PNPM_BIN" ]]; then
echo "pnpm not found on PATH. Set PNPM_BIN=/path/to/pnpm and retry." >&2
exit 1
fi
if [[ "${1:-install}" == "uninstall" ]]; then
case "$(uname -s)" in
Darwin)
plist="$HOME/Library/LaunchAgents/com.hermes.workspace.plist"
launchctl bootout "gui/$(id -u)" "$plist" 2>/dev/null || true
rm -f "$plist"
echo "Removed launchd user agent: $plist"
;;
Linux)
systemctl --user disable --now "$SERVICE_NAME.service" 2>/dev/null || true
rm -f "$HOME/.config/systemd/user/$SERVICE_NAME.service"
systemctl --user daemon-reload
echo "Removed systemd user service: $SERVICE_NAME.service"
;;
*)
echo "Unsupported OS: $(uname -s)" >&2
exit 1
;;
esac
exit 0
fi
case "$(uname -s)" in
Darwin)
mkdir -p "$HOME/Library/LaunchAgents" "$ROOT_DIR/logs"
plist="$HOME/Library/LaunchAgents/com.hermes.workspace.plist"
cat > "$plist" <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key><string>com.hermes.workspace</string>
<key>WorkingDirectory</key><string>$ROOT_DIR</string>
<key>ProgramArguments</key>
<array>
<string>$PNPM_BIN</string>
<string>start</string>
</array>
<key>EnvironmentVariables</key>
<dict>
<key>NODE_ENV</key><string>$NODE_ENV</string>
<key>HOST</key><string>$HOST</string>
<key>PORT</key><string>$PORT</string>
</dict>
<key>RunAtLoad</key><true/>
<key>KeepAlive</key><true/>
<key>StandardOutPath</key><string>$ROOT_DIR/logs/hermes-workspace.out.log</string>
<key>StandardErrorPath</key><string>$ROOT_DIR/logs/hermes-workspace.err.log</string>
</dict>
</plist>
EOF
launchctl bootout "gui/$(id -u)" "$plist" 2>/dev/null || true
launchctl bootstrap "gui/$(id -u)" "$plist"
launchctl kickstart -k "gui/$(id -u)/com.hermes.workspace"
echo "Installed launchd user agent: $plist"
;;
Linux)
mkdir -p "$HOME/.config/systemd/user" "$ROOT_DIR/logs"
unit="$HOME/.config/systemd/user/$SERVICE_NAME.service"
cat > "$unit" <<EOF
[Unit]
Description=Hermes Workspace dashboard
After=network-online.target
[Service]
Type=simple
WorkingDirectory=$ROOT_DIR
Environment=NODE_ENV=$NODE_ENV
Environment=HOST=$HOST
Environment=PORT=$PORT
ExecStart=$PNPM_BIN start
Restart=always
RestartSec=5
[Install]
WantedBy=default.target
EOF
systemctl --user daemon-reload
systemctl --user enable --now "$SERVICE_NAME.service"
echo "Installed systemd user service: $SERVICE_NAME.service"
;;
*)
echo "Unsupported OS: $(uname -s)" >&2
exit 1
;;
esac