
# Otomatisasi

Otomatisasi Rudel mencegah sandbox sementara menumpuk selamanya. Satu event `rudel_scheduled_cleanup` WP-Cron per jam dapat:

- menjalankan kebijakan pembersihan (masa berlaku, usia, dan waktu tidak aktif)
- menjalankan pembersihan cabang yang telah digabung
- melaporkan sandbox yang sudah melewati masa berlaku atau hampir kedaluwarsa

## Konfigurasi

Otomatisasi membaca kunci ini dari opsi `rudel_config`. Daftar lengkapnya ada di [Konfigurasi](https://rudel.inline0.dev/id/docs/configuration).

| Kunci | Tujuan | Default |
|-----|---------|---------|
| `auto_cleanup_enabled` | Menjalankan kebijakan pembersihan pada setiap event | `1` |
| `auto_cleanup_merged` | Juga menghapus cabang worktree Git yang telah digabung | `0` |
| `expiring_environment_notice_days` | Melaporkan sandbox yang akan kedaluwarsa dalam N hari | `0` |
| `max_age_days` | Batas usia yang digunakan kebijakan pembersihan | `0` |
| `max_idle_days` | Batas waktu tidak aktif yang digunakan kebijakan pembersihan | `0` |
| `default_ttl_days` | Masa berlaku untuk sandbox baru | `0` |

Dengan default, event dijadwalkan tetapi hanya menghapus sandbox yang memiliki masa berlaku eksplisit di masa lalu, karena batas usia dan waktu tidak aktif serta TTL default tidak ditetapkan.

## WP-Cron

Aktivasi menjadwalkan event, dan setiap permintaan memeriksa ulang jadwal: event ada selama salah satu dari `auto_cleanup_enabled`, `auto_cleanup_merged`, atau `expiring_environment_notice_days` bernilai bukan nol, dan dihapus jika tidak. Penonaktifan menghapusnya.

Tidak ada perintah otomatisasi. Ubah pengaturan di `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` menampilkan `Auto cleanup`, `Auto cleanup merged`, `Expiry notice days`, dan `Automation scheduled`.

## Laporan masa berlaku

Jika `expiring_environment_notice_days` ditetapkan, setiap proses mengumpulkan sandbox dengan `expires_at` dalam jumlah hari tersebut dan meneruskannya ke tindakan `rudel_after_automation_expiring_environments`, yang dibagi menjadi `expiring` dan `expired`. Rudel tidak mengirim notifikasi sendiri; hubungkan tindakan tersebut ke notifikasi bagi pemilik.

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

## Menjalankannya sekarang

Gunakan pembersihan manual untuk proses lokal atau CI yang hasilnya dapat dipastikan:

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

Dari PHP, `Rudel::run_automation()` menjalankan tugas yang sama dengan event cron.
