هنا الـ workflow الكامل لمراجع آلي بـ Claude Opus 4.7 جوا GitHub Actions، التكلفة الفعلية لكل PR، الـ trade-offs الحقيقية، وإمتى الطريقة دي متنفعش أصلاً.
المشكلة باختصار
في فرق كتير بتشتغل على monorepo أو مشروع متوسط (50K–200K سطر كود)، متوسط زمن انتظار المراجعة الأولى بيوصل 18 ساعة. الرقم ده من استطلاع DORA 2025 على فرق الـ mid-size. النتيجة: الـ PR بيبات مفتوح، الـ merge conflict بيزيد، والـ developer بيفتح 3 PRs متوازية علشان ميستناش — وده بيخبّص الـ context.
الحل اللي بتعرضه معظم الشركات هو "شيلة تاني reviewer" أو "branching policy أذكى". الطريقة دي بتفشل في الفرق اللي أقل من 8 مطوّرين، لأن مفيش bandwidth فعلاً.
الفكرة الأساسية: مراجع آلي قبل الإنسان، مش بدل الإنسان
قبل ما ندخل في الكود، خليني أوضح الفكرة بمثال بسيط جداً، عشان لو انت لسه مبتدئ في الـ CI/CD متضيعش.
مثال توضيحي للمبتدئين
تخيل إنك شغّال في مكتب بريد. كل يوم بيجيلك 100 خطاب، منهم 70 عليهم أخطاء واضحة (عنوان ناقص، طابع غلط، ظرف مقطوع). بدل ما الموظف الكبير يفتح الـ 100 خطاب بنفسه، في موظف مبتدئ بيعمل فرز أول: "الـ 70 دول فيهم مشاكل، رجّعهم للمرسِل، والـ 30 الباقيين عدّوا للمراجعة النهائية". الموظف الكبير بقى بيركّز على الحاجات الصعبة بس.
الـ Pull Request هو الخطاب. الـ GitHub Action هو الموظف المبتدئ. الـ Senior Developer هو الموظف الكبير. Claude Opus 4.7 هو عقل الموظف المبتدئ.
التعريف التقني الدقيق
GitHub Actions هو نظام CI/CD مدمج في GitHub بيسمح لك تكتب workflows بصيغة YAML تتشغّل على events معيّنة (push, pull_request, schedule). الـ workflow بيشتغل في runner (VM مؤقت)، وبياخد الـ environment variables والـ secrets من الـ repo settings. Claude API هو REST endpoint من Anthropic بيستقبل prompt + context وبيرجّع completion. الربط بينهم هو سكربت shell أو Node يستدعي الـ API من داخل الـ runner.
الـ Workflow الكامل — خطوة بخطوة
الأربع خطوات الأساسية اللي هنعملها:
- إنشاء ملف
.github/workflows/claude-review.ymlيتشغّل علىpull_request. - جلب الـ diff الخاص بالـ PR باستخدام
gh pr diff. - إرسال الـ diff لـ Claude Opus 4.7 مع system prompt محدد (هنشرحه تحت).
- نشر رد Claude كـ PR review comment عبر
gh api.
الكود الفعلي
ده ملف الـ workflow كامل، قابل للنسخ مباشرة:
]]>