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

Автоматизація Rudel не дає тимчасовим ізольованим середовищам накопичуватися безстроково. Щогодини може запускатися подія WP-Cron `rudel_scheduled_cleanup`, яка:

- застосовує політику очищення (за терміном дії, віком і часом бездіяльності)
- виконує очищення гілок, які було об’єднано
- повідомляє про середовища з завершеним або близьким до завершення терміном дії

## Конфігурація

Автоматизація читає ці ключі з параметра `rudel_config`. Повний список наведено в розділі [Конфігурація](https://rudel.inline0.dev/uk/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.
