Sürekli Entegrasyon (CI)#
Sürekli Entegrasyon (CI), yazılım geliştirmenin, değişikliklerin otomatik olarak entegre edilmesini ve test edilmesini içeren temel bir yönüdür. CI, geliştirme sürecinde sorunları erken ve sık bir şekilde yakalayarak yüksek kaliteli kod sürdürmemize olanak tanır. Ultralytics'te, kod tabanımızın kalitesini ve bütünlüğünü sağlamak için çeşitli CI testleri kullanıyoruz.
CI Eylemleri#
İşte CI eylemlerimizin kısa bir açıklaması:
- CI: Birim testlerini, kod denetimlerini (linting) ve depoya bağlı olarak bazen daha kapsamlı testleri çalıştırmayı içeren birincil CI testimizdir.
- Docker Deployment: Bu test, Dockerfile ve ilgili betiklerin düzgün çalışmasını sağlamak amacıyla projenin Docker kullanılarak dağıtımını kontrol eder.
- Broken Links: Bu test, markdown veya HTML dosyalarımızdaki bozuk ya da ölü bağlantıları bulmak için kod tabanını tarar.
- CodeQL: CodeQL, kodumuz üzerinde anlamsal analiz gerçekleştiren, potansiyel güvenlik açıklarını bulmaya ve yüksek kalitede kod sürdürmeye yardımcı olan GitHub tabanlı bir araçtır.
- PyPI Publishing: Bu test, projenin paketlenip hiçbir hata olmadan PyPI üzerinde yayınlanıp yayınlanamayacağını kontrol eder.
CI Sonuçları#
Aşağıda, ana depolarımız için bu CI testlerinin durumunu gösteren tablo yer almaktadır:
| Depo | CI | Docker Dağıtımı | Bozuk Bağlantılar | CodeQL | PyPI ve Doküman Yayınlama |
|---|---|---|---|---|---|
| yolov3 | |||||
| yolov5 | |||||
| ultralytics | |||||
| yolo-ios-app | |||||
| yolo-flutter-app | |||||
| thop | |||||
| actions | |||||
| mkdocs | |||||
| docs | |||||
| handbook | |||||
| stars | |||||
| CLIP |
Her rozet, ilgili deponun main dalındaki ilgili CI testinin son çalıştırılma durumunu gösterir. Bir test başarısız olursa rozet "failing" (başarısız) durumunu, başarılı olursa "passing" (başarılı) durumunu gösterir.
Bir testin başarısız olduğunu fark edersen, bunu ilgili depoda bir GitHub sorunu (issue) üzerinden bildirmen büyük bir yardım olur.
Unutma, başarılı bir CI testi her şeyin mükemmel olduğu anlamına gelmez. Dağıtımdan veya değişiklikleri birleştirmeden önce kodu manuel olarak incelemen her zaman önerilir.
Kod Kapsamı#
Kod kapsamı, testlerin çalıştırıldığında kod tabanının ne kadarının yürütüldüğünü temsil eden bir ölçümdür. Testlerinin kodunu ne kadar iyi çalıştırdığına dair içgörü sağlar ve test edilmemiş uygulama parçalarını belirlemede çok önemli olabilir. Yüksek bir kod kapsamı yüzdesi genellikle daha düşük hata olasılığı ile ilişkilendirilir. Bununla birlikte, kod kapsamının kusursuzluğu garanti etmediğini anlamak önemlidir. Sadece testler tarafından hangi kod parçalarının 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 popüler bir çevrimiçi platform olan codecov.io ile entegre ettik. Codecov, hangi satırların kapsandığını belirten ayrıntılı içgörüler, commit'ler arası kapsam karşılaştırmaları ve doğrudan kodunuz üzerinde görsel katmanlar sağlar.
Codecov ile entegre olarak, hatalara yatkın olabilecek veya daha fazla test gerektiren alanlara odaklanarak kodumuzun kalitesini korumayı ve geliştirmeyi hedefliyoruz.
Kapsam Sonuçları#
Depolarımızın kod kapsamı durumuna hızlıca göz atmak için takip edilen her proje için Codecov rozetleri ve güneş patlaması (sunburst) önizlemeleri ekledik. Her güneş patlamasının en içteki halkası tüm projeyi temsil eder, merkezden uzaklaşıldıkça sırasıyla klasörler ve son olarak tek bir dosya yer alır. Her dilimin boyutu ve rengi sırasıyla ifade sayısını ve kapsamı temsil eder. Tüm ayrıntılar için Ultralytics Codecov organization adresini ziyaret et.
| Depo | Kod Kapsamı | Sunburst |
|---|---|---|
| actions | ||
| ultralytics | ||
| inference | ||
| yolo-flutter-app | ||
| yolo-ios-app | ||
| llm | ||
| profile | ||
| template | ||
| template-rust | ||
| replicate |
SSS#
Ultralytics'te Continuous Integration (CI), yüksek kalite standartlarını sağlamak için kod değişikliklerinin otomatik olarak entegre edilmesini ve test edilmesini içerir. CI kurulumumuz unit tests, linting checks, and comprehensive tests çalıştırmayı kapsar. Ek olarak, yazılımımızı paketleyip dağıtmak için Docker deployment, broken link checks, güvenlik açıkları için CodeQL analysis ve PyPI publishing gerçekleştiriyoruz.
Ultralytics, markdown ve HTML dosyalarımızdaki check for broken links işlemlerini gerçekleştirmek için özel bir CI eylemi kullanır. Bu, ölü veya bozuk bağlantıları tarayıp tanımlayarak belgelerimizin bütünlüğünü korumaya yardımcı olur ve kullanıcıların her zaman doğru ve güncel kaynaklara erişebilmesini sağlar.
CodeQL analysis, potansiyel güvenlik açıklarını bulmak ve yüksek kalite standartlarını sürdürmek için anlamsal kod analizi gerçekleştirdiğinden Ultralytics için çok önemlidir. CodeQL ile kodumuzdaki riskleri proaktif olarak belirleyip azaltabilir ve sağlam, güvenli software solutions sunmamıza yardımcı olabiliriz.
Ultralytics, özel bir CI eylemi aracılığıyla projelerimizin dağıtımını doğrulamak için Docker'ı kullanır. Bu süreç, Dockerfile and associated scripts öğelerimizin doğru çalıştığından emin olmamızı sağlar; bu da ölçeklenebilir ve güvenilir yapay zeka çözümleri için kritik önem taşıyan tutarlı ve yeniden üretilebilir dağıtım ortamlarına olanak tanır.
Otomatik PyPI publishing, projelerimizin hatasız bir şekilde paketlenebilmesini ve yayınlanabilmesini sağlar. Bu adım, Ultralytics'in Python paketlerini dağıtmak için esastır ve kullanıcıların araçlarımızı Python Package Index (PyPI) aracılığıyla kolayca kurup kullanmasına olanak tanır.
Ultralytics, testler sırasında kod tabanının ne kadarının yürütüldüğüne dair içgörüler sunan Codecov ile entegre olarak kod kapsamını ölçer. Yüksek kod kapsamı, iyi test edilmiş kodlara işaret edebilir ve hatalara açık olabilecek test edilmemiş alanların ortaya çıkarılmasına yardımcı olur. Ayrıntılı kod kapsamı metrikleri, ana depolarımızda görüntülenen rozetler aracılığıyla veya doğrudan Codecov üzerinden incelenebilir.