import: contenido inicial de la skill bitwarden
This commit is contained in:
93
scripts/serve-up.sh
Normal file
93
scripts/serve-up.sh
Normal file
@@ -0,0 +1,93 @@
|
||||
#!/usr/bin/env bash
|
||||
# bitwarden skill — asegura que `bw serve` esté corriendo.
|
||||
#
|
||||
# Idempotente:
|
||||
# - Si serve responde en localhost:$BW_PORT/status → no hace nada
|
||||
# - Si no, mata cualquier proceso huérfano y relanza
|
||||
# - Si no hay session válida, llama a setup.sh para re-unlock
|
||||
#
|
||||
# Output: solo en caso de error o cuando arranca el daemon (silent en happy path).
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SKILL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
ENV_FILE="$SKILL_DIR/.env"
|
||||
CACHE_DIR="$SKILL_DIR/.cache"
|
||||
SESSION_FILE="$CACHE_DIR/session"
|
||||
PID_FILE="$CACHE_DIR/serve.pid"
|
||||
LOG_FILE="$CACHE_DIR/serve.log"
|
||||
BW_DATA_DIR="$CACHE_DIR/bw"
|
||||
|
||||
if [[ ! -f "$ENV_FILE" ]]; then
|
||||
echo "ERROR: $ENV_FILE no existe." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
set -a
|
||||
# shellcheck disable=SC1090
|
||||
source "$ENV_FILE"
|
||||
set +a
|
||||
|
||||
PORT="${BW_PORT:-8087}"
|
||||
HOST="127.0.0.1"
|
||||
BASE="http://${HOST}:${PORT}"
|
||||
|
||||
export BITWARDENCLI_APPDATA_DIR="$BW_DATA_DIR"
|
||||
|
||||
# ─── 1. ¿Ya está corriendo y responde? ───────────────────────────────────
|
||||
if curl -sS -m 2 -o /dev/null -w "%{http_code}" "${BASE}/status" 2>/dev/null | grep -q "200"; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# ─── 2. Limpiar PID huérfano si existe ──────────────────────────────────
|
||||
if [[ -f "$PID_FILE" ]]; then
|
||||
old_pid="$(cat "$PID_FILE")"
|
||||
if [[ -n "$old_pid" ]] && kill -0 "$old_pid" 2>/dev/null; then
|
||||
# El PID vive pero no respondía: matarlo
|
||||
kill "$old_pid" 2>/dev/null || true
|
||||
sleep 1
|
||||
kill -9 "$old_pid" 2>/dev/null || true
|
||||
fi
|
||||
rm -f "$PID_FILE"
|
||||
fi
|
||||
|
||||
# ─── 3. Asegurar session válida ─────────────────────────────────────────
|
||||
if [[ ! -s "$SESSION_FILE" ]]; then
|
||||
echo "→ No hay session, corriendo setup.sh..." >&2
|
||||
bash "$SKILL_DIR/scripts/setup.sh" >&2
|
||||
fi
|
||||
|
||||
session="$(cat "$SESSION_FILE")"
|
||||
if [[ -z "$session" ]]; then
|
||||
echo "ERROR: session vacía después de setup. Revisá .env." >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
# ─── 4. Lanzar bw serve en background ───────────────────────────────────
|
||||
echo "→ Lanzando bw serve en ${BASE}..." >&2
|
||||
|
||||
mkdir -p "$CACHE_DIR"
|
||||
: > "$LOG_FILE"
|
||||
|
||||
# nohup + disown para que sobreviva el exit del script
|
||||
BW_SESSION="$session" \
|
||||
nohup bw serve --hostname "$HOST" --port "$PORT" \
|
||||
> "$LOG_FILE" 2>&1 &
|
||||
serve_pid=$!
|
||||
echo "$serve_pid" > "$PID_FILE"
|
||||
chmod 600 "$PID_FILE" 2>/dev/null || true
|
||||
disown 2>/dev/null || true
|
||||
|
||||
# ─── 5. Esperar a que responda ──────────────────────────────────────────
|
||||
for i in 1 2 3 4 5 6 7 8 9 10; do
|
||||
if curl -sS -m 2 -o /dev/null -w "%{http_code}" "${BASE}/status" 2>/dev/null | grep -q "200"; then
|
||||
echo "→ Listo en ${BASE} (PID $serve_pid)" >&2
|
||||
exit 0
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
|
||||
# Si llegamos acá, algo falló
|
||||
echo "ERROR: bw serve no respondió en 10s. Logs:" >&2
|
||||
tail -20 "$LOG_FILE" >&2
|
||||
exit 3
|
||||
Reference in New Issue
Block a user