إعداد التكامل المستمر باستخدام GitHub Actions

:mag: نظرة عامة

لبناء امتداد قوي لـ Discourse، قد يكون من الحكمة دمج التكامل المستمر (CI) في إضافة أو مكون السمة الخاص بك. سيساعد ذلك في اكتشاف الأخطاء مبكرًا وتقليل فرص وجود أخطاء في الكود الخاص بك.

إن إعداد سير عمل CI باستخدام إجراءات GitHub لأتمتة عمليات البناء والاختبار هو نهج يتبعه فريق Discourse في جميع مكوناتنا، ونوصيك بالقيام بنفس الشيء.

:gear: الإعداد

لإضافة سير عمل أوتوماتيكي لإجراءات GitHub للكشف، تحتاج إلى إنشاء مجلد .github/workflows في المجلد الجذري لمستودعك.

داخل مجلد workflows، يمكنك تعريف مجموعة من الأتمتة التي ستحتاج إجراءات GitHub إلى تشغيلها. على سبيل المثال، يمكن أن تكون هذه ملفات .yml للتحقق من الكود (linting) والاختبارات.

لقد أنشأنا سير عمل قوالب لكل من الإضافات و مكونات السمات والتي يمكنك الاستفادة منها. ترتبط هذه التعريفات بـ “سير العمل القابل لإعادة الاستخدام” الخاص بنا هنا.

في مستودع الهيكل القالب على GitHub، يمكنك النقر فوق زر استخدام هذا القالب لإنشاء مستودع لإضافة/مكون سمة بناءً على القالب.

بدلاً من ذلك، إذا كان لديك مشروع تريد إضافة سير العمل إليه، فقم ببساطة بنسخ سير العمل ذي الصلة إلى مجلد .github/workflows/ في مستودعك:

:electric_plug: الإضافات: discourse-plugin.yml

:jigsaw: السمات ومكونات السمات: discourse-theme.yml

:point_up: هذه القوالب مقيدة بإصدار رئيسي محدد من سير العمل القابل لإعادة الاستخدام الخاص بنا. التحسينات الصغيرة التي نجريها على سير العمل ستدخل حيز التنفيذ تلقائيًا في سمة/إضافة الخاص بك. بالنسبة للتغييرات الجوهرية (مثل إدخال أداة تحقق جديدة)، سنقوم بزيادة الإصدار الرئيسي لسير العمل القابل لإعادة الاستخدام، وستحتاج إلى تحديث سير العمل الخاص بك للإشارة إلى الإصدار الجديد.

:tada: تفضل! أنت جاهز تمامًا! ببساطة، قم بإنشاء التزام (commit) أو PR إلى مستودعك، وستقوم إجراءات GitHub بالكشف التلقائي عن سير العمل وبدء تشغيل المهام.

ستعرض إجراءات GitHub تفصيلًا لكل اختبار، وبعد التشغيل ستشير إما إلى :white_check_mark: أو :x: اعتمادًا على ما إذا كان الاختبار قد نجح أم فشل.

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

شاهد مثالاً

:white_check_mark: أضف اختباراتك الخاصة

لكي تعمل اختبارات الإضافات والمكونات بفعالية، من المهم أن تكتب اختبارات لإضافة أو مكون السمة الخاص بك.

لمزيد من التفاصيل حول كيفية كتابة اختبارات الواجهة الأمامية باستخدام EmberJS، راجع:

لمزيد من التفاصيل حول كتابة اختبارات RSpec باستخدام Rails، راجع:

:bulb: أمثلة

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


هذا المستند خاضع للتحكم في الإصدارات - اقترح التغييرات على GitHub.

15 إعجابًا

قد تذكر GitHub - discourse/discourse-theme-skeleton: Template for Discourse themes صراحةً وتلاحظ أنه يجب عليك مراقبته لتدوين التغييرات في تلك الملفات.

4 إعجابات

نأمل أن يتم دمج سير العمل القابل لإعادة الاستخدام، مما يجعل هذا الجزء أقل أهمية حيث ستستخدم المستودعات الجديدة التي تم إنشاؤها من القالب سير العمل مباشرة من مستودع القالب.

إعجابَين (2)

شكراً @pfaffman و @Simon_Manning، نقاط جيدة. لقد قمت بتحديث المنشور الأصلي وفقًا لذلك.

4 إعجابات

لقد قمت بتحديث OP لتضمين تعليمات لاستخدام “سير العمل القابل لإعادة الاستخدام” الجديد لدينا. يمكن الآن تطبيق التعديلات الطفيفة التي نجريها على تعريفات سير العمل تلقائيًا على السمات/المكونات الإضافية الخاصة بك دون أي عمل يدوي.

3 إعجابات

هل أحتاج إلى القيام بأي شيء خاص لاختبار الإضافة ضد أحدث الاختبارات المارة و المستقرة؟

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

يستخدم سير عمل هيكل المكون الإضافي ما يلي، والذي أعتقد أنه سيختبر مقابل الفرع الافتراضي، لذا main. يحتوي سير العمل القابل لإعادة الاستخدام على إدخال اختياري core_ref وبقدر ما أستطيع أن أقول، بدونه سيتم سحب الفرع الافتراضي لمستودع discourse/discourse.

jobs:
  ci:
    uses: discourse/.github/.github/workflows/discourse-plugin.yml@v1

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

jobs:
  ci:
    strategy:
      matrix:
        target: [tests-passed, stable]
    uses: discourse/.github/.github/workflows/discourse-plugin.yml@v1
    with:
      core_ref: ${{ matrix.target }}
3 إعجابات

نعم، هذا يجب أن يفي بالغرض. أو يمكنك ببساطة كتابة المهمتين يدويًا دون استخدام مصفوفة:

name: Discourse Plugin

on:
  push:
    branches:
      - main
  pull_request:

jobs:
  ci:
    uses: discourse/.github/.github/workflows/discourse-plugin.yml@v1

  ci-stable:
    uses: discourse/.github/.github/workflows/discourse-plugin.yml@v1
    with:
      core_ref: stable

تجدر الإشارة إلى أن هذه المهام لن تتحقق من .discourse-compatiblity. لذا، فإن هذا يستحق القيام به فقط على المكونات الإضافية التي لا تستخدم هذا الملف، وتحتاج إلى أن تكون متوافقة مع كل من main و stable في نفس الوقت.

بالنسبة لجميع السمات/المكونات الإضافية العامة لـ CDCK، نضيف إدخالًا إلى discourse-compatibility “لتجميدها” عند كل إصدار مستقر. بعد ذلك، لا نحتاج إلى القلق بشأن التوافق المستقر أثناء تطويرها.

5 إعجابات

شكرا لكما.

نعم، هذا هو النهج الأكثر مباشرة على الأرجح. الجانب السلبي الوحيد هو أنه قد يؤخر الميزات (وإصلاحات الأخطاء الجديدة)

إعجابَين (2)