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