التكامل المستمر (CI)#
يُعدّ التكامل المستمر (CI) جانبًا أساسيًا من جوانب تطوير البرمجيات، إذ يتضمن دمج التغييرات واختبارها تلقائيًا. يتيح لنا CI الحفاظ على جودة الشيفرة العالية من خلال اكتشاف المشكلات مبكرًا وباستمرار أثناء عملية التطوير. في Ultralytics، نستخدم اختبارات CI متنوعة لضمان جودة قاعدة الشيفرة وسلامتها.
إجراءات CI#
فيما يلي وصف موجز لإجراءات CI لدينا:
- CI: هذا هو اختبار CI الأساسي لدينا، ويتضمن تشغيل اختبارات الوحدات، وفحوصات التنسيق، وأحيانًا اختبارات أكثر شمولًا، بحسب المستودع.
- نشر Docker: يتحقق هذا الاختبار من نشر المشروع باستخدام Docker، لضمان عمل Dockerfile والبرامج النصية ذات الصلة بصورة صحيحة.
- الروابط المعطّلة: يفحص هذا الاختبار قاعدة الشيفرة بحثًا عن أي روابط معطّلة أو ميتة في ملفات Markdown أو HTML لدينا.
- CodeQL: CodeQL أداة من GitHub تُجري تحليلًا دلاليًا لشيفرتنا، مما يساعد على اكتشاف الثغرات الأمنية المحتملة والحفاظ على جودة الشيفرة العالية.
- النشر إلى PyPI: يتحقق هذا الاختبار من إمكانية حزم المشروع ونشره إلى PyPI دون أخطاء.
نتائج CI#
يوضح الجدول أدناه حالة اختبارات CI هذه لمستودعاتنا الرئيسية:
| المستودع | CI | نشر Docker | الروابط المعطّلة | CodeQL | النشر إلى PyPI والوثائق |
|---|---|---|---|---|---|
| yolov3 | |||||
| yolov5 | |||||
| ultralytics | |||||
| sdk | |||||
| yolo-ios-app | |||||
| yolo-flutter-app | |||||
| thop | |||||
| actions | |||||
| mkdocs | |||||
| docs | |||||
| handbook | |||||
| stars | |||||
| CLIP |
تعرض كل شارة حالة آخر تشغيل لاختبار CI المقابل على فرع main في المستودع المعني. إذا فشل الاختبار، فستعرض الشارة حالة "فاشل"، وإذا نجح، فستعرض حالة "ناجح".
إذا لاحظت فشل أحد الاختبارات، فسيكون من المفيد جدًا أن تُبلغ عنه عبر مشكلة في GitHub ضمن المستودع المعني.
تذكّر أن نجاح اختبار CI لا يعني أن كل شيء مثالي. يوصى دائمًا بمراجعة الشيفرة يدويًا قبل النشر أو دمج التغييرات.
تغطية الشيفرة#
تغطية الشيفرة مقياس يمثل النسبة المئوية من قاعدة الشيفرة التي يجري تنفيذها عند تشغيل الاختبارات. وتوفر inzichtًا في مدى اختبار اختباراتك لشيفرتك، وقد تكون حاسمة في تحديد الأجزاء غير المختبرة من تطبيقك. غالبًا ما ترتبط النسبة المئوية المرتفعة لتغطية الشيفرة باحتمالية أقل لوجود الأخطاء. ومع ذلك، من الضروري فهم أن تغطية الشيفرة لا تضمن غياب العيوب، بل تشير فقط إلى الأجزاء التي نفذتها الاختبارات من الشيفرة.
التكامل مع codecov.io#
في Ultralytics، دمجنا مستودعاتنا مع codecov.io، وهي منصة شائعة عبر الإنترنت لقياس تغطية الشيفرة وتصويرها. يوفر Codecov رؤى تفصيلية، ومقارنات للتغطية بين عمليات الإيداع، وطبقات مرئية مباشرة على شيفرتك توضح الأسطر التي تمت تغطيتها.
من خلال التكامل مع Codecov، نهدف إلى الحفاظ على جودة شيفرتنا وتحسينها عبر التركيز على المناطق التي قد تكون عرضة للأخطاء أو تحتاج إلى مزيد من الاختبار.
نتائج التغطية#
للحصول سريعًا على لمحة عن حالة تغطية الشيفرة في مستودعاتنا، أدرجنا شارات Codecov ومعاينات مخطط شمسية لكل مشروع تتم متابعته. تمثل الدائرة الداخلية في كل مخطط شمسي المشروع بأكمله، وتبتعد عنها المجلدات ثم ملف واحد. ويمثل حجم كل شريحة ولونها عدد العبارات والتغطية على التوالي. للحصول على التفاصيل الكاملة، تفضل بزيارة منظمة Ultralytics على Codecov.
| المستودع | تغطية الشيفرة | المخطط الشمسي |
|---|---|---|
| actions | ||
| ultralytics | ||
| inference | ||
| yolo-flutter-app | ||
| yolo-ios-app | ||
| llm | ||
| profile | ||
| template | ||
| template-rust | ||
| replicate |
الأسئلة الشائعة#
يتضمن التكامل المستمر (CI) في Ultralytics دمج تغييرات الشيفرة واختبارها تلقائيًا لضمان معايير الجودة العالية. يتضمن إعداد CI لدينا تشغيل اختبارات الوحدات وفحوصات التنسيق والاختبارات الشاملة. بالإضافة إلى ذلك، نجري نشر Docker، وفحوصات الروابط المعطّلة، وتحليل CodeQL بحثًا عن الثغرات الأمنية، والنشر إلى PyPI لحزم برامجنا وتوزيعها.
تستخدم Ultralytics إجراء CI محددًا من أجل فحص الروابط المعطّلة ضمن ملفات Markdown وHTML لدينا. ويساعد ذلك في الحفاظ على سلامة وثائقنا من خلال فحص الروابط الميتة أو المعطّلة وتحديدها، مما يضمن حصول المستخدمين دائمًا على موارد دقيقة ومتاحة.
يُعدّ تحليل CodeQL بالغ الأهمية لـ Ultralytics، إذ يُجري تحليلًا دلاليًا للشيفرة لاكتشاف الثغرات الأمنية المحتملة والحفاظ على معايير الجودة العالية. باستخدام CodeQL، يمكننا تحديد المخاطر في شيفرتنا والحد منها استباقيًا، مما يساعدنا على تقديم حلول برمجية متينة وآمنة.
تستخدم Ultralytics Docker للتحقق من نشر مشاريعنا من خلال إجراء CI مخصص. وتضمن هذه العملية أن Dockerfile والبرامج النصية المرتبطة به تعمل بصورة صحيحة، مما يتيح توفير بيئات نشر متسقة وقابلة لإعادة الإنتاج، وهي بيئات بالغة الأهمية لحلول الذكاء الاصطناعي القابلة للتوسع والموثوقة.
يضمن النشر الآلي إلى PyPI إمكانية حزم مشاريعنا ونشرها دون أخطاء. وتُعد هذه الخطوة ضرورية لتوزيع حزم Python الخاصة بـ Ultralytics، مما يتيح للمستخدمين تثبيت أدواتنا واستخدامها بسهولة عبر فهرس حزم Python (PyPI).
تقيس Ultralytics تغطية الشيفرة من خلال التكامل مع Codecov، مما يوفر رؤى حول مقدار قاعدة الشيفرة الذي يجري تنفيذه أثناء الاختبارات. يمكن أن تشير التغطية العالية للشيفرة إلى شيفرة مختبرة جيدًا، مما يساعد على اكتشاف المناطق غير المختبرة التي قد تكون عرضة للأخطاء. ويمكن استكشاف مقاييس تغطية الشيفرة التفصيلية عبر الشارات المعروضة في مستودعاتنا الرئيسية أو مباشرةً على Codecov.