# بناء CI/CD Pipeline على غيمة

## 1. GitHub Actions Workflow

تم إنشاء GitHub Actions Workflow لأتمتة عملية بناء واختبار ونشر التطبيق على منصة Ghaymah Cloud.

يتم تشغيل الـ Workflow عند عمل `push` على فرعي `main` أو `develop`.

الخطوات الأساسية هي:

1. تحميل الكود من GitHub.
2. بناء Docker Image باستخدام `Dockerfile`.
3. تشغيل Container بشكل مؤقت واختبار `/health` للتأكد من أن التطبيق يعمل.
4. نشر التطبيق على بيئة Staging عند استخدام فرع `develop`.
5. نشر التطبيق على Production عند استخدام فرع `main` بعد الحصول على موافقة يدوية.

يتم تخزين بيانات تسجيل الدخول الخاصة بـ Ghaymah داخل GitHub Secrets باستخدام:

* `GHAYMAH_EMAIL`
* `GHAYMAH_PW`

---

## 2. Manual Approval قبل Production

تم استخدام GitHub Environment باسم `production` لإضافة مرحلة موافقة يدوية قبل النشر.

عند وصول الكود إلى فرع `main`، يتم تنفيذ عملية البناء والاختبار أولاً، ثم يتوقف الـ Workflow وينتظر موافقة الشخص المسؤول.

بعد الموافقة فقط يتم تنفيذ عملية النشر على Production باستخدام Ghaymah CLI.

هذا يمنع نشر أي إصدار جديد على Production بشكل تلقائي دون مراجعة.

---

## 3. الفرق بين Staging و Production

### Staging

بيئة تستخدم لاختبار التطبيق قبل نشره للمستخدمين الحقيقيين.

يتم نشر التغييرات عليها بشكل تلقائي من فرع `develop`، ويمكن استخدامها للتأكد من أن التطبيق يعمل بشكل صحيح.

### Production

هي البيئة التي يستخدمها المستخدمون الحقيقيون.

يتم النشر إليها من فرع `main`، ويتم وضع Manual Approval قبل عملية النشر لتقليل احتمالية نشر إصدار يحتوي على أخطاء.

الـ Workflow يكون كالتالي:

`develop → Build & Test → Staging`

`main → Build & Test → Manual Approval → Production`

---

## 4. الربط مع Ghaymah CLI

يتم تثبيت Ghaymah CLI داخل GitHub Actions Runner باستخدام الأمر:

`curl -sSL https://cli.ghaymah.systems/install.sh | bash`

بعد ذلك يتم تسجيل الدخول باستخدام بيانات Ghaymah المخزنة في GitHub Secrets:

`gy auth login`

ثم يتم تنفيذ عملية النشر باستخدام:

`gy resource app launch`

يستخدم Ghaymah CLI ملف `.ghaymah.json` الموجود في جذر المشروع لمعرفة إعدادات التطبيق، مثل:

* اسم التطبيق.
* Project ID.
* الـ Port المستخدم.
* اسم Dockerfile.
* إعدادات الوصول العام.

وبذلك يصبح GitHub Actions مسؤولاً عن أتمتة عملية CI/CD، بينما يقوم Ghaymah CLI بتنفيذ عملية النشر على منصة Ghaymah Cloud.
