Sürekli Entegrasyon (CI)#
Sürekli Entegrasyon (CI), değişikliklerin entegre edilmesini ve otomatik olarak test edilmesini içeren yazılım geliştirmenin temel bir unsurudur. CI, geliştirme sürecinde sorunları erken ve sık yakalayarak yüksek kaliteli kodu korumamıza olanak tanır. Ultralytics olarak kod tabanımızın kalitesini ve bütünlüğünü güvence altına almak için çeşitli CI testleri kullanıyoruz.
CI İşlemleri#
CI işlemlerimizin kısa açıklaması aşağıdadır:
- CI: Birim testlerinin, lint kontrollerinin ve depoya bağlı olarak bazen daha kapsamlı testlerin çalıştırılmasını içeren birincil CI testimizdir.
- Docker Dağıtımı: Bu test, Dockerfile ve ilgili betiklerin doğru çalıştığından emin olmak için projenin Docker kullanılarak dağıtımını denetler.
- Bozuk Bağlantılar: Bu test, markdown veya HTML dosyalarımızdaki bozuk ya da artık çalışmayan bağlantıları bulmak için kod tabanını tarar.
- CodeQL: CodeQL, GitHub tarafından sunulan ve kodumuz üzerinde anlamsal analiz gerçekleştirerek olası güvenlik açıklarını bulmaya ve yüksek kaliteli kodu korumaya yardımcı olan bir araçtır.
- PyPI Yayınlama: Bu test, projenin hatasız şekilde paketlenip PyPI'da yayınlanıp yayınlanamayacağını denetler.
CI Sonuçları#
Aşağıdaki tabloda ana depolarımızdaki bu CI testlerinin durumu gösterilmektedir:
| Depo | CI | Docker Dağıtımı | Bozuk Bağlantılar | CodeQL | PyPI ve Dokümantasyon Yayınlama |
|---|---|---|---|---|---|
| yolov3 | |||||
| yolov5 | |||||
| ultralytics | |||||
| sdk | |||||
| yolo-ios-app | |||||
| yolo-flutter-app | |||||
| thop | |||||
| actions | |||||
| mkdocs | |||||
| docs | |||||
| handbook | |||||
| stars | |||||
| CLIP |
Her rozet, ilgili deponun main dalında ilgili CI testinin son çalıştırılma durumunu gösterir. Bir test başarısız olursa rozet "başarısız" durumunu, başarılı olursa "başarılı" durumunu gösterir.
Bir testin başarısız olduğunu fark edersen ilgili depoda bir GitHub issue'su aracılığıyla bildirmen çok yardımcı olur.
Unutma, başarılı bir CI testi her şeyin kusursuz olduğu anlamına gelmez. Dağıtımdan veya değişiklikleri birleştirmeden önce kodu manuel olarak gözden geçirmen her zaman önerilir.
Kod Kapsamı#
Kod kapsamı, testlerin çalıştırılması sırasında kod tabanının yürütülen yüzdesini gösteren bir ölçüttür. Testlerinin kodunu ne ölçüde çalıştırdığını anlamana yardımcı olur ve uygulamanın test edilmemiş bölümlerini belirlemede kritik olabilir. Yüksek kod kapsamı yüzdesi genellikle daha düşük hata olasılığıyla ilişkilidir. Ancak kod kapsamının kusurların bulunmadığını garanti etmediğini anlamak önemlidir. Yalnızca kodun hangi bölümlerinin testler tarafından yürütüldüğünü gösterir.
codecov.io ile Entegrasyon#
Ultralytics olarak depolarımızı, kod kapsamını ölçmek ve görselleştirmek için kullanılan popüler bir çevrimiçi platform olan codecov.io ile entegre ettik. Codecov; ayrıntılı içgörüler, commit'ler arasındaki kapsam karşılaştırmaları ve doğrudan kodunun üzerinde hangi satırların kapsandığını gösteren görsel katmanlar sunar.
Codecov ile entegrasyon sağlayarak hata yapmaya yatkın olabilecek veya daha fazla test gerektiren alanlara odaklanıp kodumuzun kalitesini korumayı ve iyileştirmeyi amaçlıyoruz.
Kapsam Sonuçları#
Depolarımızın kod kapsamı durumuna hızlıca göz atabilmen için izlenen her projeye Codecov rozetleri ve güneş ışını grafiği önizlemeleri ekledik. Her güneş ışını grafiğinin en iç çemberi projenin tamamını, merkezden uzaklaştıkça önce klasörleri ve son olarak tek bir dosyayı temsil eder. Her dilimin boyutu ve rengi sırasıyla ifade sayısını ve kapsamı gösterir. Tüm ayrıntılar için Ultralytics Codecov kuruluşunu ziyaret et.
| Depo | Kod Kapsamı | Güneş Işını Grafiği |
|---|---|---|
| actions | ||
| ultralytics | ||
| inference | ||
| yolo-flutter-app | ||
| yolo-ios-app | ||
| llm | ||
| profile | ||
| template | ||
| template-rust | ||
| replicate |
SSS#
Ultralytics'te Sürekli Entegrasyon (CI), yüksek kalite standartlarını güvence altına almak için kod değişikliklerinin otomatik olarak entegre edilmesini ve test edilmesini içerir. CI kurulumumuzda birim testleri, lint kontrolleri ve kapsamlı testler çalıştırılır. Ayrıca Docker dağıtımı, bozuk bağlantı denetimleri, güvenlik açıkları için CodeQL analizi ve yazılımımızı paketleyip dağıtmak için PyPI'da yayınlama işlemlerini gerçekleştiriyoruz.
Ultralytics, markdown ve HTML dosyalarımızdaki bozuk bağlantıları denetlemek için özel bir CI işlemi kullanır. Bu işlem, çalışmayan veya bozuk bağlantıları tarayıp belirleyerek dokümantasyonumuzun bütünlüğünü korumaya ve kullanıcıların her zaman doğru ve erişilebilir kaynaklara ulaşmasını sağlamaya yardımcı olur.
CodeQL analizi, olası güvenlik açıklarını bulmak ve yüksek kalite standartlarını korumak için anlamsal kod analizi gerçekleştirdiğinden Ultralytics için kritik öneme sahiptir. CodeQL sayesinde kodumuzdaki riskleri proaktif olarak belirleyip azaltabilir, böylece sağlam ve güvenli yazılım çözümleri sunabiliriz.
Ultralytics, özel bir CI işlemi aracılığıyla projelerimizin dağıtımını doğrulamak için Docker kullanır. Bu süreç, Dockerfile ve ilişkili betiklerin doğru çalışmasını sağlayarak ölçeklenebilir ve güvenilir yapay zeka çözümleri için kritik olan tutarlı ve yeniden üretilebilir dağıtım ortamları oluşturulmasına olanak tanır.
Otomatik PyPI yayınlama, projelerimizin hatasız şekilde paketlenip yayınlanmasını sağlar. Bu adım, Ultralytics'in Python paketlerini dağıtmak için gereklidir ve kullanıcıların araçlarımızı Python Paket Dizini (PyPI) üzerinden kolayca yükleyip kullanmasına olanak tanır.
Ultralytics, testler sırasında kod tabanının ne kadarının yürütüldüğüne ilişkin içgörüler sunmak için Codecov ile entegre olarak kod kapsamını ölçer. Yüksek kod kapsamı, kodun iyi test edildiğini gösterebilir ve hatalara yatkın olabilecek test edilmemiş alanların ortaya çıkarılmasına yardımcı olur. Ayrıntılı kod kapsamı ölçümlerini ana depolarımızda görüntülenen rozetler veya doğrudan Codecov üzerinden inceleyebilirsin.