
# Automatyzacja

Automatyzacja Rudel zapobiega nieograniczonemu gromadzeniu się tymczasowych piaskownic. Jedno cogodzinne zdarzenie WP-Cron, `rudel_scheduled_cleanup`, może:

- uruchamiać zasady czyszczenia (termin wygaśnięcia, wiek i bezczynność)
- uruchamiać czyszczenie scalonych gałęzi
- zgłaszać piaskownice, których termin wygaśnięcia minął lub wkrótce minie

## Konfiguracja

Automatyzacja odczytuje te klucze z opcji `rudel_config`. Pełną listę znajdziesz w sekcji [Konfiguracja](https://rudel.inline0.dev/pl/docs/configuration).

| Klucz | Przeznaczenie | Domyślnie |
|-----|---------|---------|
| `auto_cleanup_enabled` | Uruchamiaj zasady czyszczenia przy każdym zdarzeniu | `1` |
| `auto_cleanup_merged` | Usuwaj również piaskownice z połączonymi gałęziami drzew roboczych Git | `0` |
| `expiring_environment_notice_days` | Zgłaszaj piaskownice, których termin wygaśnięcia przypada w ciągu N dni | `0` |
| `max_age_days` | Limit wieku używany przez zasady czyszczenia | `0` |
| `max_idle_days` | Limit bezczynności używany przez zasady czyszczenia | `0` |
| `default_ttl_days` | Termin wygaśnięcia nowych piaskownic | `0` |

Przy ustawieniach domyślnych zdarzenie jest zaplanowane, ale usuwa tylko piaskownice, których jawnie ustawiony termin wygaśnięcia już minął, ponieważ nie określono limitu wieku ani bezczynności i nie ustawiono domyślnego czasu życia.

## WP-Cron

Aktywacja planuje zdarzenie, a każde żądanie ponownie sprawdza harmonogram: zdarzenie istnieje, gdy którakolwiek z wartości `auto_cleanup_enabled`, `auto_cleanup_merged` lub `expiring_environment_notice_days` jest różna od zera, a w przeciwnym razie zostaje usunięte. Dezaktywacja usuwa je.

Nie ma poleceń automatyzacji. Zmień ustawienia w `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` wyświetla `Auto cleanup`, `Auto cleanup merged`, `Expiry notice days` i `Automation scheduled`.

## Raporty o terminach wygaśnięcia

Po ustawieniu `expiring_environment_notice_days` każde uruchomienie zbiera piaskownice, których `expires_at` przypada w ciągu wskazanej liczby dni, i przekazuje je do działania `rudel_after_automation_expiring_environments` w podziale na `expiring` i `expired`. Rudel samo nie wysyła powiadomień; podepnij do działania funkcję powiadamiania właścicieli.

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

## Uruchamianie teraz

Użyj ręcznego czyszczenia, aby uzyskać deterministyczne uruchomienia lokalne lub w CI:

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

Z poziomu PHP polecenie `Rudel::run_automation()` uruchamia te same zadania co zdarzenie cron.
