التكامل المستمر (CI)#
يعد التكامل المستمر (CI) جانباً أساسياً من جوانب تطوير البرمجيات، حيث يتضمن دمج التغييرات واختبارها تلقائياً. يتيح لنا التكامل المستمر الحفاظ على كود عالي الجودة من خلال اكتشاف المشكلات مبكراً وبشكل متكرر في عملية التطوير. في Ultralytics، نستخدم اختبارات CI متنوعة لضمان جودة وسلامة الكود المصدري الخاص بنا.
إجراءات CI#
إليك وصف موجز لإجراءات CI الخاصة بنا:
- CI: هذا اختبار التكامل المستمر الرئيسي الخاص بنا والذي يتضمن تشغيل اختبارات الوحدة، وفحوصات تدقيق التعليمات البرمجية، وأحياناً اختبارات أكثر شمولاً اعتماداً على المستودع.
- Docker Deployment: يتحقق هذا الاختبار من نشر المشروع باستخدام Docker لضمان عمل ملف Dockerfile والنصوص البرمجية ذات الصلة بشكل صحيح.
- Broken Links: يقوم هذا الاختبار بمسح قاعدة الكود بحثاً عن أي روابط معطلة أو ميتة في ملفات markdown أو HTML الخاصة بنا.
- CodeQL: CodeQL هي أداة من GitHub تقم بتحليل دلالي لتعليماتنا البرمجية، مما يساعد في العثور على الثغرات الأمنية المحتملة والحفاظ على كود عالي الجودة.
- PyPI Publishing: يتحقق هذا الاختبار مما إذا كان يمكن حزم المشروع ونشره على PyPI دون أي أخطاء.
نتائج CI#
يوجد أدناه الجدول الذي يوضح حالة اختبارات CI هذه لمستودعاتنا الرئيسية:
| المستودع | CI | نشر Docker | الروابط المعطلة | CodeQL | نشر PyPI والتوثيق |
|---|---|---|---|---|---|
| yolov3 | |||||
| yolov5 | |||||
| ultralytics | |||||
| yolo-ios-app | |||||
| yolo-flutter-app | |||||
| thop | |||||
| actions | |||||
| mkdocs | |||||
| docs | |||||
| handbook | |||||
| stars | |||||
| CLIP |
يوضح كل شارة حالة التشغيل الأخير لاختبار التكامل المستمر (CI) المقابل على فرع main للمستودع المعني. إذا فشل الاختبار، ستعرض الشارة حالة "فشل" (failing)، وإذا نجح، ستعرض حالة "نجاح" (passing).
إذا لاحظت فشل أحد الاختبارات، فسيكون من المفيد جداً أن تقوم بالإبلاغ عنه من خلال إصدار (issue) على GitHub في المستودع المعني.
تذكر أن اختبار CI الناجح لا يعني أن كل شيء مثالي. يوصى دائماً بمراجعة الكود يدوياً قبل النشر أو دمج التغييرات.
تغطية الكود (Code Coverage)#
تغطية الكود هي مقياس يمثل النسبة المئوية للكود المصدري التي يتم تنفيذها عند تشغيل اختباراتك. إنها توفر رؤية حول مدى دقة اختباراتك في فحص الكود الخاص بك ويمكن أن تكون حاسمة في تحديد الأجزاء غير المختبرة من تطبيقك. غالباً ما يرتبط معدل تغطية الكود المرتفع باحتمالية أقل لوجود أخطاء. ومع ذلك، من الضروري أن تفهم أن تغطية الكود لا تضمن عدم وجود عيوب؛ فهي تشير فقط إلى أجزاء الكود التي تم تنفيذها بواسطة الاختبارات.
التكامل مع codecov.io#
في Ultralytics، قمنا بدمج مستودعاتنا مع codecov.io، وهي منصة شهيرة عبر الإنترنت لقياس وتصور تغطية الكود البرمجي. توفر Codecov رؤى تفصيلية، ومقارنات للتغطية بين الالتزامات (commits)، وطبقات مرئية مباشرة على الكود الخاص بك، مما يشير إلى الأسطر التي تمت تغطيتها.
من خلال التكامل مع Codecov، نهدف إلى الحفاظ على جودة الكود الخاص بنا وتحسينها من خلال التركيز على المناطق التي قد تكون عرضة للأخطاء أو التي تحتاج إلى مزيد من الاختبار.
نتائج التغطية#
للحصول على لمحة سريعة عن حالة تغطية الكود لمستودعاتنا، قمنا بتضمين شارات Codecov ومعاينات شعاعية (sunburst) لكل مشروع تمت متابعته. الدائرة الداخلية لكل رسم شعاعي تمثل المشروع بأكمله، والابتعاد عن المركز يمثل المجلدات ثم، أخيراً، ملفاً واحداً. حجم ولون كل قطاع يمثلان عدد العبارات والتغطية على التوالي. للحصول على التفاصيل الكاملة، تفضل بزيارة Ultralytics Codecov organization.
| المستودع | تغطية الكود (Code Coverage) | مخطط الشمس (Sunburst) |
|---|---|---|
| actions | ||
| ultralytics | ||
| inference | ||
| yolo-flutter-app | ||
| yolo-ios-app | ||
| llm | ||
| profile | ||
| template | ||
| template-rust | ||
| replicate |
الأسئلة الشائعة#
يتضمن التكامل المستمر (CI) في Ultralytics الدمج والاختبار التلقائي لتغييرات التعليمات البرمجية لضمان معايير جودة عالية. يتضمن إعداد CI الخاص بنا تشغيل unit tests, linting checks, and comprehensive tests. بالإضافة إلى ذلك، نقوم بـ Docker deployment، وbroken link checks، وCodeQL analysis للثغرات الأمنية، وPyPI publishing لحزم وتوزيع برمجياتنا.
تستخدم Ultralytics إجراء CI محددًا لـ check for broken links داخل ملفات markdown و HTML الخاصة بنا. يساعد هذا في الحفاظ على سلامة وثائقنا عن طريق مسح وتحديد الروابط الميتة أو المعطلة، مما يضمن حصول المستخدمين دائماً على وصول إلى موارد دقيقة وحية.
يعتبر CodeQL analysis أمرًا بالغ الأهمية لشركة Ultralytics حيث يقوم بتحليل دلالي للتعليمات البرمجية للعثور على الثغرات الأمنية المحتملة والحفاظ على معايير الجودة العالية. باستخدام CodeQL، يمكننا تحديد المخاطر والتخفيف منها بproactive طريقة في الكود الخاص بنا، مما يساعدنا في تقديم software solutions قوية وآمنة.
توظف Ultralytics تقنية Docker للتحقق من نشر مشاريعنا من خلال إجراء CI مخصص. تضمن هذه العملية أن Dockerfile and associated scripts تعمل بشكل صحيح، مما يتيح بيئات نشر متسقة وقابلة للتكرار والتي تعد بالغة الأهمية لحلول الذكاء الاصطناعي القابلة للتوسع والموثوقة.
يضمن PyPI publishing الآلي إمكانية حزم مشاريعنا ونشرها بدون أخطاء. هذه الخطوة ضرورية لتوزيع حزم Python الخاصة بـ Ultralytics، مما يسمح للمستخدمين بتثبيت أدواتنا واستخدامها بسهولة عبر Python Package Index (PyPI).
تقيس Ultralytics تغطية الكود عن طريق التكامل مع Codecov، مما يوفر رؤى حول مقدار قاعدة الكود التي يتم تنفيذها أثناء الاختبارات. يمكن أن تشير تغطية الكود العالية إلى كود مختبر بشكل جيد، مما يساعد في كشف المناطق غير المختبرة التي قد تكون عرضة للأخطاء. يمكن استكشاف مقاييس تغطية الكود التفصيلية عبر الشارات المعروضة على مستودعاتنا الرئيسية أو مباشرة على Codecov.