
# Automatización

La automatización de Rudel evita que se acumulen sandboxes desechables indefinidamente. Un evento horario de WP-Cron, `rudel_scheduled_cleanup`, puede:

- ejecutar la política de limpieza (vencimiento, antigüedad e inactividad)
- limpiar las ramas fusionadas
- informar sobre los sandboxes vencidos o próximos a vencer

## Configuración

La automatización lee estas claves de la opción `rudel_config`. Consulte la lista completa en [Configuración](https://rudel.inline0.dev/es/docs/configuration).

| Clave | Propósito | Valor predeterminado |
|-------|-----------|----------------------|
| `auto_cleanup_enabled` | Ejecuta la política de limpieza en cada evento | `1` |
| `auto_cleanup_merged` | También elimina los sandboxes con ramas de worktree fusionadas de Git | `0` |
| `expiring_environment_notice_days` | Informa sobre los sandboxes que vencen dentro de N días | `0` |
| `max_age_days` | Límite de antigüedad usado por la política de limpieza | `0` |
| `max_idle_days` | Límite de inactividad usado por la política de limpieza | `0` |
| `default_ttl_days` | Vencimiento asignado a los nuevos sandboxes | `0` |

Con los valores predeterminados, el evento está programado, pero solo elimina los sandboxes cuyo vencimiento explícito ya pasó, porque no hay un límite de antigüedad o inactividad ni un TTL predeterminado.

## WP-Cron

La activación programa el evento y cada solicitud vuelve a comprobar la programación: el evento existe mientras cualquiera de `auto_cleanup_enabled`, `auto_cleanup_merged` o `expiring_environment_notice_days` no sea cero; de lo contrario, se elimina. La desactivación lo elimina.

No hay comandos de automatización. Cambie los ajustes en `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` muestra `Auto cleanup`, `Auto cleanup merged`, `Expiry notice days` y `Automation scheduled`.

## Informes de vencimiento

Cuando se establece `expiring_environment_notice_days`, cada ejecución recopila los sandboxes cuyo `expires_at` vence dentro de esa cantidad de días y los pasa a la acción `rudel_after_automation_expiring_environments`, separados en `expiring` y `expired`. Rudel no envía notificaciones por sí mismo; conecte la acción para avisar a los propietarios.

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

## Ejecutarlo ahora

Use la limpieza manual para ejecuciones locales o de CI deterministas:

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

Desde PHP, `Rudel::run_automation()` ejecuta las mismas tareas que el evento cron.
