Files
kanban/run.sh
T
egutierrez c9e15513c7 chore: auto-commit (23 archivos)
- app.md
- backend/dist/assets/index-CFDWXN9Z.js
- backend/dist/index.html
- backend/handlers.go
- backend/main.go
- backend/users.go
- e2e/smoke_live.sh
- frontend/src/App.tsx
- frontend/src/api.ts
- frontend/src/components/CardChatPanel.tsx
- ...

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 18:22:44 +02:00

64 lines
2.3 KiB
Bash
Executable File

#!/usr/bin/env bash
# Lanza backend Go (puerto 8095) + frontend Vite dev (puerto 5180) en paralelo.
# Vite hace proxy /api -> 8095, asi que abrir http://localhost:5180
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BACK_DIR="$ROOT/backend"
FRONT_DIR="$ROOT/frontend"
PORT_BACK="${PORT_BACK:-8095}"
PORT_FRONT="${PORT_FRONT:-5180}"
# Default DB lives at apps/kanban/operations.db. Force an absolute path so
# the value survives the `cd $BACK_DIR` below — otherwise a relative
# ./operations.db would land inside backend/.
DB_PATH="${DB_PATH:-$ROOT/operations.db}"
cleanup() {
echo ""
echo ">>> Stopping..."
[[ -n "${BACK_PID:-}" ]] && kill "$BACK_PID" 2>/dev/null || true
[[ -n "${FRONT_PID:-}" ]] && kill "$FRONT_PID" 2>/dev/null || true
wait 2>/dev/null || true
exit 0
}
trap cleanup INT TERM EXIT
# 1. Build backend si no existe o si los .go/.sql son mas nuevos que el binario
VERSION=$(awk -F': ' '/^version:/ {print $2; exit}' "$ROOT/app.md" 2>/dev/null || echo "dev")
if [[ ! -x "$BACK_DIR/kanban" ]] \
|| [[ -n "$(find "$BACK_DIR" -maxdepth 3 \( -name '*.go' -o -name '*.sql' \) -newer "$BACK_DIR/kanban" 2>/dev/null)" ]] \
|| [[ "$ROOT/app.md" -nt "$BACK_DIR/kanban" ]]; then
echo ">>> Building backend (version=$VERSION)..."
(cd "$BACK_DIR" && CGO_ENABLED=1 go build -tags fts5 \
-ldflags="-X main.Version=$VERSION" \
-o kanban .)
fi
# 2. Asegurar deps frontend
if [[ ! -d "$FRONT_DIR/node_modules" ]]; then
echo ">>> Installing frontend deps..."
(cd "$FRONT_DIR" && pnpm install)
fi
# 3. Lanzar backend
# KANBAN_MODULE_KEY: passphrase used to AES-GCM encrypt module config_json.
# A stable default keeps the dev loop ergonomic; in production set this via
# the host's secret store. Changing it invalidates previously stored modules.
export KANBAN_MODULE_KEY="${KANBAN_MODULE_KEY:-local-dev-secret-rotate-in-prod}"
echo ">>> Backend http://localhost:$PORT_BACK (db=$DB_PATH)"
(cd "$BACK_DIR" && ./kanban --port "$PORT_BACK" --db "$DB_PATH") &
BACK_PID=$!
# 4. Lanzar frontend (Vite con HMR + proxy a backend)
echo ">>> Frontend http://localhost:$PORT_FRONT (HMR)"
(cd "$FRONT_DIR" && pnpm dev --port "$PORT_FRONT" --strictPort) &
FRONT_PID=$!
echo ""
echo ">>> PIDs: back=$BACK_PID front=$FRONT_PID"
echo ">>> Abrir: http://localhost:$PORT_FRONT"
echo ">>> Ctrl+C para parar ambos"
wait -n