
# Automazione

L'automazione di Rudel impedisce che le sandbox usa e getta si accumulino senza fine. Un evento WP-Cron orario, `rudel_scheduled_cleanup`, può:

- eseguire la policy di pulizia (scadenza, età e inattività)
- eseguire la pulizia dei branch uniti
- segnalare le sandbox scadute o prossime alla scadenza

## Configurazione

L'automazione legge queste chiavi dall'opzione `rudel_config`. L'elenco completo è disponibile in [Configurazione](https://rudel.inline0.dev/it/docs/configuration).

| Chiave | Scopo | Predefinito |
|-----|---------|---------|
| `auto_cleanup_enabled` | Esegue la policy di pulizia a ogni evento | `1` |
| `auto_cleanup_merged` | Rimuove anche i branch dei worktree Git uniti | `0` |
| `expiring_environment_notice_days` | Segnala le sandbox in scadenza entro N giorni | `0` |
| `max_age_days` | Limite di età usato dalla policy di pulizia | `0` |
| `max_idle_days` | Limite di inattività usato dalla policy di pulizia | `0` |
| `default_ttl_days` | Scadenza assegnata alle nuove sandbox | `0` |

Con le impostazioni predefinite, l'evento è pianificato ma rimuove solo le sandbox con una scadenza esplicita passata, perché non è impostato alcun limite di età o inattività né un TTL predefinito.

## WP-Cron

L'attivazione pianifica l'evento e a ogni richiesta ne controlla di nuovo la pianificazione: l'evento esiste se uno tra `auto_cleanup_enabled`, `auto_cleanup_merged` o `expiring_environment_notice_days` è diverso da zero, altrimenti viene rimosso. La disattivazione lo rimuove.

Non ci sono comandi di automazione. Modificate le impostazioni in `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`.

## Report sulle scadenze

Quando è impostato `expiring_environment_notice_days`, ogni esecuzione raccoglie le sandbox con una `expires_at` entro quel numero di giorni e le passa all'azione `rudel_after_automation_expiring_environments`, suddividendole in `expiring` e `expired`. Rudel non invia notifiche autonomamente; collegate l'azione per avvisare i proprietari.

```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'] );
        }
    }
);
```

## Eseguirla ora

Usate la pulizia manuale per esecuzioni locali o CI deterministiche:

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

Da PHP, `Rudel::run_automation()` esegue le stesse attività dell'evento cron.
