# Pipeline de Publicação Automática no pub.dev

Este documento explica como configurar e usar o pipeline do GitLab para publicar automaticamente o pacote Flutter no pub.dev quando uma tag é criada.

## Configuração Inicial

### 1. Configurar Credenciais do pub.dev

Primeiro, você precisa gerar as credenciais do pub.dev:

```bash
# Execute este comando localmente para gerar as credenciais
flutter pub login
```

Isso criará um arquivo de credenciais em `~/.pub-cache/credentials.json`. Você precisa codificar este arquivo em base64 e adicioná-lo como variável de ambiente no GitLab.

#### No Linux/macOS:
```bash
base64 ~/.pub-cache/credentials.json
```

#### No Windows:
```powershell
[Convert]::ToBase64String([IO.File]::ReadAllBytes("$env:APPDATA\Pub\Cache\credentials.json"))
```

### 2. Configurar Variáveis de Ambiente no GitLab

Acesse seu projeto no GitLab e vá para:
**Settings > CI/CD > Variables**

Adicione as seguintes variáveis:

- **PUB_CREDENTIALS**: Cole o conteúdo base64 das credenciais
  - Tipo: Variable
  - Protected: ✅ (recomendado)
  - Masked: ✅ (recomendado)

- **GITLAB_TOKEN** (opcional, para criar releases automáticos):
  - Crie um Personal Access Token no GitLab com scope `api`
  - Tipo: Variable
  - Protected: ✅
  - Masked: ✅

## Como Usar

### 1. Preparação para Release

1. **Atualize a versão no `pubspec.yaml`**:
   ```yaml
   version: 0.5.28  # Nova versão
   ```

2. **Atualize o `CHANGELOG.md`**:
   ```markdown
   ## 0.5.28
   
   ✨ - Nova funcionalidade
   🐛 - Correção de bug
   ```

3. **Commit e push das alterações**:
   ```bash
   git add .
   git commit -m "Bump version to 0.5.28"
   git push origin main
   ```

### 2. Criação da Tag e Publicação

1. **Crie e publique a tag**:
   ```bash
   # A versão da tag deve coincidir com a versão no pubspec.yaml
   git tag 0.5.28
   git push origin 0.5.28
   ```

2. **O pipeline será executado automaticamente**:
   - Executa testes (`flutter analyze` e `flutter test`)
   - Valida se a versão da tag coincide com o `pubspec.yaml`
   - Executa `flutter pub publish --dry-run` para validação
   - **Aguarda confirmação manual** para publicar (por segurança)

3. **Confirme a publicação manualmente**:
   - Acesse **CI/CD > Pipelines** no GitLab
   - Clique no pipeline da tag
   - Clique no botão "Play" no job `publish_to_pub`

## Estrutura do Pipeline

### Stages

1. **test**: Executa análise estática e testes
2. **publish**: Publica no pub.dev e cria release (apenas para tags)

### Jobs

- **test**: Executa sempre (branches e tags)
- **publish_to_pub**: Executa apenas para tags, com confirmação manual
- **create_release**: Cria release no GitLab com conteúdo do changelog (opcional)

## Segurança

- O job de publicação requer **confirmação manual** para evitar publicações acidentais
- As credenciais são armazenadas de forma segura nas variáveis do GitLab
- Validação automática da versão antes da publicação

## Troubleshooting

### Erro de Credenciais
Se ocorrer erro de autenticação:
1. Verifique se a variável `PUB_CREDENTIALS` está configurada corretamente
2. Execute `flutter pub login` localmente e gere novas credenciais
3. Atualize a variável no GitLab

### Erro de Versão
Se a versão não coincidir:
1. Verifique se a versão no `pubspec.yaml` é exatamente igual à tag
2. Não use prefixo `v` na tag (use `0.5.28` em vez de `v0.5.28`)

### Pipeline Falha nos Testes
- Corrija os problemas encontrados pelo `flutter analyze`
- Garanta que todos os testes passem com `flutter test`

## Comandos Úteis

```bash
# Listar tags
git tag -l

# Deletar tag local
git tag -d 0.5.28

# Deletar tag remota
git push origin --delete 0.5.28

# Ver últimas tags
git tag -l --sort=-version:refname | head -10

# Criar tag anotada com mensagem
git tag -a 0.5.28 -m "Release 0.5.28"
```
