# HASH-BUSTER-20260418-PULLONLY-v12 # PULL-ONLY: Assume Rust, Node, Python já instalados no runner name: BotServer CI/CD on: push: branches: [main] pull_request: branches: [main] env: SCCACHE_DIR: /opt/gbo/work/.sccache CARGO_TARGET_DIR: /opt/gbo/work/target RUSTUP_HOME: /opt/gbo/work/.rustup CARGO_HOME: /opt/gbo/work/.cargo PATH: /opt/gbo/work/.cargo/bin:/opt/gbo/work/.rustup/bin:$PATH jobs: build: runs-on: gbo steps: - name: Clone Limpo run: | echo "=== Clone Limpo do Workspace ===" # Limpar diretório de trabalho anterior rm -rf /opt/gbo/work/build mkdir -p /opt/gbo/work/build cd /opt/gbo/work/build # Clonar repositório gb (workspace raiz) git clone --depth 1 --branch main https://alm.pragmatismo.com.br/GeneralBots/gb.git workspace cd workspace # Inicializar APENAS submodules necessários echo "Inicializando submodules necessários..." git config -f .gitmodules submodule.botserver.url https://alm.pragmatismo.com.br/GeneralBots/BotServer.git git config -f .gitmodules submodule.botlib.url https://alm.pragmatismo.com.br/GeneralBots/botlib.git git submodule update --init --depth 1 botserver git submodule update --init --depth 1 botlib echo "Estrutura do workspace:" ls -la echo "botserver/:" ls -la botserver/ | head -15 echo "botlib/:" ls -la botlib/ | head -15 # Preparar Cargo.toml (remover members desnecessários) echo "Preparando Cargo.toml..." grep -v '"botapp\|"botdevice\|"bottest\|"botui\|"botbook\|"botmodels\|"botplugin\|"bottemplates"' Cargo.toml > Cargo.toml.clean || true if [ -s Cargo.toml.clean ]; then mv Cargo.toml.clean Cargo.toml fi echo "Workspace preparado com sucesso!" - name: Build run: | echo "=== Build (Debug) ===" cd /opt/gbo/work/build/workspace # Verificar dependências echo "Verificando dependências..." cargo --version || { echo "ERRO: cargo não encontrado"; exit 1; } rustc --version || { echo "ERRO: rustc não encontrado"; exit 1; } node --version || echo "AVISO: node não disponível" python3 --version || echo "AVISO: python3 não disponível" # Verificar estrutura if [ ! -f Cargo.toml ]; then echo "ERRO: Cargo.toml não encontrado" exit 1 fi if [ ! -f botserver/Cargo.toml ]; then echo "ERRO: botserver/Cargo.toml não encontrado" exit 1 fi # Build echo "Iniciando build..." cargo build -p botserver echo "Build concluído!" ls -lh target/debug/botserver - name: Deploy run: | echo "=== Deploy ===" SSH="-i /home/gbuser/.ssh/id_ed25519 -o StrictHostKeyChecking=no" # Parar serviço atual ssh $SSH system "sudo systemctl stop botserver || true" sleep 2 # Copiar binário scp $SSH /opt/gbo/work/build/workspace/target/debug/botserver system:/tmp/botserver # Instalar e reiniciar ssh $SSH system " sudo mv /tmp/botserver /opt/gbo/bin/botserver sudo chmod +x /opt/gbo/bin/botserver sudo chown gbuser:gbuser /opt/gbo/bin/botserver sudo systemctl start botserver " # Aguardar inicializaçãoo sleep 5 # Verificar deploy ssh $SSH system "curl -sf http://localhost:8080/health && echo '✅ Deploy OK'" || echo "âš ï¸ Health check falhou" - name: Cleanup if: always() run: | echo "=== Cleanup ===" rm -rf /opt/gbo/work/build