
# الأتمتة

تمنع أتمتة Rudel تراكم البيئات المعزولة المؤقتة إلى الأبد. ويمكن لحدث WP-Cron واحد كل ساعة، `rudel_scheduled_cleanup`، أن:

- يشغّل سياسة التنظيف (انتهاء الصلاحية والعمر والخمول)
- يشغّل تنظيف الفروع المدمجة
- يبلغ عن البيئات المعزولة منتهية الصلاحية أو القريبة من انتهائها

## الإعداد

تقرأ الأتمتة هذه المفاتيح من خيار `rudel_config`. تجد القائمة الكاملة في [الإعدادات](https://rudel.inline0.dev/ar/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.
