mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-09-10 02:25:56 +00:00
chore: Mac-compatible dev scripts
- hot-dev.sh: Fix hostname -I for macOS, use ifconfig instead - hot-dev.sh: Fix PULSE_AUDIT_DIR for mock mode - hot-dev.sh: Use PULSE_REPOS_DIR for Pro module detection - dev-check.sh: Fix pgrep -c (not supported on macOS) - dev-check.sh: Use /tmp/pulse-debug.log on macOS instead of journalctl - Update internal/api docs to use env var paths
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
This `frontend-modern` directory is **AUTO-GENERATED** during builds.
|
||||
|
||||
## The REAL frontend location is
|
||||
### `/opt/pulse/frontend-modern`
|
||||
### `${PULSE_REPOS_DIR}/pulse/frontend-modern`
|
||||
|
||||
## Why does this exist?
|
||||
- Go's `embed` directive cannot access files outside the module
|
||||
@@ -15,7 +15,7 @@ This `frontend-modern` directory is **AUTO-GENERATED** during builds.
|
||||
- The Makefile deletes and recreates this directory
|
||||
|
||||
## How to edit frontend code
|
||||
1. Edit files in `/opt/pulse/frontend-modern/src/`
|
||||
1. Edit files in `${PULSE_REPOS_DIR}/pulse/frontend-modern/src/`
|
||||
2. The dev server (port 7655) will hot-reload
|
||||
3. When building for production, the Makefile copies it here
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ The `frontend-modern/` subdirectory that appears here is:
|
||||
- **REQUIRED BY GO** - The embed directive needs it here
|
||||
|
||||
### Frontend Development Location
|
||||
👉 **Edit frontend files at: `/opt/pulse/frontend-modern/src/`**
|
||||
👉 **Edit frontend files at: `${PULSE_REPOS_DIR}/pulse/frontend-modern/src/`**
|
||||
|
||||
### Why This Structure?
|
||||
Go's `//go:embed` directive has limitations:
|
||||
|
||||
+12
-6
@@ -27,9 +27,9 @@ echo ""
|
||||
|
||||
# Check for duplicate Pulse processes (CRITICAL!)
|
||||
# Count both installed binary and dev binary patterns
|
||||
# Use tr to strip newlines for robustness
|
||||
PULSE_COUNT_BIN=$(pgrep -c -f "bin/pulse$" 2>/dev/null | tr -d '\n' || echo 0)
|
||||
PULSE_COUNT_DEV=$(pgrep -c -f "^\./pulse$" 2>/dev/null | tr -d '\n' || echo 0)
|
||||
# Note: macOS pgrep doesn't support -c, so we use wc -l
|
||||
PULSE_COUNT_BIN=$(pgrep -f "bin/pulse$" 2>/dev/null | wc -l | tr -d ' ')
|
||||
PULSE_COUNT_DEV=$(pgrep -f "^\./pulse$" 2>/dev/null | wc -l | tr -d ' ')
|
||||
PULSE_COUNT=$(( ${PULSE_COUNT_BIN:-0} + ${PULSE_COUNT_DEV:-0} ))
|
||||
echo -n "Pulse processes: "
|
||||
if [[ $PULSE_COUNT -eq 0 ]]; then
|
||||
@@ -47,7 +47,7 @@ fi
|
||||
echo -n "Pulse backend (port 7655): "
|
||||
if curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:7655/api/health 2>/dev/null | grep -q "200\|401\|403"; then
|
||||
echo -e "${GREEN}✓ Responding${NC}"
|
||||
elif systemctl is-active --quiet pulse 2>/dev/null; then
|
||||
elif [[ "$(uname -s)" == "Linux" ]] && systemctl is-active --quiet pulse 2>/dev/null; then
|
||||
echo -e "${YELLOW}⚠ Service running but not responding${NC}"
|
||||
else
|
||||
echo -e "${RED}✗ NOT RESPONDING${NC}"
|
||||
@@ -59,7 +59,7 @@ if curl -s -o /dev/null http://127.0.0.1:5173/ 2>/dev/null; then
|
||||
echo -e "${GREEN}✓ Running${NC}"
|
||||
else
|
||||
echo -e "${RED}✗ NOT RUNNING${NC}"
|
||||
echo " Fix: cd /opt/pulse/frontend-modern && npm run dev"
|
||||
echo " Fix: cd \${PULSE_REPOS_DIR:-~/Development/pulse/repos}/pulse/frontend-modern && npm run dev"
|
||||
fi
|
||||
|
||||
# Check AI status
|
||||
@@ -74,7 +74,13 @@ fi
|
||||
# Show recent errors
|
||||
echo ""
|
||||
echo "=== Recent Pulse Errors (last 5) ==="
|
||||
journalctl -u pulse-dev --no-pager -n 20 2>/dev/null | grep -i "error\|fatal\|panic" | tail -5 || echo "None found"
|
||||
if [[ "$(uname -s)" == "Darwin" ]]; then
|
||||
# macOS: check the debug log
|
||||
grep -i "error\|fatal\|panic" /tmp/pulse-debug.log 2>/dev/null | tail -5 || echo "None found"
|
||||
else
|
||||
# Linux: use journalctl
|
||||
journalctl -u pulse-dev --no-pager -n 20 2>/dev/null | grep -i "error\|fatal\|panic" | tail -5 || echo "None found"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Done."
|
||||
|
||||
+32
-10
@@ -15,7 +15,7 @@
|
||||
# FRONTEND_DEV_PORT=5173 Frontend dev server port (default: 5173)
|
||||
#
|
||||
# Pro Features Mode:
|
||||
# When /opt/pulse-enterprise exists and HOT_DEV_USE_PRO is not "false",
|
||||
# When pulse-enterprise repo exists and HOT_DEV_USE_PRO is not "false",
|
||||
# the script builds the Pro binary which includes:
|
||||
# - SQLite-based persistent audit logging
|
||||
# - RBAC (Role-Based Access Control)
|
||||
@@ -130,7 +130,14 @@ ALLOWED_ORIGINS="${ALLOWED_ORIGINS},http://localhost:${FRONTEND_DEV_PORT:-7655},
|
||||
ALLOWED_ORIGINS="${ALLOWED_ORIGINS},http://localhost:5173,http://127.0.0.1:5173"
|
||||
|
||||
# Detect and add all system IPs (V4)
|
||||
for ip in $(hostname -I); do
|
||||
if [[ "$(uname -s)" == "Darwin" ]]; then
|
||||
# macOS: get IPs from ifconfig
|
||||
ALL_IPS=$(ifconfig 2>/dev/null | grep "inet " | awk '{print $2}' | grep -v "^127\.")
|
||||
else
|
||||
# Linux: use hostname -I
|
||||
ALL_IPS=$(hostname -I 2>/dev/null || echo "")
|
||||
fi
|
||||
for ip in $ALL_IPS; do
|
||||
if [[ "${ip}" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||
if [[ "${ip}" != "127.0.0.1" ]]; then
|
||||
ALLOWED_ORIGINS="${ALLOWED_ORIGINS},http://${ip}:${FRONTEND_DEV_PORT:-7655}"
|
||||
@@ -261,7 +268,9 @@ mkdir -p internal/api/frontend-modern/dist
|
||||
touch internal/api/frontend-modern/dist/index.html
|
||||
|
||||
# Check if Pro module is available and use it for full audit logging support
|
||||
PRO_MODULE_DIR="/opt/pulse-enterprise"
|
||||
# Use PULSE_REPOS_DIR env var or default to ~/Development/pulse/repos
|
||||
PULSE_REPOS_DIR="${PULSE_REPOS_DIR:-$HOME/Development/pulse/repos}"
|
||||
PRO_MODULE_DIR="${PULSE_REPOS_DIR}/pulse-enterprise"
|
||||
if [[ -d "${PRO_MODULE_DIR}" ]] && [[ ${HOT_DEV_USE_PRO:-true} == "true" ]]; then
|
||||
log_info "Building Pro binary (includes persistent audit logging)..."
|
||||
cd "${PRO_MODULE_DIR}"
|
||||
@@ -271,10 +280,10 @@ if [[ -d "${PRO_MODULE_DIR}" ]] && [[ ${HOT_DEV_USE_PRO:-true} == "true" ]]; the
|
||||
go build -o pulse ./cmd/pulse
|
||||
}
|
||||
cd "${ROOT_DIR}"
|
||||
# Set up audit directory for Pro features
|
||||
export PULSE_AUDIT_DIR="${PULSE_DATA_DIR:-/etc/pulse}"
|
||||
log_info "Pro audit logging enabled (SQLite storage in ${PULSE_AUDIT_DIR})"
|
||||
# Note: PULSE_AUDIT_DIR is set after PULSE_DATA_DIR is determined below
|
||||
PRO_BUILD_SUCCESS=true
|
||||
else
|
||||
PRO_BUILD_SUCCESS=false
|
||||
go build -o pulse ./cmd/pulse
|
||||
fi
|
||||
|
||||
@@ -293,6 +302,11 @@ if [[ ${PULSE_MOCK_MODE:-false} == "true" ]]; then
|
||||
export PULSE_DATA_DIR="${ROOT_DIR}/tmp/mock-data"
|
||||
mkdir -p "$PULSE_DATA_DIR"
|
||||
log_info "Mock mode: Using isolated data directory: ${PULSE_DATA_DIR}"
|
||||
# Set audit dir for Pro features (must be after PULSE_DATA_DIR is set)
|
||||
if [[ ${PRO_BUILD_SUCCESS:-false} == "true" ]]; then
|
||||
export PULSE_AUDIT_DIR="${PULSE_DATA_DIR}"
|
||||
log_info "Pro audit logging enabled (SQLite storage in ${PULSE_AUDIT_DIR})"
|
||||
fi
|
||||
else
|
||||
if [[ -n ${PULSE_DATA_DIR:-} ]]; then
|
||||
log_info "Using preconfigured data directory: ${PULSE_DATA_DIR}"
|
||||
@@ -316,8 +330,9 @@ else
|
||||
log_error "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
||||
log_error "!! Backup used: ${BACKUP_KEY}"
|
||||
log_error "!! "
|
||||
log_error "!! To find out what deleted the key, run:"
|
||||
log_error "!! sudo journalctl -u encryption-key-watcher -n 100"
|
||||
log_error "!! To find out what deleted the key:"
|
||||
log_error "!! Linux: sudo journalctl -u encryption-key-watcher -n 100"
|
||||
log_error "!! macOS: check /tmp/pulse-debug.log"
|
||||
log_error "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
||||
echo ""
|
||||
cp -f "${BACKUP_KEY}" "${PULSE_DATA_DIR}/.encryption.key"
|
||||
@@ -363,6 +378,12 @@ else
|
||||
log_warn "No encryption key found for ${PULSE_DATA_DIR}. Encrypted config may fail to load."
|
||||
fi
|
||||
fi
|
||||
|
||||
# Set audit dir for Pro features (must be after PULSE_DATA_DIR is set)
|
||||
if [[ ${PRO_BUILD_SUCCESS:-false} == "true" ]]; then
|
||||
export PULSE_AUDIT_DIR="${PULSE_DATA_DIR}"
|
||||
log_info "Pro audit logging enabled (SQLite storage in ${PULSE_AUDIT_DIR})"
|
||||
fi
|
||||
fi
|
||||
|
||||
LOG_LEVEL=debug \
|
||||
@@ -451,7 +472,7 @@ log_info "Starting backend file watcher..."
|
||||
if kill -0 "$NEW_PID" 2>/dev/null; then
|
||||
log_info "✓ Backend restarted (PID: $NEW_PID)"
|
||||
else
|
||||
log_error "✗ Backend failed to start! Check /opt/pulse/hotdev.log"
|
||||
log_error "✗ Backend failed to start! Check /tmp/pulse-debug.log"
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -463,7 +484,8 @@ log_info "Starting backend file watcher..."
|
||||
|
||||
# Use the same build logic as the initial build
|
||||
local build_success=0
|
||||
PRO_MODULE_DIR="/opt/pulse-enterprise"
|
||||
PULSE_REPOS_DIR="${PULSE_REPOS_DIR:-$HOME/Development/pulse/repos}"
|
||||
PRO_MODULE_DIR="${PULSE_REPOS_DIR}/pulse-enterprise"
|
||||
if [[ -d "${PRO_MODULE_DIR}" ]] && [[ ${HOT_DEV_USE_PRO:-true} == "true" ]]; then
|
||||
log_info "Building Pro binary..."
|
||||
if (cd "${PRO_MODULE_DIR}" && go build -buildvcs=false -o "${ROOT_DIR}/pulse" ./cmd/pulse-enterprise 2>&1 | grep -v "^#"); then
|
||||
|
||||
Reference in New Issue
Block a user