#!/bin/bash # ─── deploy-client.sh (RX ScoreOdonto - Desktop Client) ────────────────────── # Cross-compile do Electron na VPS 4 (Linux) gerando .exe para Windows # e distribui os binários de atualização para a VPS 1 (Produção). # ────────────────────────────────────────────────────────────────────────────── set -e CLIENT_PATH="/home/deploy/stack/rx.scoreodonto.com-client" PROD_VPS="10.99.0.1" PROD_USER="deploy" UPDATES_PATH="/home/deploy/stack/rx.scoreodonto.com/dental-server/updates" LOG_FILE="/home/deploy/stack/webhook-listener/deploy.log" LOG_TAG="[rx.scoreodonto.com-client]" log() { echo "[$(date -u +'%Y-%m-%dT%H:%M:%SZ')] ${LOG_TAG} $1" | tee -a "$LOG_FILE" } log "🚀 Iniciando build do client desktop..." # Garantir que todos os comandos rodam no diretório do projeto cd "$CLIENT_PATH" # 1. Atualizar repositório local (puxar última versão) log "📦 Atualizando repositório local..." git fetch origin main git reset --hard origin/main # 2. Instalar dependências log "📦 Instalando dependências (npm install --include=dev)..." NODE_ENV=development npm install --include=dev # 3. Build cross-platform (Linux → Windows .exe) log "⚙️ Buildando .exe para Windows via electron-builder (cross-compile)..." npx electron-builder --win --x64 --publish never # 4. Verificar se o build gerou os artefatos if [ ! -d "$CLIENT_PATH/dist" ]; then log "❌ ERRO: Pasta dist/ não encontrada após o build!" exit 1 fi EXE_COUNT=$(find "$CLIENT_PATH/dist" -name "*.exe" | wc -l) YML_COUNT=$(find "$CLIENT_PATH/dist" -name "latest.yml" | wc -l) if [ "$EXE_COUNT" -eq 0 ] || [ "$YML_COUNT" -eq 0 ]; then log "❌ ERRO: Artefatos incompletos (exe: $EXE_COUNT, yml: $YML_COUNT)" exit 1 fi log "✅ Build concluído: $EXE_COUNT .exe(s), $YML_COUNT latest.yml" # 5. Garantir que a pasta de updates existe na VPS 1 ssh -o BatchMode=yes -o StrictHostKeyChecking=no ${PROD_USER}@${PROD_VPS} \ "mkdir -p ${UPDATES_PATH}" # 6. Transferir binários para VPS 1 log "🚚 Transferindo binários para VPS 1 (${UPDATES_PATH})..." rsync -avz --delete \ "$CLIENT_PATH/dist/"*.exe \ "$CLIENT_PATH/dist/"*.yml \ "$CLIENT_PATH/dist/"*.blockmap \ ${PROD_USER}@${PROD_VPS}:${UPDATES_PATH}/ 2>/dev/null || \ rsync -avz \ "$CLIENT_PATH/dist/"*.exe \ "$CLIENT_PATH/dist/"*.yml \ ${PROD_USER}@${PROD_VPS}:${UPDATES_PATH}/ log "✅ Build e distribuição do client concluídos com sucesso!"