ScuttleBot

scuttlebot / run.sh
Source Blame History 125 lines
5ac549c… lmata 1 #!/usr/bin/env bash
5ac549c… lmata 2 # run.sh — scuttlebot dev helper
5ac549c… lmata 3 # Usage: ./run.sh [command]
5ac549c… lmata 4 # (no args) build and start scuttlebot
5ac549c… lmata 5 # stop kill running scuttlebot
5ac549c… lmata 6 # restart stop + build + start
5ac549c… lmata 7 # token print the current API token
5ac549c… lmata 8 # log tail the log (if logging to file is configured)
5ac549c… lmata 9 # test run Go unit tests
5ac549c… lmata 10 # e2e run Playwright e2e tests (requires scuttlebot running)
5ac549c… lmata 11 # clean remove built binaries
5ac549c… lmata 12
5ac549c… lmata 13 set -euo pipefail
5ac549c… lmata 14
5ac549c… lmata 15 BINARY=bin/scuttlebot
5ac549c… lmata 16 CONFIG=${SCUTTLEBOT_CONFIG:-scuttlebot.yaml}
5ac549c… lmata 17 TOKEN_FILE=data/ergo/api_token
5ac549c… lmata 18 PID_FILE=.scuttlebot.pid
5ac549c… lmata 19 LOG_FILE=.scuttlebot.log
5ac549c… lmata 20 cmd=${1:-start}
5ac549c… lmata 21
5ac549c… lmata 22 _pid() { cat "$PID_FILE" 2>/dev/null || echo ""; }
5ac549c… lmata 23
5ac549c… lmata 24 _running() {
5ac549c… lmata 25 local pid; pid=$(_pid)
5ac549c… lmata 26 [[ -n "$pid" ]] && kill -0 "$pid" 2>/dev/null
5ac549c… lmata 27 }
5ac549c… lmata 28
5ac549c… lmata 29 _stop() {
5ac549c… lmata 30 if _running; then
5ac549c… lmata 31 local pid; pid=$(_pid)
5ac549c… lmata 32 kill "$pid" && rm -f "$PID_FILE"
5ac549c… lmata 33 echo "stopped (pid $pid)"
5ac549c… lmata 34 else
5ac549c… lmata 35 echo "not running"
5ac549c… lmata 36 fi
5ac549c… lmata 37 # Kill any stale ergo processes holding IRC/API ports.
5ac549c… lmata 38 pkill -f "data/ergo/ergo" 2>/dev/null && sleep 1 || true
5ac549c… lmata 39 }
5ac549c… lmata 40
5ac549c… lmata 41 _build() {
5ac549c… lmata 42 echo "building..."
5ac549c… lmata 43 go build -o "$BINARY" ./cmd/scuttlebot
5ac549c… lmata 44 echo "ok → $BINARY"
5ac549c… lmata 45 }
5ac549c… lmata 46
5ac549c… lmata 47 _start() {
5ac549c… lmata 48 if _running; then
5ac549c… lmata 49 echo "already running (pid $(_pid)) — use ./run.sh restart"
5ac549c… lmata 50 exit 0
5ac549c… lmata 51 fi
5ac549c… lmata 52
5ac549c… lmata 53 if [[ ! -f "$CONFIG" ]]; then
5ac549c… lmata 54 echo "no $CONFIG found — copying from example"
5ac549c… lmata 55 cp deploy/standalone/scuttlebot.yaml.example "$CONFIG"
5ac549c… lmata 56 echo "edit $CONFIG if needed, then re-run"
5ac549c… lmata 57 fi
5ac549c… lmata 58
5ac549c… lmata 59 mkdir -p bin data/ergo
5ac549c… lmata 60
5ac549c… lmata 61 "$BINARY" -config "$CONFIG" >"$LOG_FILE" 2>&1 &
5ac549c… lmata 62 echo $! >"$PID_FILE"
5ac549c… lmata 63 local pid; pid=$(_pid)
5ac549c… lmata 64 echo "started (pid $pid) — logs: $LOG_FILE"
5ac549c… lmata 65
5ac549c… lmata 66 # wait briefly and print token so it's handy
5ac549c… lmata 67 sleep 1
5ac549c… lmata 68 if [[ -f "$TOKEN_FILE" ]]; then
5ac549c… lmata 69 echo "token: $(cat "$TOKEN_FILE")"
5ac549c… lmata 70 fi
5ac549c… lmata 71
5ac549c… lmata 72 echo "ui: http://localhost:8080/ui/"
5ac549c… lmata 73 }
5ac549c… lmata 74
5ac549c… lmata 75 _token() {
5ac549c… lmata 76 if [[ -f "$TOKEN_FILE" ]]; then
5ac549c… lmata 77 cat "$TOKEN_FILE"
5ac549c… lmata 78 else
5ac549c… lmata 79 echo "no token file found (is scuttlebot running?)" >&2
5ac549c… lmata 80 exit 1
5ac549c… lmata 81 fi
5ac549c… lmata 82 }
5ac549c… lmata 83
5ac549c… lmata 84
5ac549c… lmata 85 case "$cmd" in
5ac549c… lmata 86 start)
5ac549c… lmata 87 _build
5ac549c… lmata 88 _start
5ac549c… lmata 89 ;;
5ac549c… lmata 90 stop)
5ac549c… lmata 91 _stop
5ac549c… lmata 92 ;;
5ac549c… lmata 93 restart)
5ac549c… lmata 94 _stop || true
5ac549c… lmata 95 _build
5ac549c… lmata 96 _start
5ac549c… lmata 97 ;;
5ac549c… lmata 98 build)
5ac549c… lmata 99 _build
5ac549c… lmata 100 ;;
5ac549c… lmata 101 token)
5ac549c… lmata 102 _token
5ac549c… lmata 103 ;;
5ac549c… lmata 104 log|logs)
5ac549c… lmata 105 tail -f "$LOG_FILE"
5ac549c… lmata 106 ;;
5ac549c… lmata 107 test)
5ac549c… lmata 108 go test ./...
5ac549c… lmata 109 ;;
5ac549c… lmata 110 e2e)
5ac549c… lmata 111 SB_TOKEN=$(cat "$TOKEN_FILE" 2>/dev/null) \
5ac549c… lmata 112 SB_USERNAME=${SB_USERNAME:-admin} \
5ac549c… lmata 113 SB_PASSWORD=${SB_PASSWORD:-} \
5ac549c… lmata 114 npx --prefix tests/e2e playwright test "${@:2}"
5ac549c… lmata 115 ;;
5ac549c… lmata 116 clean)
5ac549c… lmata 117 _stop || true
5ac549c… lmata 118 rm -f "$BINARY" bin/scuttlectl "$LOG_FILE" "$PID_FILE"
5ac549c… lmata 119 echo "clean"
5ac549c… lmata 120 ;;
5ac549c… lmata 121 *)
10b6d92… lmata 122 echo "usage: $0 {start|stop|restart|build|token|log|test|e2e|clean}"
5ac549c… lmata 123 exit 1
5ac549c… lmata 124 ;;
5ac549c… lmata 125 esac

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button