Непрерывная интеграция (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 | |||||
| lite | |||||
| openapi | |||||
| skills | |||||
| yolo-ios-app | |||||
| yolo-flutter-app | |||||
| thop | |||||
| actions | |||||
| mkdocs | |||||
| docs | |||||
| handbook | |||||
| stars | |||||
| CLIP |
Каждый значок показывает статус последнего запуска соответствующего теста CI в ветке main соответствующего репозитория. Если тест завершится с ошибкой, значок покажет статус «с ошибкой», а если пройдет успешно — статус «успешно».
Если ты заметишь, что тест завершается с ошибкой, очень поможет, если ты сообщишь об этом, создав 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.