
# Automatisation

L’automatisation de Rudel évite l’accumulation indéfinie de bacs à sable temporaires. Un événement WP-Cron horaire, `rudel_scheduled_cleanup`, peut :

- appliquer la politique de nettoyage (expiration, ancienneté et inactivité)
- nettoyer les branches fusionnées
- signaler les bacs à sable expirés ou proches de l’expiration

## Configuration

L’automatisation lit ces clés dans l’option `rudel_config`. La liste complète figure dans [Configuration](https://rudel.inline0.dev/fr/docs/configuration).

| Clé | Fonction | Valeur par défaut |
|-----|---------|---------|
| `auto_cleanup_enabled` | Applique la politique de nettoyage à chaque événement | `1` |
| `auto_cleanup_merged` | Supprime également les bacs à sable dont les branches de worktree Git sont fusionnées | `0` |
| `expiring_environment_notice_days` | Signale les bacs à sable expirant dans N jours | `0` |
| `max_age_days` | Limite d’ancienneté utilisée par la politique de nettoyage | `0` |
| `max_idle_days` | Limite d’inactivité utilisée par la politique de nettoyage | `0` |
| `default_ttl_days` | Expiration attribuée aux nouveaux bacs à sable | `0` |

Avec les valeurs par défaut, l’événement est planifié, mais ne supprime que les bacs à sable dont la date d’expiration explicite est passée, car aucune limite d’ancienneté ou d’inactivité ni durée de vie par défaut n’est définie.

## WP-Cron

L’activation planifie l’événement et chaque requête vérifie à nouveau sa planification : l’événement existe tant que l’une des valeurs `auto_cleanup_enabled`, `auto_cleanup_merged` ou `expiring_environment_notice_days` est différente de zéro ; sinon, il est supprimé. La désactivation le supprime.

Il n’existe aucune commande d’automatisation. Modifiez les réglages dans `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` affiche `Auto cleanup`, `Auto cleanup merged`, `Expiry notice days` et `Automation scheduled`.

## Rapports d’expiration

Lorsque `expiring_environment_notice_days` est défini, chaque exécution recueille les bacs à sable dont l’`expires_at` intervient dans le nombre de jours indiqué et les transmet à l’action `rudel_after_automation_expiring_environments`, répartis entre `expiring` et `expired`. Rudel n’envoie aucune notification ; associez une notification à l’action pour prévenir les propriétaires.

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

## L’exécuter maintenant

Utilisez le nettoyage manuel pour des exécutions locales ou CI déterministes :

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

Depuis PHP, `Rudel::run_automation()` exécute les mêmes tâches que l’événement cron.
