# 🚨 CORREÇÃO CRÍTICA - Filtro de Branch no Auto-Update

## 📊 Problema Identificado

**Sintoma:** Ao criar uma release na branch `main`, a instalação `dev` também era atualizada e vice-versa.

**Causa:** O webhook processava **TODAS** as releases publicadas, sem verificar se a release pertencia à branch configurada na instalação.

**Status:** ✅ **CORRIGIDO**

---

## 🔧 Correção Aplicada

### Arquivo Modificado:
- `backend/app/Http/Controllers/Webhooks/UpdateWebhookController.php`

### Mudança:
Adicionada verificação de branch antes de processar atualizações:

1. **Verifica `target_commitish`** no payload da release
2. **Compara com a branch configurada** no `GiteaSettings`
3. **Só processa atualização** se a branch corresponder
4. **Ignora releases de outras branches** completamente

### Código Adicionado:

```php
// CRÍTICO: Verificar se a release pertence à branch configurada
$configuredBranch = $settings->branch ?? 'main';
$releaseBranch = $targetCommitish; // Geralmente já é a branch

// VERIFICAÇÃO CRÍTICA: Só processar se a branch corresponder
if ($releaseBranch !== $configuredBranch) {
    Log::info('Release branch does NOT match, SKIPPING update', [
        'release_branch' => $releaseBranch,
        'configured_branch' => $configuredBranch,
    ]);
    return; // Não processar releases de outras branches
}
```

---

## 🚀 APLICAR NO SERVIDOR

### Passo 1: Pull das Correções

```bash
cd /var/www/gestorstream

# Pull das correções
git pull origin main

# Se der conflito:
git stash
git pull origin main
```

### Passo 2: Limpar Cache

```bash
cd backend

php artisan config:clear
php artisan cache:clear
php artisan optimize:clear
```

### Passo 3: Reiniciar PHP-FPM

```bash
sudo systemctl restart php8.2-fpm
```

---

## ✅ Verificação

### 1. Verificar Configuração de Branch

Em cada instalação, verificar se a branch está configurada corretamente:

**Instalação PRODUÇÃO (main):**
- Admin > Configurações > Atualizações > Configuração do Gitea
- **Branch:** `main` ✅

**Instalação DESENVOLVIMENTO (dev):**
- Admin > Configurações > Atualizações > Configuração do Gitea
- **Branch:** `dev` ✅

### 2. Testar

**Teste 1: Release na branch `main`**
1. Criar release na branch `main`
2. **Resultado esperado:**
   - ✅ Instalação `main` (produção) atualiza
   - ❌ Instalação `dev` (desenvolvimento) **NÃO** atualiza

**Teste 2: Release na branch `dev`**
1. Criar release na branch `dev`
2. **Resultado esperado:**
   - ✅ Instalação `dev` (desenvolvimento) atualiza
   - ❌ Instalação `main` (produção) **NÃO** atualiza

### 3. Verificar Logs

```bash
# Ver logs do webhook
tail -f storage/logs/laravel.log | grep UpdateWebhook
```

**Quando uma release de outra branch for recebida, você verá:**

```
[INFO] UpdateWebhook: Release branch does NOT match configured branch, SKIPPING update
release_branch: "main"
configured_branch: "dev"
action: "This installation will NOT be updated because release is from different branch"
```

---

## 📋 Checklist de Aplicação

- [ ] Pull das correções executado
- [ ] Cache limpo
- [ ] PHP-FPM reiniciado
- [ ] Branch configurada corretamente em cada instalação
- [ ] Teste com release na branch `main` (só produção atualiza)
- [ ] Teste com release na branch `dev` (só desenvolvimento atualiza)
- [ ] Logs verificados

---

## 🎯 Resultado Esperado

Após a correção:

✅ **Instalação PRODUÇÃO (`main`):**
- Atualiza apenas quando release é criada na branch `main`
- **Ignora** releases da branch `dev`

✅ **Instalação DESENVOLVIMENTO (`dev`):**
- Atualiza apenas quando release é criada na branch `dev`
- **Ignora** releases da branch `main`

---

## 🔍 Como Funciona

1. **Webhook recebido** do Gitea
2. **Extrai `target_commitish`** do payload (geralmente é a branch)
3. **Compara com `settings->branch`** configurada
4. **Se corresponder:** Processa atualização ✅
5. **Se NÃO corresponder:** Ignora completamente ❌

---

## ⚠️ Importante

- Certifique-se de que cada instalação tem a **branch correta** configurada
- Releases devem ser criadas na branch correspondente
- Se `target_commitish` for um SHA (raro), o sistema assume a branch configurada por segurança

---

**Tempo estimado:** 2 minutos  
**Resultado:** Instalações isoladas por branch! 🚀
