Непрерывная интеграция (CI)#
Непрерывная интеграция (CI) — это важный аспект разработки программного обеспечения, который включает автоматическую интеграцию и тестирование изменений. CI позволяет нам поддерживать высокое качество кода, выявляя проблемы на ранних этапах и на протяжении всего процесса разработки. В Ultralytics мы используем различные CI-тесты для обеспечения качества и целостности нашей кодовой базы.
Действия CI#
Вот краткое описание наших действий в CI:
- CI: Это наш основной CI-тест, который включает в себя запуск модульных тестов, проверку линтером, а иногда и более комплексные тесты в зависимости от репозитория.
- Docker Deployment: Этот тест проверяет развертывание проекта с использованием Docker, чтобы убедиться, что Dockerfile и сопутствующие скрипты работают правильно.
- Broken Links: Этот тест сканирует кодовую базу на наличие битых или неработающих ссылок в наших markdown- или HTML-файлах.
- CodeQL: CodeQL — это инструмент от GitHub, который выполняет семантический анализ нашего кода, помогая находить потенциальные уязвимости безопасности и поддерживать высокое качество кода.
- PyPI Publishing: Этот тест проверяет, можно ли упаковать проект и опубликовать его на PyPI без каких-либо ошибок.
Результаты CI#
Ниже приведена таблица со статусами этих CI-тестов для наших основных репозиториев:
| Репозиторий | CI | Docker Deployment | Broken Links | CodeQL | PyPI and Docs Publishing |
|---|---|---|---|---|---|
| yolov3 | |||||
| yolov5 | |||||
| ultralytics | |||||
| yolo-ios-app | |||||
| yolo-flutter-app | |||||
| thop | |||||
| actions | |||||
| mkdocs | |||||
| docs | |||||
| handbook | |||||
| stars | |||||
| CLIP |
Каждый бейдж показывает статус последнего запуска соответствующего CI-теста в ветке main соответствующего репозитория. Если тест не проходит, бейдж отображает статус "failing", а если проходит — статус "passing".
Если ты заметил, что тест не пройден, будет очень полезно, если ты сообщишь об этом через GitHub issue в соответствующем репозитории.
Помни, что успешный CI-тест не означает, что всё идеально. Мы всегда рекомендуем вручную просматривать код перед развертыванием или слиянием изменений.
Покрытие кода#
Покрытие кода — это показатель, который отражает процент кодовой базы, выполняемый при запуске тестов. Он дает представление о том, насколько хорошо твои тесты проверяют код, и может иметь решающее значение для выявления непротестированных частей твоего приложения. Высокий процент покрытия кода часто связан с меньшей вероятностью появления ошибок. Однако важно понимать, что покрытие кода не гарантирует отсутствие дефектов. Оно лишь указывает, какие части кода были выполнены тестами.
Интеграция с codecov.io#
В Ultralytics мы интегрировали наши репозитории с codecov.io — популярной онлайн-платформой для измерения и визуализации покрытия кода. Codecov предоставляет подробную аналитику, сравнение покрытия между коммитами и визуальные наложения прямо на твой код, указывая, какие строки были покрыты тестами.
Интегрируясь с Codecov, мы стремимся поддерживать и улучшать качество нашего кода, фокусируясь на областях, которые могут быть подвержены ошибкам или требуют дополнительного тестирования.
Результаты покрытия#
Чтобы быстро оценить статус покрытия кода в наших репозиториях, мы добавили бейджи Codecov и круговые диаграммы (sunburst) для каждого отслеживаемого проекта. Самый внутренний круг каждой диаграммы представляет весь проект, далее от центра идут папки и, наконец, отдельный файл. Размер и цвет каждого сегмента представляют количество операторов и процент покрытия соответственно. Для получения полной информации посетите организацию Ultralytics Codecov.
| Репозиторий | Покрытие кода | Солнечная диаграмма (Sunburst) |
|---|---|---|
| actions | ||
| ultralytics | ||
| inference | ||
| yolo-flutter-app | ||
| yolo-ios-app | ||
| llm | ||
| profile | ||
| template | ||
| template-rust | ||
| replicate |
FAQ#
Непрерывная интеграция (CI) в Ultralytics включает в себя автоматическое объединение и тестирование изменений кода для обеспечения высоких стандартов качества. Наша настройка CI включает запуск модульных тестов, проверку линтером и комплексные тесты. Кроме того, мы выполняем развертывание в Docker, проверку битых ссылок, анализ CodeQL на предмет уязвимостей безопасности и публикацию в PyPI для упаковки и распространения нашего программного обеспечения.
Ultralytics использует специальное действие CI для проверки битых ссылок в наших markdown- и HTML-файлах. Это помогает поддерживать целостность нашей документации путем сканирования и выявления мертвых или неработающих ссылок, гарантируя, что у пользователей всегда есть доступ к точным и актуальным ресурсам.
Анализ CodeQL имеет решающее значение для Ultralytics, так как он выполняет семантический анализ кода для поиска потенциальных уязвимостей безопасности и поддержания высоких стандартов качества. С помощью CodeQL мы можем проактивно выявлять и снижать риски в нашем коде, помогая нам создавать надежные и безопасные программные решения.
Ultralytics использует Docker для проверки развертывания наших проектов с помощью специального действия CI. Этот процесс гарантирует, что наши Dockerfile и сопутствующие скрипты функционируют корректно, обеспечивая стабильные и воспроизводимые среды развертывания, которые критически важны для масштабируемых и надежных решений в области ИИ.
Автоматизированная публикация в PyPI гарантирует, что наши проекты могут быть упакованы и опубликованы без ошибок. Этот шаг важен для распространения пакетов Python от Ultralytics, позволяя пользователям легко устанавливать и использовать наши инструменты через Python Package Index (PyPI).
Ultralytics измеряет покрытие кода путем интеграции с Codecov, получая представление о том, какая часть кодовой базы выполняется во время тестов. Высокое покрытие кода может указывать на хорошо протестированный код, помогая выявить непротестированные участки, которые могут быть подвержены ошибкам. Подробные метрики покрытия кода можно изучить с помощью бейджей, отображаемых в наших основных репозиториях или непосредственно на Codecov.