كيف يمكن تنفيذ سير عمل CI للإضافات غير الرسمية؟

أدعوكم لمشاركة الأفكار حول سير عمل CI المحتمل، والذي سيقوم بتشغيل الاختبارات على الإضافات غير الرسمية التي يوفرها المجتمع.

تعتمد بعض المجتمعات بشكل كبير على الإضافات، دون صيانة راسخة:

نظرًا لأن اختبار الإضافات يعتمد على تثبيت Discourse كبيئة اختبار، أتساءل كيف يمكن أن يبدو سير عمل CI مدعومًا من المجتمع.

تتضمن بعض الإضافات مواصفات، مثل تطبيق @angus لـ activitypub، والذي، على حد فهمي، يتيح الاختبارات لـ CI.

حاليًا، أفكر في طريقتين لتحسين اختبار الإضافات غير الرسمية، اعتمادًا على المواصفات / الاختبارات، المضمنة في مصدر المكون الإضافي:

أ) بناء بعض الآليات التي تساعد مسؤولي الموقع على تشغيل الاختبارات في بيئة مرحلية
ب) الحصول على خدمة تقوم بعمل نسخة متفرعة من صورة اختبار محددة مسبقًا للإبلاغ عن الاختبارات التي تم تشغيلها على آخر رمز منشور للمكون الإضافي.

ما رأيك؟

هل فاتني أي سير عمل راسخ بالفعل؟

قد يكون هذا مفيدًا:

3 إعجابات

بالإضافة إلى التكامل المستمر (CI) مع اختبارات الواجهة الخلفية والواجهة الأمامية، والتي تمتلكها معظم إضافات Pavilion الآن، لدينا نظام لإدارة الإضافات يُعد التكامل المستمر (CI) جزءًا منه. إليك كيفية عمله

3 إعجابات

نعم، وإضافة إلى ما شاركه @angus، يمكنك العثور على لوحة معلومات التوافق اليومية الخاصة بنا هنا:

https://coop.pavilion.tech/plugins?branch=tests-passed

والتي تعرض حالة الفحوصات لتوافق إضافات Pavilion (وأحيانًا أخرى) مقابل tests-passed و stable. يتم تحديث هذا كل يوم، تلقائيًا.

يعتمد هذا بالطبع على الاختبارات، بما في ذلك اختبارات الدخان، والمواصفات (الواجهة الخلفية) واختبارات qunit (الواجهة الأمامية).

تتمتع إضافة الاشتراك الخاصة بنا (Custom Wizard) بأكبر قدر من تغطية الاختبارات، كما قد تتخيل، ولكن بعض إضافاتنا المجانية تتضمن مجموعة جيدة من اختبارات الواجهة الخلفية والواجهة الأمامية (مثل Locations).

يعد كتابة الاختبارات ممارسة جيدة وبالتأكيد أصبح Pavilion أكثر انضباطًا في هذا المجال مع نضجنا كشركة.

والأهم من ذلك، توثق الاختبارات أيضًا وظائفك المقصودة، وهو أمر مهم للغاية خاصة أثناء تحديثات التوافق أو إعادة الهيكلة.

إعجابَين (2)

مثير للإعجاب. هل يمكنك الإشارة إلى الكود الذي ينفذ هذا؟

إعجاب واحد (1)

إنها بنية وفقًا لمخطط @angus، مع مستودعات متعددة متضمنة، ولكن هذا هو خادم الحالة:

إنه أيضًا نهج:

  • لا تقم أبدًا بتطبيق إصلاح دون التحقق من وجود اختبار، وإذا لم يكن هناك اختبار مناسب، فأضف واحدًا.
  • يفضل تطوير الاختبار أولاً، وإظهار أنه يفشل، ثم إصلاح المشكلة وتأكيد نجاح اختبارك الجديد.

بهذه الطريقة تتزايد تغطيتك بمرور الوقت …

علاوة على ذلك:

  • يمكن أن يكون اختبار التعديل بأثر رجعي محفوفًا بالمخاطر حيث قد تسيء تفسير ما كان يقصده الكود … أفضل من عدم القيام بأي شيء …
إعجاب واحد (1)

جميع الإضافات الرسمية لها مواصفات يمكنك استخدامها كأمثلة. تتضمن إضافة discourse-plugin-Skelton إجراءات GitHub لتشغيل الاختبارات عند كل التزام، وأعتقد، يوميًا.

إعجابَين (2)

هل فهمت بشكل صحيح؟

أ) هذا متاح عبر إجراءات GitHub: الإضافات ذات المواصفات / الاختبارات المناسبة باستخدام إجراءات GitHub سيكون لها شارة على GitHub، إذا نجحت جميع الاختبارات وتمكنت واجهة برمجة التطبيقات (API) من قراءة حالة إجراءات CI (API).

ب) باستثناء الإضافات الرسمية لـ discourse والإضافات الخاصة بـ pavilion، لا يوجد نظرة عامة تلقائية للمسؤولين، إذا كانت الإضافات المستخدمة ستعمل في الإصدار المخصص للتحديث؟

بالبحث عن البيانات الوصفية حول توافق الإضافات، وجدت Introducing .discourse-compatibility: pinned plugin/theme versions for older Discourse versions عبر ملف .discourse-compatibility.

على حد فهمي، هذا حل للمشكلة العكسية: discourse قديم جدًا بالنسبة للإضافة.
كيف نعالج الاتجاه الآخر: الإضافة قديمة جدًا بالنسبة لـ discourse؟

هل يمكن لـ /admin/upgrade التحذير بشأن الإضافات التي تفشل في الاختبارات للتحديث المقصود؟

لقد وضعنا في الأصل هدفًا وقدمنا إصدارًا غير مُسجل بعلامة تجارية من لوحة تحكم الإضافات الخاصة بنا حيث يمكن لمؤلفي الطرف الثالث تقديم إضافاتهم ليتم تضمينها. لم يحظ هذا بأي زخم، ويرجع ذلك جزئيًا إلى أن عدد مطوري إضافات الطرف الثالث صغير جدًا بالفعل.

إن إنشاء إضافات Discourse من طرف ثالث هو مجال متخصص للغاية، وتوفير الإضافات من طرف ثالث مع تغطية اختبار جيدة هو مجال متخصص للغاية! :sweat_smile:

انضم العديد من المستقلين في هذا المجال إما إلى Pavilion أو CDCK (أو، بمرور الوقت، كليهما!).

لذلك، في النهاية، قررنا دمج لوحة تحكم الإضافات الخاصة بنا في موقع المجتمع المُسجل بعلامتنا التجارية.

إعجابَين (2)