الخلفية
يتمنى مطورو القوالب والإضافات بشكل عام استهداف إصدار latest من Discourse دون القلق بشأن التوافق مع الإصدارات الأقدم. لكن المواقع التي تعمل بإصدارات أقدم من Discourse ما زالت بحاجة إلى نسخة من القالب/الإضافة تعمل لديهم.
للسدّ من هذه الفجوة، يمكن إخبار Discourse بفحص نسخة أقدم “مثبتة” (pinned) من القالب/الإضافة. يوجد آليتان لهذا الغرض، يتم فحصهما بالترتيب:
- فروع git باسم
d-compat/<YYYY>.<M>في مستودع القالب/الإضافة (الطريقة الأساسية — موصى بها لجميع الإصدارات المثبتة الجديدة). - ملف YAML باسم
.discourse-compatibilityفي جذر المستودع (الآلية الأصلية، ما زالت مدعومة كحل بديل).
إذا وُجد الاثنان، فإن الفرع له الأولوية.
نظام الفروع d-compat/<YYYY>.<M>
تستخدم إصدارات Discourse أرقاماً تاريخية مثل 2025.5، 2025.6، إلخ. عند تحديث Discourse لإضافة أو قالب من git، يسأل المستودع: “هل لديك فرع باسم d-compat/<YYYY>.<M> يطابق إصداري؟” (مثلاً d-compat/2025.5 لـ Discourse 2025.5.x). إذا كان كذلك، يقوم Discourse بفحص طرف ذلك الفرع بدلاً من main.
لا يتم تنفيذ عملية البحث إلا عندما يكون الفحص المحلي على الفرع الافتراضي للمستودع. إذا كنت قد ثبتّ (pin) عمداً على فرع مختلف، يتم تجاوز منطق d-compat ويتم احترام تثبيتك.
لدعم إصدار أقدم من Discourse بهذا النظام:
- أنشئ فرعاً باسم
d-compat/<YYYY>.<M>من التزامات المعروفة بأنها تعمل على ذلك الإصدار (مثلاًgit checkout -b d-compat/2025.5 <commit>). - ادفعه (push) إلى
origin. قد ترغب في حماية الفرع من الحذف العرضي. - أضف أي التزامات مخصصة للعودة (backport) إلى ذلك الفرع. ستلتقط مواقع Discourse على
2025.5.xهذه التحديثات تلقائياً عند التحديث التالي؛ بينما ستستمر مواقع Discourse الأحدث في تتبع الفرع الافتراضي.
لا تحتاج إلى لمس .discourse-compatibility على الإطلاق عند استخدام الفروع.
إنشاء الفروع تلقائياً (create-d-compat-branch.yml)
في الممارسة العملية، نادراً ما تحتاج إلى إنشاء هذه الفروع يدوياً. تتضمن هياكل القوالب والإضافات الافتراضية عملية d-compat-branch.yml تعمل يومياً، وتتحقق من إصدارات جديدة من نواة Discourse، وتدفع فروع d-compat/<YYYY>.<M> المطابقة عند الحاجة.
إذا كان مستودعك قد أُنشئ من نسخة أقدم من الهياكل، فما عليك سوى نسخ ملف d-compat-branch.yml إلى مجلد .github/workflows لديك لتفعيله.
عكس تصحيح إلى فرع d-compat
عندما تكون قد أضفت تصحيحاً على الفرع الافتراضي والذي يحتاج أيضاً للوصول إلى المواقع على إصدار أقدم من Discourse:
-
أنشئ فرعاً من فرع d-compat المستهدف ونسخ التصحيح (cherry-pick):
git fetch origin git checkout -b backport/my-fix-2025.5 origin/d-compat/2025.5 git cherry-pick <commit-sha> git push -u origin backport/my-fix-2025.5 -
افتح طلب سحب (PR) مع
d-compat/2025.5كـ فرع أساسي (وليسmain). احصل على مراجعته وادمجه بنفس الطريقة التي تعالج بها أي طلب سحب آخر. -
كرر العملية لكل فرع
d-compat/<YYYY>.<M>أقدم يحتاج إلى التصحيح.
ستلتقط المواقع على 2025.5.x التزام الدمج المدمج في تحديثها التالي.
حل بديل قديم: ملف `.discourse-compatibility`
إذا لم يوجد فرع d-compat مطابق، يلجأ Discourse إلى ملف YAML باسم .discourse-compatibility في جذر المستودع، والذي يربط إصدارات Discourse بمرجع git (git ref) لإضافتك/قالبك:
< 3.2.0.beta2-dev: abcde
يختار Discourse أدنى مدخل يطابق إصدار النواة قيد التشغيل، لذا أي شخص على < 3.2.0.beta2-dev سيفحص الالتزام abcde. استخدم < (أو <= القديم، وهو الافتراضي عند عدم تحديد عامل) لتحديد حد الإصدار. لجأ إلى هذا الحل فقط إذا تعذر على نظام الفروع التعبير عما تحتاجه.
هذا المستند خاضع للتحكم بالإصدارات - اقترح تغييرات على github.