CI/CD: الاختبار والنشر الآليان
يشير اختصار CI/CD إلى التكامل المستمر / النشر المستمر. وهو الأتمتة التي تعمل في كل مرة تدفع فيها الكود.
لماذا تحتاج إليه
بدون CI/CD:
أنت: «أصلحت الخطأ البرمجي!»
زميلك: «رائع، هل شغّلت الاختبارات؟»
أنت: «همم... دعني أتحقق.»
زميلك: «هل فحصت الكود؟»
أنت: «أظن ذلك.»
زميلك: «هل نشرت؟»
أنت: «سأفعل ذلك الآن... انتظر، يظهر لي خطأ.»
مع CI/CD:
أنت: *تدفع الكود*
GitHub: يشغّل الاختبارات → يشغّل الفحص → ينشر تلقائيًا
أنت: «الروبوت تكفّل بكل شيء.»
خط الأنابيب
تدفع الكود ──▶ GitHub ──▶ CI (الاختبارات + الفحص) ──▶ النشر (Hugging Face)
│
├── نجاح → النشر
└── فشل → تنبيه بالبريد
الملفات في هذا المشروع
.github/workflows/ci.yml — يعمل عند كل دفع
name: CI
on: [push, pull_request]
jobs:
lint-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- run: pip install ruff pytest
- run: ruff check backend/
- run: pytest backend/tests/ -v
ما الذي يفعله:
1. يسحب الكود الخاص بك إلى جهاز Ubuntu نظيف
2. يثبّت Python + التبعيات
3. يشغّل ruff check (فحص الكود)
4. يشغّل pytest -v (الاختبارات)
.github/workflows/deploy.yml — يعمل عند الدمج في main
مثل CI، لكنه يدفع كود الواجهة الخلفية إلى Hugging Face Spaces أيضًا إذا نجح الفحص والاختبارات.
كيف تضبطه
الخطوة 1: الدفع إلى GitHub
git remote add origin https://github.com/YOUR_USERNAME/aiproject.git
git push -u origin main
سيكتشف GitHub مجلد .github/workflows/ تلقائيًا ويشغّل خط أنابيب CI.
الخطوة 2: إضافة الأسرار (للنشر)
- انتقل إلى مستودعك على GitHub → Settings → Secrets and variables → Actions
- أضف أسرار المستودع هذه:
| السر | القيمة |
|---|---|
HF_TOKEN |
رمز كتابة في Hugging Face (Settings → Access Tokens → New token → write) |
HF_USERNAME |
اسم المستخدم الخاص بك في Hugging Face |
الخطوة 3: شاهده أثناء العمل
تظهر كل عملية دفع الآن في تبويب Actions في مستودعك على GitHub:
✓ CI: lint + test passed
✓ Deploy: pushed to Hugging Face Spaces
قائمة التحقق قبل النشر
قبل النشر، يتحقق خط أنابيب CI من:
| الفحص | ما يكتشفه |
|---|---|
ruff check |
أخطاء صياغية في الكود، واستيرادات غير مستخدمة، ومشكلات في التسمية |
pytest |
نقاط النهاية المعطلة، وأنواع الإرجاع الخاطئة، والحالات الحدّية |
يجب أن ينجح الاثنان قبل أن تعمل خطوة النشر. وإذا فشل أي منهما، تصلك رسالة بريد إلكتروني ويُتخطّى النشر.
جرّبه
ادفع تغييرًا وراقب تبويب Actions:
# أجرِ تغييرًا
echo "# testing" >> backend/app/__init__.py
# أنشئ commit وادفع
git add .
git commit -m "Test CI pipeline"
git push
# راقب: https://github.com/YOUR_USERNAME/aiproject/actions
من المفترض أن ترى سير عمل CI يعمل، ثم ينجح أو يفشل.