← back to Tools Dw Hub
start-fleet.sh
42 lines
#!/usr/bin/env bash
# Keep the curated DW tool set always-on via pm2 on Mac2 (TK-10024).
# Reads tools.json for the start command + port of each curated slug, injects secrets
# from secrets-manager at spawn (never written anywhere), and pm2-manages each so they
# survive reboot. Taggers run DRY_RUN=1 (no Shopify writes from the always-on instance).
set -u
cd "$(dirname "$0")"
# curated set: the 4 groups Steve picked (named + taggers + dashboards + room tools)
CURATED=(150dpi recolor-v14 color-wheel \
tagger-kravet tagger-thibaut tagger-pr \
vendor-dashboard-v2 pm2-dashboard system-dashboard calendar master-listings \
image-to-room room-setting-app)
# secrets → exported env (pm2 captures the spawn env)
SECRETS="$HOME/Projects/secrets-manager/.env"
export GEMINI_API_KEY=$(grep -hoE '^GEMINI_API_KEY=.*' "$SECRETS" | head -1 | cut -d= -f2- | tr -d '"'"'"' \r')
export SHOPIFY_ADMIN_TOKEN=$(grep -hoE '^SHOPIFY_ADMIN_TOKEN=.*' "$SECRETS" | head -1 | cut -d= -f2- | tr -d '"'"'"' \r')
export SHOPIFY_ADMIN_ACCESS_TOKEN="$SHOPIFY_ADMIN_TOKEN"
export ADMIN_PASSWORD="DW2024!"
export DW_BASIC_AUTH="admin:DW2024!" # room-setting-app simple-auth password login (no Google OAuth needed)
export DRY_RUN=1
export VISION_SCAN_CAP=25
for slug in "${CURATED[@]}"; do
read -r PORT START < <(node -e "
const t=JSON.parse(require('fs').readFileSync('tools.json','utf8')).tools.find(x=>x.slug==='$slug');
if(!t){process.exit(0)} console.log((t.port||''), (t.start||'').replace(/\n/g,' '));" | sed 's/ / /')
START=$(node -e "const t=JSON.parse(require('fs').readFileSync('tools.json','utf8')).tools.find(x=>x.slug==='$slug');process.stdout.write(t?t.start:'')")
PORT=$(node -e "const t=JSON.parse(require('fs').readFileSync('tools.json','utf8')).tools.find(x=>x.slug==='$slug');process.stdout.write(t&&t.port?String(t.port):'')")
[ -z "$START" ] && { echo "SKIP $slug (no start)"; continue; }
NAME="dwtool-$slug"
[ -n "$PORT" ] && export NEXTAUTH_URL="http://localhost:$PORT"
pm2 delete "$NAME" >/dev/null 2>&1
PORT="$PORT" pm2 start bash --name "$NAME" --update-env -- -lc "$START" >/dev/null 2>&1 \
&& echo "started $NAME (port ${PORT:-n/a})" || echo "FAILED $NAME"
done
pm2 save >/dev/null 2>&1
echo "--- fleet pm2 roster ---"
pm2 ls | grep dwtool- || true