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: إضافة الأسرار (للنشر)

  1. انتقل إلى مستودعك على GitHub → Settings → Secrets and variables → Actions
  2. أضف أسرار المستودع هذه:
السر القيمة
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 يعمل، ثم ينجح أو يفشل.