# CI/CD - Avanzato Tecnologia

## Estrutura do Pipeline

```
Push para main/master
       |
       v
+------------------+     +------------------+     +------------------+
|    BUILD         | --> | PRESERVAR ASSETS | --> |  DEPLOY          |
|                  |     |                  |     |                  |
| - Checkout       |     | - Logo           |     | - SCP para VPS   |
| - npm install    |     | - Imagens        |     | - Limpar cache   |
| - npm run build  |     | - Favicon        |     | - Notificar      |
+------------------+     +------------------+     +------------------+
```

---

## Configurar Secrets no GitHub

Va em: **Settings > Secrets and variables > Actions > New repository secret**

| Secret | Descricao | Exemplo |
|--------|-----------|---------|
| `SSH_HOST` | IP ou dominio do servidor | `201.45.120.30` ou `avanzato.com.br` |
| `SSH_USER` | Usuario SSH | `root` ou `deploy` |
| `SSH_PRIVATE_KEY` | Chave SSH privada | `-----BEGIN OPENSSH PRIVATE KEY-----...` |
| `SSH_PORT` | Porta SSH (opcional) | `22` |
| `DEPLOY_PATH` | Caminho no servidor | `/var/www/avanzato` |
| `STAGING_PATH` | Caminho staging (opcional) | `/var/www/avanzato-staging` |

### Como gerar a chave SSH:

```bash
# No seu computador (NAO no servidor):
ssh-keygen -t ed25519 -C "github-actions" -f ~/.ssh/github_actions

# Copiar publica para o servidor:
ssh-copy-id -i ~/.ssh/github_actions.pub root@SEU_SERVIDOR

# Copiar privada para o GitHub Secret:
cat ~/.ssh/github_actions
# Cole o conteudo inteiro no secret SSH_PRIVATE_KEY
```

---

## Estrutura de Branches

```
main/master      --> Deploy automatico para producao
staging          --> Deploy automatico para staging (se existir)
feature/*        --> Apenas build (sem deploy)
hotfix/*         --> Apenas build (sem deploy)
```

---

## Como Funciona

### Cenario 1: Deploy Automatico
```
1. Voce faz push para main
2. GitHub Actions executa automaticamente
3. Build + Deploy em ~2 minutos
4. Site atualizado!
```

### Cenario 2: Deploy Manual
```
1. Va em Actions > Build e Deploy
2. Clique "Run workflow"
3. Escolha: production ou staging
4. Clique "Run"
```

### Cenario 3: Pull Request
```
1. Cria PR para main
2. CI executa build (testa se compila)
3. NAO faz deploy
4. Merge aprovado? Deploy automatico!
```

---

## Assets Customizados (Logo, Imagens)

Para preservar assets apos o deploy automatico:

### 1. Commitar assets no repositorio

```bash
git add custom-assets/logo/logo.png
git add custom-assets/images/
git commit -m "Adiciona logo e imagens customizadas"
git push origin main
```

### 2. O pipeline faz sozinho

O workflow executa automaticamente:
```bash
bash scripts/preserve-assets.sh dist/
```

---

## Monitore os Deploys

- **GitHub Actions**: https://github.com/SEU_USUARIO/avanzato-site/actions
- **Status**: Check verde = sucesso, X vermelho = falha
- **Logs**: Clique no workflow para ver detalhes

---

## Troubleshooting

### Deploy falhou?

1. **Verifique os secrets**: Settings > Secrets > Actions
2. **Verifique a chave SSH**: `ssh -i ~/.ssh/github_actions root@SEU_SERVIDOR`
3. **Verifique permissoes**: O usuario precisa de acesso de escrita no DEPLOY_PATH
4. **Verifique logs**: Actions > Clique no workflow > Veja o passo que falhou

### Assets nao preservados?

1. Verifique se `custom-assets/` esta no repositorio
2. Verifique se os arquivos estao comitados: `git ls-files custom-assets/`
3. Verifique os logs do passo "Preservar assets customizados"

---

*Configurado em: Maio 2026*
