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

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

- изпълнява правилата за почистване (изтичане на срока, възраст и неактивност)
- почиства клонове, слети с основния клон
- отчита пясъчници с изтекъл или близък до изтичане срок

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

Автоматизацията чете тези ключове от настройката `rudel_config`. Пълният списък е в [Configuration](https://rudel.inline0.dev/bg/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.
