name: Deploy WiFi-ETL Prod on: push: branches: - main jobs: deploy: runs-on: vm-prod steps: - name: Preparar ambiente run: | mkdir -p /home/desenvolvimento/wifi-etl chown $(whoami):$(whoami) /home/desenvolvimento/wifi-etl - name: Garantindo safe directory run: | git config --global --add safe.directory /home/desenvolvimento/wifi-etl - name: Clone/Update código run: | set -e if [ -d /home/desenvolvimento/wifi-etl/.git ]; then cd /home/desenvolvimento/wifi-etl git fetch origin git reset --hard origin/main git clean -fd else git clone http://10.0.120.75:3030/Sothis/wifi-etl.git /home/desenvolvimento/wifi-etl fi echo "✓ Código atualizado" - name: Copiar .env run: | echo "Rodando como: $(whoami)" echo "Listando diretório:" ls -la /home/desenvolvimento/.envs/wifi_etl/ || echo "ERRO: sem acesso ao diretório" cp /etc/wifi-etl/.env /home/desenvolvimento/wifi-etl/.env echo "✓ .env copiado" - name: Build e deploy container run: | set -e cd /home/desenvolvimento/wifi-etl docker system prune -f || true docker-compose -f infra/docker-compose.prod.yml down || true docker-compose -f infra/docker-compose.prod.yml build --no-cache docker-compose -f infra/docker-compose.prod.yml up -d echo "✓ Container iniciado" - name: Aguardar inicialização run: sleep 5 - name: Validar saúde - CRON run: | echo "--- Processos no container ---" docker exec wifi_etl_worker ps aux echo "" echo "--- Status do cron ---" if docker exec wifi_etl_worker ps aux | grep -v grep | grep -q cron; then echo "✓ Cron rodando" else echo "✗ Cron NÃO encontrado" exit 1 fi echo "" echo "--- Próximas execuções agendadas ---" docker exec wifi_etl_worker crontab -l || true - name: Validar saúde - Database run: | echo "--- Testando conexão com o banco ---" docker exec wifi_etl_worker python3 << 'PYEOF' import psycopg2, os, sys host = os.getenv('DB_HOST', 'N/A') port = os.getenv('DB_PORT', '5432') dbname = os.getenv('DB_NAME', 'N/A') user = os.getenv('DB_USER', 'N/A') print(f" Host: {host}:{port}") print(f" Database: {dbname}") print(f" User: {user}") print("") try: conn = psycopg2.connect( host=host, port=int(port), dbname=dbname, user=user, password=os.getenv('DB_PASSWORD'), connect_timeout=5 ) cur = conn.cursor() cur.execute("SELECT version();") version = cur.fetchone()[0] cur.execute("SELECT COUNT(*) FROM users;") users = cur.fetchone()[0] cur.execute("SELECT COUNT(*) FROM sessions;") sessions = cur.fetchone()[0] cur.execute("SELECT last_run_at FROM watermarks ORDER BY last_run_at DESC LIMIT 1;") last_run = cur.fetchone() print(f"✓ Banco conectado") print(f" PostgreSQL: {version[:50]}") print(f" Usuários: {users}") print(f" Sessões: {sessions}") print(f" Último ETL: {last_run[0] if last_run else 'nunca'}") cur.close() conn.close() except Exception as e: print(f"✗ Erro: {e}") sys.exit(1) PYEOF - name: Verificar logs iniciais if: always() run: | docker logs --tail 20 wifi_etl_worker || true