
# Автоматизация

Автоматизация Rudel не дает временным песочницам накапливаться бесконечно. Одно ежечасное событие WP-Cron, `rudel_scheduled_cleanup`, может:

- выполнять политику очистки (срок действия, возраст и бездействие)
- удалять песочницы со слитыми ветками
- сообщать о песочницах с истекшим или близким к истечению сроком действия

## Настройка

Автоматизация считывает эти ключи из параметра `rudel_config`. Полный список приведен в разделе [Конфигурация](https://rudel.inline0.dev/ru/docs/configuration).

| Ключ | Назначение | По умолчанию |
|-----|---------|---------|
| `auto_cleanup_enabled` | Запускать политику очистки при каждом событии | `1` |
| `auto_cleanup_merged` | Также удалять песочницы со слитыми ветками рабочего дерева Git | `0` |
| `expiring_environment_notice_days` | Сообщать о песочницах, срок действия которых истекает в течение N дней | `0` |
| `max_age_days` | Ограничение по возрасту для политики очистки | `0` |
| `max_idle_days` | Ограничение по бездействию для политики очистки | `0` |
| `default_ttl_days` | Срок действия для новых песочниц | `0` |

С настройками по умолчанию событие запланировано, но удаляет только песочницы с явно заданным истекшим сроком действия, поскольку ограничения по возрасту и бездействию, а также срок действия по умолчанию не заданы.

## WP-Cron

При активации событие планируется, а каждый запрос повторно проверяет расписание: событие существует, пока любое из значений `auto_cleanup_enabled`, `auto_cleanup_merged` или `expiring_environment_notice_days` не равно нулю; в противном случае оно удаляется. Деактивация удаляет его.

Команд автоматизации нет. Измените настройки в `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` показывает `Auto cleanup`, `Auto cleanup merged`, `Expiry notice days` и `Automation scheduled`.

## Отчеты об истечении срока действия

Если задано `expiring_environment_notice_days`, каждый запуск собирает песочницы, срок действия `expires_at` которых истекает в течение указанного количества дней, и передает их действию `rudel_after_automation_expiring_environments`, разделенными на `expiring` и `expired`. Rudel самостоятельно не отправляет уведомления; подключите действие, чтобы уведомлять владельцев.

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

## Запуск вручную

Для детерминированных локальных запусков или запусков CI используйте ручную очистку:

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

Из PHP команда `Rudel::run_automation()` выполняет те же задачи, что и событие cron.
