Kontinuierliche Integration (CI)#
Kontinuierliche Integration (CI) ist ein wesentlicher Bestandteil der Softwareentwicklung. Dabei werden Änderungen integriert und automatisch getestet. CI ermöglicht es uns, die Qualität des Codes aufrechtzuerhalten, indem Probleme frühzeitig und regelmäßig im Entwicklungsprozess erkannt werden. Bei Ultralytics verwenden wir verschiedene CI-Tests, um die Qualität und Integrität unserer Codebasis sicherzustellen.
CI-Aktionen#
Hier ist eine kurze Beschreibung unserer CI-Aktionen:
- CI: Dies ist unser wichtigster CI-Test. Er umfasst Unit-Tests, Prüfungen der Codeformatierung und je nach Repository manchmal umfassendere Tests.
- Docker-Bereitstellung: Dieser Test überprüft die Bereitstellung des Projekts mit Docker, um sicherzustellen, dass die Dockerfile und die zugehörigen Skripte korrekt funktionieren.
- Defekte Links: Dieser Test durchsucht die Codebasis nach defekten oder nicht mehr gültigen Links in unseren Markdown- oder HTML-Dateien.
- CodeQL: CodeQL ist ein Tool von GitHub, das eine semantische Analyse unseres Codes durchführt. Dadurch lassen sich potenzielle Sicherheitslücken finden und die Qualität des Codes aufrechterhalten.
- Veröffentlichung auf PyPI: Dieser Test überprüft, ob das Projekt fehlerfrei paketiert und auf PyPI veröffentlicht werden kann.
CI-Ergebnisse#
Die folgende Tabelle zeigt den Status dieser CI-Tests für unsere wichtigsten Repositories:
| Repository | CI | Docker-Bereitstellung | Defekte Links | CodeQL | Veröffentlichung auf PyPI und der Dokumentation |
|---|---|---|---|---|---|
| yolov3 | |||||
| yolov5 | |||||
| ultralytics | |||||
| sdk | |||||
| yolo-ios-app | |||||
| yolo-flutter-app | |||||
| thop | |||||
| actions | |||||
| mkdocs | |||||
| docs | |||||
| handbook | |||||
| stars | |||||
| CLIP |
Jedes Abzeichen zeigt den Status des letzten Laufs des entsprechenden CI-Tests auf dem Branch main des jeweiligen Repositorys. Wenn ein Test fehlschlägt, zeigt das Abzeichen den Status „fehlgeschlagen“ an, und wenn er erfolgreich ist, den Status „erfolgreich“.
Wenn dir ein fehlgeschlagener Test auffällt, wäre es eine große Hilfe, wenn du ihn über ein GitHub-Issue im jeweiligen Repository melden würdest.
Denk daran: Ein erfolgreicher CI-Test bedeutet nicht, dass alles perfekt ist. Es wird immer empfohlen, den Code vor der Bereitstellung oder dem Zusammenführen von Änderungen manuell zu überprüfen.
Codeabdeckung#
Die Codeabdeckung ist eine Kennzahl, die den Prozentsatz deiner Codebasis angibt, der bei der Ausführung deiner Tests ausgeführt wird. Sie zeigt, wie gründlich deine Tests deinen Code prüfen, und kann entscheidend dabei helfen, nicht getestete Teile deiner Anwendung zu identifizieren. Ein hoher Prozentsatz der Codeabdeckung wird häufig mit einer geringeren Wahrscheinlichkeit für Fehler in Verbindung gebracht. Es ist jedoch wichtig zu verstehen, dass die Codeabdeckung nicht die Abwesenheit von Fehlern garantiert. Sie zeigt lediglich an, welche Teile des Codes von den Tests ausgeführt wurden.
Integration mit codecov.io#
Bei Ultralytics haben wir unsere Repositories mit codecov.io integriert, einer beliebten Onlineplattform zum Messen und Visualisieren der Codeabdeckung. Codecov liefert detaillierte Einblicke und Vergleiche der Abdeckung zwischen Commits und zeigt direkt in deinem Code visuelle Markierungen an, die angeben, welche Zeilen abgedeckt wurden.
Durch die Integration mit Codecov wollen wir die Qualität unseres Codes aufrechterhalten und verbessern, indem wir uns auf Bereiche konzentrieren, die fehleranfällig sein könnten oder weitere Tests benötigen.
Abdeckungsergebnisse#
Um schnell einen Überblick über den Status der Codeabdeckung unserer Repositories zu erhalten, haben wir für jedes überwachte Projekt Codecov-Abzeichen und Vorschauen als Sunburst-Diagramme eingebunden. Der innerste Kreis jedes Sunburst-Diagramms stellt das gesamte Projekt dar. Vom Zentrum nach außen folgen zunächst Ordner und schließlich eine einzelne Datei. Die Größe und Farbe jedes Segments stehen jeweils für die Anzahl der Anweisungen und die Abdeckung. Ausführliche Informationen findest du in der Ultralytics-Codecov-Organisation.
| Repository | Codeabdeckung | Sunburst-Diagramm |
|---|---|---|
| actions | ||
| ultralytics | ||
| inference | ||
| yolo-flutter-app | ||
| yolo-ios-app | ||
| llm | ||
| profile | ||
| template | ||
| template-rust | ||
| replicate |
FAQ#
Die kontinuierliche Integration (CI) bei Ultralytics umfasst die automatische Integration und das Testen von Codeänderungen, um hohe Qualitätsstandards sicherzustellen. Unsere CI-Konfiguration umfasst die Ausführung von Unit-Tests, Prüfungen der Codeformatierung und umfassenden Tests. Zusätzlich führen wir eine Docker-Bereitstellung, Prüfungen auf defekte Links, eine CodeQL-Analyse auf Sicherheitslücken sowie die Veröffentlichung auf PyPI durch, um unsere Software zu paketieren und zu verteilen.
Ultralytics verwendet eine spezielle CI-Aktion, um defekte Links zu prüfen, die in unseren Markdown- und HTML-Dateien enthalten sind. Dadurch bleibt die Integrität unserer Dokumentation erhalten, da nach nicht mehr gültigen oder defekten Links gesucht wird und sichergestellt wird, dass Nutzer stets auf korrekte und erreichbare Ressourcen zugreifen können.
Die CodeQL-Analyse ist für Ultralytics entscheidend, da sie eine semantische Codeanalyse durchführt, um potenzielle Sicherheitslücken zu finden und hohe Qualitätsstandards aufrechtzuerhalten. Mit CodeQL können wir Risiken in unserem Code proaktiv erkennen und minimieren und so dazu beitragen, robuste und sichere Softwarelösungen bereitzustellen.
Ultralytics verwendet Docker, um die Bereitstellung unserer Projekte über eine spezielle CI-Aktion zu validieren. Dieser Prozess stellt sicher, dass unsere Dockerfile und zugehörigen Skripte korrekt funktionieren. Dadurch werden konsistente und reproduzierbare Bereitstellungsumgebungen ermöglicht, die für skalierbare und zuverlässige KI-Lösungen entscheidend sind.
Die automatisierte Veröffentlichung auf PyPI stellt sicher, dass unsere Projekte fehlerfrei paketiert und veröffentlicht werden können. Dieser Schritt ist für die Verteilung der Python-Pakete von Ultralytics unerlässlich und ermöglicht es Nutzern, unsere Tools einfach über den Python-Paketindex (PyPI) zu installieren und zu verwenden.
Ultralytics misst die Codeabdeckung durch die Integration mit Codecov und erhält dadurch Einblicke, wie viel von der Codebasis während der Tests ausgeführt wird. Eine hohe Codeabdeckung kann auf gut getesteten Code hindeuten und dabei helfen, nicht getestete Bereiche aufzudecken, die fehleranfällig sein könnten. Detaillierte Kennzahlen zur Codeabdeckung kannst du über die Abzeichen in unseren wichtigsten Repositories oder direkt auf Codecov einsehen.