
# Automação

A automação de Rudel impede que ambientes isolados descartáveis se acumulem indefinidamente. Um evento WP-Cron por hora, `rudel_scheduled_cleanup`, pode:

- executar a política de limpeza (expiração, idade e inatividade)
- limpar branches mesclados
- informar sobre ambientes isolados expirados ou próximos da expiração

## Configuração

A automação lê estas chaves da opção `rudel_config`. A lista completa está em [Configuração](https://rudel.inline0.dev/pt/docs/configuration).

| Chave | Finalidade | Padrão |
|-----|---------|---------|
| `auto_cleanup_enabled` | Executar a política de limpeza em cada evento | `1` |
| `auto_cleanup_merged` | Também remover ambientes isolados com branches de worktree Git mesclados | `0` |
| `expiring_environment_notice_days` | Informar sobre ambientes isolados que expiram em até N dias | `0` |
| `max_age_days` | Limite de idade usado pela política de limpeza | `0` |
| `max_idle_days` | Limite de inatividade usado pela política de limpeza | `0` |
| `default_ttl_days` | Prazo de expiração dos novos ambientes isolados | `0` |

Com os padrões, o evento é agendado, mas só remove ambientes isolados com uma expiração explícita no passado, pois não há limite de idade ou inatividade nem TTL padrão definido.

## WP-Cron

A ativação agenda o evento, e cada solicitação verifica novamente o agendamento: o evento existe enquanto qualquer um de `auto_cleanup_enabled`, `auto_cleanup_merged` ou `expiring_environment_notice_days` for diferente de zero e é removido caso contrário. A desativação o remove.

Não há comandos de automação. Altere as configurações em `rudel_config`:

```bash
wp option update rudel_config '{"auto_cleanup_enabled":1,"max_idle_days":7,"expiring_environment_notice_days":2}' --format=json
wp rudel status
```

`wp rudel status` mostra `Auto cleanup`, `Auto cleanup merged`, `Expiry notice days` e `Automation scheduled`.

## Relatórios de expiração

Quando `expiring_environment_notice_days` está definido, cada execução reúne os ambientes isolados com `expires_at` dentro desse número de dias e os passa à ação `rudel_after_automation_expiring_environments`, divididos em `expiring` e `expired`. Rudel não envia notificações por conta própria; associe a ação a uma notificação dos responsáveis.

```php
add_action(
    'rudel_after_automation_expiring_environments',
    function ( array $report ): void {
        foreach ( $report['expiring'] as $sandbox ) {
            error_log( $sandbox['id'] . ' expires at ' . $sandbox['expires_at'] );
        }
    }
);
```

## Executar agora

Use a limpeza manual para execuções locais ou de CI determinísticas:

```bash
wp rudel cleanup --dry-run
wp rudel cleanup
```

A partir de PHP, `Rudel::run_automation()` executa as mesmas tarefas do evento cron.
