지속적 통합(CI)#
지속적 통합(CI)은 소프트웨어 개발의 필수적인 측면으로, 변경 사항을 통합하고 이를 자동으로 테스트하는 것을 포함합니다. CI를 통해 개발 과정에서 문제를 조기에 자주 발견하여 고품질의 코드를 유지할 수 있습니다. Ultralytics에서는 코드베이스의 품질과 무결성을 보장하기 위해 다양한 CI 테스트를 사용합니다.
CI 작업#
다음은 저희 CI 작업에 대한 간략한 설명입니다:
- CI: 본 테스트는 주요 CI 테스트로, 단위 테스트, 린팅 검사, 그리고 레포지토리에 따라서는 더 포괄적인 테스트를 실행하는 과정을 포함합니다.
- Docker Deployment: 이 테스트는 Docker를 사용하여 프로젝트의 배포를 확인하며, Dockerfile과 관련 스크립트가 올바르게 작동하는지 보장합니다.
- Broken Links: 이 테스트는 마크다운 또는 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 |
각 배지는 해당 레포지토리의 main 브랜치에서 실행된 마지막 CI 테스트의 상태를 보여줍니다. 테스트가 실패하면 배지에 "failing" 상태가 표시되고, 통과하면 "passing" 상태가 표시됩니다.
테스트 실패를 발견하시면 해당 저장소의 GitHub 이슈를 통해 신고해 주시면 큰 도움이 됩니다.
성공적인 CI 테스트가 모든 것이 완벽하다는 것을 의미하지는 않는다는 점을 기억하십시오. 배포나 변경 사항을 병합하기 전에 항상 코드를 수동으로 검토하는 것을 권장합니다.
코드 커버리지#
코드 커버리지는 테스트가 실행될 때 코드베이스의 몇 퍼센트가 실행되는지를 나타내는 지표입니다. 이는 테스트가 코드를 얼마나 잘 검증하는지에 대한 통찰력을 제공하며, 애플리케이션의 테스트되지 않은 부분을 식별하는 데 결정적인 역할을 할 수 있습니다. 높은 코드 커버리지 비율은 종종 버그 발생 가능성이 낮다는 것과 연관됩니다. 그러나 코드 커버리지가 결함이 없음을 보장하지는 않는다는 점을 이해하는 것이 중요합니다. 이는 단지 테스트에 의해 실행된 코드의 일부를 나타낼 뿐입니다.
codecov.io와의 연동#
Ultralytics에서는 코드 커버리지를 측정하고 시각화하는 인기 있는 온라인 플랫폼인 codecov.io와 레포지토리를 연동했습니다. Codecov는 상세한 인사이트, 커밋 간 커버리지 비교, 그리고 코드에 직접 오버레이되는 시각적 요소를 제공하여 어떤 라인이 커버되었는지 나타냅니다.
Codecov와의 통합을 통해 오류가 발생하기 쉽거나 추가 테스트가 필요한 영역에 집중함으로써 코드 품질을 유지하고 개선하는 것을 목표로 합니다.
커버리지 결과#
레포지토리의 코드 커버리지 상태를 빠르게 파악하기 위해, 추적 중인 각 프로젝트에 Codecov 배지와 선버스트 미리보기를 포함했습니다. 각 선버스트의 가장 안쪽 원은 전체 프로젝트를 나타내며, 중심에서 멀어질수록 폴더, 그리고 마지막으로 단일 파일이 됩니다. 각 조각의 크기와 색상은 각각 구문 수와 커버리지를 나타냅니다. 전체 세부 정보는 Ultralytics Codecov organization에서 확인하세요.
| 저장소 | 코드 커버리지 | 선버스트 |
|---|---|---|
| actions | ||
| ultralytics | ||
| inference | ||
| yolo-flutter-app | ||
| yolo-ios-app | ||
| llm | ||
| profile | ||
| template | ||
| template-rust | ||
| replicate |
FAQ#
Ultralytics의 Continuous Integration (CI)은 높은 품질 표준을 보장하기 위해 코드 변경 사항을 자동으로 통합하고 테스트하는 과정을 포함합니다. 당사의 CI 설정에는 unit tests, linting checks, and comprehensive tests 실행이 포함됩니다. 또한 Docker deployment, broken link checks, 보안 취약점을 위한 CodeQL analysis, 그리고 소프트웨어를 패키징하고 배포하기 위한 PyPI publishing을 수행합니다.
Ultralytics는 마크다운 및 HTML 파일 내에서 check for broken links를 수행하는 특정한 CI 액션을 사용합니다. 이는 끊어지거나 손상된 링크를 스캔하고 식별하여 문서의 무결성을 유지하는 데 도움을 주며, 사용자가 항상 정확하고 활성화된 리소스에 접근할 수 있도록 보장합니다.
CodeQL analysis는 잠재적인 보안 취약점을 발견하고 높은 품질 표준을 유지하기 위해 시맨틱 코드 분석을 수행하므로 Ultralytics에 매우 중요합니다. CodeQL을 통해 코드의 리스크를 선제적으로 식별하고 완화할 수 있으며, 이를 통해 강력하고 안전한 software solutions을 제공할 수 있습니다.
Ultralytics는 전용 CI 액션을 통해 프로젝트의 배포를 검증하기 위해 Docker를 채택하고 있습니다. 이 프로세스는 Dockerfile and associated scripts가 올바르게 작동하도록 보장하여, 확장 가능하고 신뢰할 수 있는 AI 솔루션에 필수적인 일관되고 재현 가능한 배포 환경을 가능하게 합니다.
자동화된 PyPI publishing은 프로젝트가 오류 없이 패키징되고 게시될 수 있도록 보장합니다. 이 단계는 Ultralytics의 Python 패키지를 배포하는 데 필수적이며, 사용자가 Python Package Index (PyPI)를 통해 당사의 도구를 쉽게 설치하고 사용할 수 있게 합니다.