#!/bin/bash set -e # Doza Assist - Deploy (Graphify + Servidor) # Sobe um nivel: o script vive em admin/, o projeto e a pasta pai SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" PROJECT_DIR="$(dirname "$SCRIPT_DIR")" cd "$PROJECT_DIR" echo "============================================================" echo " Doza Assist :: Deploy - Graphify + Servidor" echo " Pasta: $(pwd)" echo "============================================================" echo # 1) Resolve quem executa o graphify (preferencia: uv, depois graphify no PATH) if command -v uv >/dev/null 2>&1; then RUN="uv tool run --from graphifyy graphify" elif command -v graphify >/dev/null 2>&1; then RUN="graphify" else echo "graphify nao encontrado. Instalando via pip..." python3 -m pip install -q --upgrade graphifyy RUN="graphify" fi # 2) Roda o graphify SEMPRE (deep + update; code-only se nao houver API key) ARGS="--mode deep --update" if [ -n "$GEMINI_API_KEY" ] || [ -n "$GOOGLE_API_KEY" ] || [ -n "$MOONSHOT_API_KEY" ] \ || [ -n "$ANTHROPIC_API_KEY" ] || [ -n "$OPENAI_API_KEY" ] || [ -n "$DEEPSEEK_API_KEY" ]; then : else echo "AVISO: nenhuma LLM API key detectada. Usando --code-only (codigo apenas;" echo " docs/imagens serao ignorados). Para extracao semantica completa," echo " defina GEMINI_API_KEY ou GOOGLE_API_KEY." ARGS="--mode deep --update --code-only" fi echo echo "Executando graphify (DEEP + UPDATE)..." echo $RUN "." $ARGS || echo "[AVISO] graphify falhou; o deploy continua mesmo assim." # 2.5) Reindexar o RAG (doza.code_chunks) - so roda se rag/.env estiver # preenchido; requer o tunel SSH do banco aberto (ver rag/SETUP.md). # Best-effort: nunca trava o deploy. echo echo "Reindexando RAG..." PORT=55435 export RAG_DB_PORT=$PORT export RAG_DB_HOST=127.0.0.1 bash "$PROJECT_DIR/rag/ensure_tunnel.sh" || true RAG_VENV_PY="$PROJECT_DIR/code/.venv/bin/python3" if [ ! -x "$RAG_VENV_PY" ]; then RAG_VENV_PY="python3" fi if [ -f "$PROJECT_DIR/rag/.env" ] && grep -q '^RAG_DB_PASSWORD=.\+' "$PROJECT_DIR/rag/.env"; then "$RAG_VENV_PY" -m pip install -q -r "$PROJECT_DIR/rag/requirements.txt" 2>/dev/null || true "$RAG_VENV_PY" "$PROJECT_DIR/rag/index_code.py" || echo "[AVISO] indexacao RAG falhou (tunel/banco indisponivel?); deploy continua." else echo "[INFO] rag/.env sem RAG_DB_PASSWORD preenchida; pulando indexacao RAG." fi # 3) Derrubar qualquer instancia antiga do servidor echo echo "Parando instancias anteriores do servidor..." lsof -ti:5050 | xargs kill -9 2>/dev/null || true pkill -f "python.*app.py" 2>/dev/null || true sleep 1 true # 4) Levantar o servidor Doza Assist APP_DIR="$PROJECT_DIR/code" cd "$APP_DIR" # Ensure Homebrew binaries (ffmpeg, etc.) are on PATH if [ -d "/opt/homebrew/bin" ]; then export PATH="/opt/homebrew/bin:$PATH" elif [ -d "/usr/local/bin" ]; then export PATH="/usr/local/bin:$PATH" fi VENV_PY="$APP_DIR/.venv/bin/python3" if [ ! -x "$VENV_PY" ]; then echo "ERRO: ambiente Python do macOS nao encontrado:" echo " $VENV_PY" echo echo "Execute primeiro: admin/install.command" exit 1 fi echo echo "============================================================" echo " Levantando o servidor Doza Assist..." echo " http://localhost:5050" echo "============================================================" echo # Abre o navegador padrao assim que o servidor responder (nao trava o boot) ( for _ in $(seq 1 30); do if curl -s -o /dev/null "http://localhost:5050"; then open "http://localhost:5050" break fi sleep 1 done ) & "$VENV_PY" app.py