| الملخص | Discourse GitHub يسمح للمشرفين بتعيين شارات للمستخدمين بناءً على مساهماتهم في GitHub. كما يسمح للمستخدمين بإنشاء ارتباطات مرجعية (Linkbacks) وروابط دائمة (Permalinks) وعرض حالة طلبات السحب (PR) المباشرة في معاينات النصوص (oneboxes). | |
| دليل التثبيت | هذا المكون الإضافي مدمج مع نواة Discourse. لا حاجة لتثبيت المكون الإضافي بشكل منفصل. |
الميزات
شارات GitHub
قم بتعيين شارات لمستخدميك بناءً على مساهماتهم في GitHub.
كيفية الاستخدام:
- فعّل إعداد
github badges enabledفي الإعدادات > المكونات الإضافية. - أنشئ رمز وصول (Access Token) من GitHub والصقه في إعداد
github linkback access token. انظر الإرشادات أدناه. - أضف عنوانًا واحدًا أو أكثر لمستودعات GitHub التي تريد مسحها بحثًا عن المساهمات إلى إعداد الموقع
github badges repos.
كيفية عمل عدّاد الشارات:
تقوم الشارات بحساب عمليات الدمج (commits) عبر جميع المستودعات، وعندما يساهم مستخدم في مستودعات متعددة، يتم جمع جميع عمليات الدمج الخاصة به معًا في إجمالي واحد.
شارات المُدمِج (Committer Badges):
| الشارة | عدد عمليات الدمج المطلوبة |
|---|---|
| برونزي | 1 عملية دمج |
| فضي | 25 عملية دمج |
| ذهبي | 1000 عملية دمج |
تدرج الشارات: مع تراكم المساهمات عبر أي من المستودعات التي يتم تتبعها، ينتقل المستخدمون تلقائيًا عبر مستويات الشارات. على سبيل المثال، إذا قام مستخدم بدمج رمز في المستودع A ثم في المستودع B، فإن كلا المساهمتين تُحسبان في إجماليهم، مما يسمح لهم بالتقدم من البرونزي إلى الفضي إلى الذهبي.
الارتباط المرجعي لـ GitHub (GitHub Linkback)
إنشاء ارتباط من طلب سحب (Pull Request) أو عملية دمج في GitHub يعود إلى منشور في Discourse حيث تم ذكره.
كيفية الاستخدام:
- فعّل إعداد
github linkback enabledفي الإعدادات > المكونات الإضافية. - أنشئ رمز وصول (Access Token) من GitHub والصقه في إعداد
github linkback access token. انظر الإرشادات أدناه. - أخيرًا، أضف المشاريع التي ترغب في النشر فيها إلى إعداد الموقع
github linkback projectsبالتنسيقات التالية:username/repositoryللمستودعات المحددةusername/*لجميع مستودعات مستخدم معين
الرابط الدائم لـ GitHub (GitHub Permalink)
استبدال الروابط غير الدائمة في GitHub بـ روابط دائمة.
كيفية الاستخدام:
- فعّل إعداد
github permalinks enabledفي الإعدادات > المكونات الإضافية.
الحالة المباشرة لطلبات السحب (PR Live Status)
عرض مؤشرات الحالة المباشرة في معاينات نصوص (oneboxes) لطلبات السحب على GitHub في المنشورات ورسائل الدردشة. يتم تحديث الحالة تلقائيًا عبر الإشارات البرمجية (webhooks) عند تغيير طلبات السحب على GitHub.
أنواع الحالة
| الحالة | اللون | الوصف |
|---|---|---|
| مسودة (Draft) | رمادي | تم تحديد طلب السحب كمسودة |
| مفتوح (Open) | رمادي | طلب السحب مفتوح وينتظر المراجعة |
| معتمد (Approved) | أخضر | تمت الموافقة على طلب السحب من قبل المراجعين |
| طلب تغييرات (Changes Requested) | برتقالي | طلب المراجعون إجراء تغييرات |
| مُدمَج (Merged) | بنفسجي | تم دمج طلب السحب |
| مغلق (Closed) | أحمر | تم إغلاق طلب السحب دون دمجه |
كيفية الاستخدام:
الخطوة 1: تفعيل الميزة
انتقل إلى الإدارة > الإعدادات > المكونات الإضافية وقم بتعيين github pr status enabled إلى true.
الخطوة 2: تكوين رموز وصول GitHub
لجلب حالة طلبات السحب (خاصة للمستودعات الخاصة)، قم بتكوين رموز وصول GitHub.
الإعداد: github onebox access tokens
التنسيق:
organization_name|ghp_your_token_here
default|ghp_fallback_token_here
يمكنك تحديد رموز وصول لكل منظمة، بالإضافة إلى رمز default يُستخدم كاحتياط. يجب أن يحتوي كل سطر على org_name|token حيث يكون الرمز رمز وصول شخصي من GitHub (كلاسيكي) بصلاحية repo.
مثال:
discourse|ghp_xxxxxxxxxxxxxxxxxxxx
my-company|ghp_yyyyyyyyyyyyyyyyyyyy
default|ghp_zzzzzzzzzzzzzzzzzzzzzz
الخطوة 3: إعداد الإشارات البرمجية (Webhooks) على GitHub (للتحديثات في الوقت الفعلي)
للحصول على تحديثات تلقائية للحالة عند تغيير طلبات السحب، قم بإعداد إشارة برمجية (webhook) على GitHub.
إنشاء سر للإشارة البرمجية:
openssl rand -hex 32
قم بتعيين إعداد الموقع github webhook secret إلى السر الذي قمت بإنشائه.
إنشاء الإشارة البرمجية على GitHub:
يمكنك إنشاء الإشارة البرمجية على مستوى المنظمة (لتغطية جميع المستودعات) أو لكل مستودع على حدة.
لمنظمة:
- انتقل إلى إعدادات المنظمة الخاصة بك
- انتقل إلى الإشارات البرمجية (Webhooks) (تحت قسم Code، planning, and automation)
- انقر على إضافة إشارة برمجية (Add webhook)
لمستودع:
- انتقل إلى إعدادات المستودع الخاص بك
- انتقل إلى الإشارات البرمجية (Webhooks)
- انقر على إضافة إشارة برمجية (Add webhook)
تكوين الإشارة البرمجية:
| الحقل | القيمة |
|---|---|
| عنوان حمولة البيانات (Payload URL) | https://your-discourse-site.com/discourse-github/webhooks/github |
| نوع المحتوى | application/json |
| السر | السر الذي قمت بإنشائه للإشارة البرمجية |
| التحقق من SSL | تمكين (موصى به) |
| الأحداث | حدد “دعني أختار أحداثًا فردية” |
حدد هذه الأحداث:
- طلبات السحب (Pull requests)
- مراجعات طلبات السحب (Pull request reviews)
انقر على إضافة إشارة برمجية (Add webhook) للحفظ.
الخطوة 4: التحقق من الإعداد
- أنشئ منشور اختبار يحتوي على عنوان URL لطلب سحب من GitHub
- تحقق من أن معاينة النص (onebox) تعرض مع رمز الحالة
- غيّر حالة طلب السحب على GitHub (على سبيل المثال، اعتمده، أو أغلقه)
- بعد بضع ثوانٍ، قم بتحديث صفحة Discourse — يجب أن تتغير الحالة
يمكنك التحقق من حالة توصيل الإشارة البرمجية في إعدادات الإشارة البرمجية على GitHub لتأكيد إرسال الأحداث واستلامها بنجاح.
أولوية الحالة
عندما يكون لطلب السحب حالات متعددة (على سبيل المثال، معتمد ولكن هناك أيضًا طلبات لتغييرات)، يتم تحديد الحالة بناءً على الأولوية التالية:
- مُدمَج (أعلى أولوية)
- مغلق
- مسودة
- طلب تغييرات
- معتمد
- مفتوح (افتراضي)
منطق حالة المراجعة
تجلب هذه الميزة معلومات المراجعة من واجهة برمجة تطبيقات GitHub لتحديد حالة الاعتماد:
- تأخذ أحدث مراجعة من كل مراجع
- تتجاهل حالات المراجعة “تم التعليق” و “قيد الانتظار”
- تعرض “طلب تغييرات” إذا طلب أي مراجع إجراء تغييرات
- تعرض “معتمد” فقط إذا كانت هناك مراجعات ولم يطلب أي منها تغييرات
حيث تعمل
- منشورات المنتدى — أي منشور يحتوي على معاينة نص (onebox) لطلب سحب من GitHub
- رسائل الدردشة — تعرض معاينات نصوص (oneboxes) لطلبات السحب في الدردشة الحالة المباشرة أيضًا
ملاحظة: معاينات النصوص المضمنة (عندما يظهر الرابط ضمن النص بدلاً من كونه معاينة كاملة) لا تعرض أيقونات الحالة.
الترحيل من مكون السمة GitHub Status
تستبدل هذه الميزة مكون السمة GitHub Status Indicators. المكونان غير متوافقين ولا يجب استخدامهما معًا.
إذا كنت تستخدم مكون السمة حاليًا:
- قم بإيقاف تعطيل وإزالة مكون السمة
github-status-theme - فعّل هذه الميزة المدمجة عبر إعداد
github pr status enabled
التكوين
رمز وصول GitHub
لكي تعمل ميزة الارتباط المرجعي ويتم منح الشارات لمستخدميك، تحتاج إلى توفير رمز وصول من GitHub. يمكنك إنشاء رمزك هنا: Sign in to GitHub · GitHub.
تتطلب ميزة الارتباط المرجعي صلاحية public_repo، ولا تتطلب منح الشارات أي صلاحية (اترك كل شيء غير محدد إذا كنت تريد الشارات فقط). نظرًا لأن صلاحية public_repo تمنح وصولاً للكتابة إلى المستودعات، نوصي بإنشاء حساب GitHub مؤقت لا يمتلك وصولاً إلى أي مستودعات واستخدامه فقط لإنشاء الرمز.
صلاحيات الرموز حسب الميزة
| الميزة | الصلاحية المطلوبة |
|---|---|
| الشارات | لا توجد صلاحية مطلوبة |
| الارتباط المرجعي | public_repo |
| حالة طلب السحب (مستودعات عامة) | لا توجد صلاحية مطلوبة |
| حالة طلب السحب (مستودعات خاصة) | repo |
مرجع إعدادات الموقع
| الإعداد | الافتراضي | الوصف |
|---|---|---|
enable discourse github plugin |
false |
المفتاح الرئيسي للمكون الإضافي |
github badges enabled |
false |
تفعيل شارات مساهمات GitHub |
github badges repos |
(فارغ) | عناوين URL للمستودعات لتتبعها للحصول على الشارات |
github linkback enabled |
false |
تفعيل الارتباطات المرجعية من GitHub إلى Discourse |
github linkback access token |
(فارغ) | رمز الوصول لميزة الارتباط المرجعي |
github linkback projects |
(فارغ) | المشاريع لإنشاء ارتباطات مرجعية لها |
github permalinks enabled |
false |
استبدال روابط GitHub بروابط دائمة |
github pr status enabled |
false |
تفعيل أيقونات حالة طلبات السحب في معاينات النصوص |
github webhook secret |
(فارغ) | سر للتحقق من توقيع الإشارة البرمجية |
github onebox access tokens |
(فارغ) | رموز الوصول لواجهة برمجة تطبيقات GitHub (التنسيق: org|token) |
التفاصيل التقنية
استخدام واجهة برمجة تطبيقات حالة طلب السحب
عند إنشاء معاينة نص (onebox) لطلب سحب من GitHub، يقوم Discourse بإجراء ما يصل إلى استدعاءين لواجهة برمجة التطبيقات:
- بيانات طلب السحب:
GET /repos/{owner}/{repo}/pulls/{number}— يجلب معلومات أساسية عن طلب السحب بما في ذلك الحالة، حالة الدمج، وحالة المسودة - المراجعات:
GET /repos/{owner}/{repo}/pulls/{number}/reviews— يجلب بيانات المراجعة لتحديد حالة الاعتماد
تستخدم هذه الاستدعاءات رمز الوصول الذي قمت بتكوينه إذا كان متاحًا، مما يسمح بالوصول إلى المستودعات الخاصة.
أمان الإشارات البرمجية (Webhooks)
يتم التحقق من طلبات الإشارات البرمجية باستخدام التحقق من توقيع HMAC-SHA256. يقوم GitHub بتوقيع حمولة البيانات للإشارة البرمجية باستخدام السر الخاص بك، ويقوم Discourse بالتحقق من هذا التوقيع قبل المعالجة. يتم رفض التواقيع غير الصالحة باستجابة 403.
أحداث الإشارات البرمجية التي تحفز التحديثات
- تغييرات حالة طلب السحب (مفتوح، مغلق، مُعاد فتحه)
- دمج طلب السحب
- تغييرات حالة المسودة (تحويله إلى مسودة، جاهز للمراجعة)
- تقديم مراجعات طلبات السحب
- تعديل المراجعات أو إزالتها
اعتبارات الأداء
- يتم جدولة إعادة المعالجة (Rebaking) كخلفية ذات أولوية منخفضة لتجنب التأثير على أداء الموقع
- يتم إعادة معالجة المنشورات/الرسائل التي تحتوي على معاينات نصوص (oneboxes) كاملة لطلبات سحب من GitHub فقط (يتم تخطي معاينات النصوص المضمنة)
- تتخطي إعادة معالجة رسائل الدردشة الإشعارات لمنع التنبيهات المكررة
سجل التغييرات (CHANGELOG)
2025-12-10
- إصلاح: تخطي الإشعارات عند إعادة معالجة رسائل الدردشة من إشارات GitHub البرمجية
2025-12-09
- إصلاح: تخطي إعادة معالجة المنشورات التي تحتوي على معاينات نصوص مضمنة لطلبات سحب من GitHub
- إصلاح: تجنب الحالة الوسيطة عند إعادة معالجة المنشورات التي تحتوي على معاينات نصوص
- إصلاح: إعادة معالجة رسائل الدردشة عند تغيير حالة طلب سحب من GitHub
- تجربة المستخدم: استخدام الارتفاع الأدنى (min-height) لمنع انزياح التخطيط عند تغيير أيقونة الحالة
- تجربة المستخدم: تقليل حجم أيقونة حالة طلب سحب من GitHub على الهاتف المحمول
2025-12-08
- ميزة: إضافة حالة “طلب تغييرات” إلى معاينات نصوص طلبات السحب على GitHub
2025-12-04
- ميزة: أيقونة الحالة المباشرة لطلبات السحب على GitHub
2025-11-10
- ميزة: السماح وقائمة الاستبعاد للارتباطات المرجعية
2025-11-08
- ميزة: إضافة قائمة استبعاد للفئات لارتباطات GitHub المرجعية
2024-12-20
- تطوير: نقل discourse-github إلى النواة (لم يعد يتطلب تثبيتًا منفصلاً)
