Kontinuierliche Integration (CI)#
Kontinuierliche Integration (CI) ist ein wesentlicher Bestandteil der Softwareentwicklung. Dabei werden Änderungen integriert und automatisch getestet. Mit CI können wir die Codequalität aufrechterhalten, indem Probleme früh und regelmäßig im Entwicklungsprozess erkannt werden. Bei Ultralytics setzen wir verschiedene CI-Tests ein, um die Qualität und Integrität unseres Codes sicherzustellen.
CI-Aktionen#
Hier ist eine kurze Beschreibung unserer CI-Aktionen:
- CI: Dies ist unser wichtigster CI-Test. Er führt Unit-Tests aus und je nach Repository auch umfassendere Tests wie Exportprüfungen und Benchmarks.
- Docker-Bereitstellung: Mit diesem Test wird die Bereitstellung des Projekts mit Docker geprüft, um sicherzustellen, dass die Dockerfile und die zugehörigen Skripte korrekt funktionieren.
- Defekte Links: Dieser Test durchsucht den Codebestand nach defekten oder nicht mehr funktionierenden Links in unseren Markdown- oder HTML-Dateien.
- CodeQL: CodeQL ist ein Tool von GitHub, das unseren Code semantisch analysiert und dabei hilft, potenzielle Sicherheitslücken zu finden und die Codequalität zu sichern.
- Veröffentlichung auf PyPI: Dieser Workflow erstellt das Paket und veröffentlicht jede neue Version auf PyPI.
CI-Ergebnisse#
Die folgende Tabelle zeigt den Status dieser CI-Tests für unsere wichtigsten Repositorys:
| Repository | CI | Docker-Bereitstellung | Defekte Links | CodeQL | Veröffentlichung auf PyPI und Veröffentlichung der Dokumentation |
|---|---|---|---|---|---|
| yolov3 | |||||
| yolov5 | |||||
| ultralytics | |||||
| sdk | |||||
| lite | |||||
| openapi | |||||
| skills | |||||
| yolo-ios-app | |||||
| yolo-flutter-app | |||||
| thop | |||||
| actions | |||||
| mkdocs | |||||
| docs | |||||
| handbook | |||||
| stars | |||||
| CLIP |
Jedes Badge zeigt den Status des letzten Durchlaufs des entsprechenden CI-Tests im Branch main des jeweiligen Repositorys. Schlägt ein Test fehl, zeigt das Badge den Status „fehlgeschlagen“ an; besteht ein Test, zeigt das Badge den Status „bestanden“ an.
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 könntest.
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 gibt Aufschluss darüber, wie gründlich deine Tests den Code prüfen, und kann entscheidend dabei helfen, nicht getestete Teile deiner Anwendung zu erkennen. Ein hoher Prozentsatz der Codeabdeckung geht oft mit einer geringeren Wahrscheinlichkeit für Fehler einher. Es ist jedoch wichtig zu verstehen, dass die Codeabdeckung nicht garantiert, dass keine Fehler vorhanden sind. Sie zeigt lediglich an, welche Teile des Codes von den Tests ausgeführt wurden.
Integration mit codecov.io#
Bei Ultralytics haben wir unsere Repositorys mit codecov.io integriert, einer beliebten Onlineplattform zum Messen und Visualisieren der Codeabdeckung. Codecov liefert detaillierte Einblicke, Vergleiche der Abdeckung zwischen Commits und visuelle Hervorhebungen direkt im Code, die anzeigen, welche Zeilen abgedeckt wurden.
Durch die Integration mit Codecov möchten wir die Qualität unseres Codes erhalten und verbessern, indem wir uns auf Bereiche konzentrieren, die fehleranfällig sein könnten oder weitere Tests benötigen.
Ergebnisse der Codeabdeckung#
Damit du dir schnell einen Überblick über den Status der Codeabdeckung unserer Repositorys verschaffen kannst, haben wir für jedes erfasste Projekt Codecov-Badges und Sunburst-Diagramme eingebunden. Der innerste Kreis jedes Sunburst-Diagramms steht für das gesamte Projekt; vom Mittelpunkt nach außen folgen zunächst die Ordner und schließlich eine einzelne Datei. Größe und Farbe jedes Segments stehen für die Anzahl der Anweisungen beziehungsweise die Codeabdeckung. Ausführliche Informationen findest du in der Codecov-Organisation von Ultralytics.
| Repository | Codeabdeckung | Sunburst-Diagramm |
|---|---|---|
| actions | ||
| ultralytics | ||
| inference | ||
| yolo-flutter-app | ||
| yolo-ios-app | ||
| llm | ||
| profile | ||
| template | ||
| template-rust | ||
| replicate |
Häufig gestellte Fragen#
Bei Ultralytics umfasst die kontinuierliche Integration (CI) die automatische Integration und Prüfung von Codeänderungen, um hohe Qualitätsstandards sicherzustellen. Unser CI-Setup beinhaltet das Ausführen von Unit-Tests, Exporttests und Benchmarks. Außerdem führen wir eine Docker-Bereitstellung, Prüfungen auf defekte Links, eine CodeQL-Analyse auf Sicherheitslücken und die Veröffentlichung auf PyPI durch, um unsere Software zu paketieren und zu verteilen.
Ultralytics verwendet eine spezielle CI-Aktion, um defekte Links zu überprüfen in unseren Markdown- und HTML-Dateien. So bleibt unsere Dokumentation zuverlässig: Die Dateien werden nach ungültigen oder defekten Links durchsucht, damit Nutzerinnen und Nutzer stets auf korrekte und erreichbare Ressourcen zugreifen können.
Die CodeQL-Analyse ist für Ultralytics entscheidend, weil sie eine semantische Codeanalyse durchführt, um potenzielle Sicherheitslücken zu finden und hohe Qualitätsstandards einzuhalten. Mit CodeQL können wir Risiken in unserem Code frühzeitig erkennen und mindern und so robuste und sichere Softwarelösungen bereitstellen.
Ultralytics verwendet Docker, um die Bereitstellung unserer Projekte mithilfe einer speziellen CI-Aktion zu überprüfen. Dadurch wird sichergestellt, dass unsere Dockerfile und zugehörigen Skripte korrekt funktionieren und konsistente, reproduzierbare Bereitstellungsumgebungen ermöglichen, die für skalierbare und zuverlässige KI-Lösungen entscheidend sind.
Die automatisierte Veröffentlichung auf PyPI erstellt unsere Pakete und veröffentlicht jede neue Version ohne manuelle Schritte. Dieser Schritt ist für die Verteilung der Python-Pakete von Ultralytics unerlässlich und ermöglicht es Nutzerinnen und Nutzern, unsere Tools ganz einfach über den Python-Paketindex (PyPI) zu installieren und zu verwenden.
Ultralytics misst die Codeabdeckung durch die Integration mit Codecov, das Aufschluss darüber gibt, wie viel der Codebasis während der Tests ausgeführt wird. Eine hohe Codeabdeckung kann auf gut getesteten Code hindeuten und dabei helfen, nicht getestete, möglicherweise fehleranfällige Bereiche aufzudecken. Detaillierte Kennzahlen zur Codeabdeckung findest du über die Badges in unseren wichtigsten Repositorys oder direkt auf Codecov.