Как инженеры-программисты, мы любим автоматизацию. Однако проверка кода часто является достаточно ручным процессом, который занимает значительную часть нашего времени. Как же его улучшить? Существует множество советов и рекомендаций по эффективному проведению обзоров кода, поэтому мы не будем рассматривать их здесь. Вместо этого давайте сосредоточимся на тех частях обзора кода, которые мы можем автоматизировать.
В этой статье мы рассмотрим пять инструментов и интеграций, которые могут значительно улучшить ваш опыт рецензирования кода в GitHub.
Travis CI или CircleCI
Прежде всего, давайте поговорим о непрерывной интеграции (CI). Настройка CI для ваших репозиториев — это первый шаг в автоматизации процесса рецензирования кода. При наличии конвейера CI вы можете запускать все, что захотите! Как минимум, в ваш CI-конвейер должны быть включены задания для форматирования, линтинга и модульных тестов. Вы также можете рассмотреть возможность создания дополнительных заданий для создания артефактов, развертывания приложений для рецензирования или выполнения сквозных тестов.
Непрерывная интеграция помогает вам постоянно поддерживать мастер-ветку в хорошем состоянии. Она также ускоряет процесс проверки кода, выполняя все те утомительные действия, в которых компьютеры хороши, а люди нет. Больше никаких препирательств по поводу стилей кода или лучших практик во время обзоров кода! При наличии конвейера CI вы можете запускать автоматические проверки для каждого нового создаваемого вами запроса.
Travis CI и CircleCI — отличные варианты для непрерывной интеграции. Оба позволяют настраивать конвейер CI с помощью YAML-файлов, что дает возможность писать инфраструктуру как код. В YAML-файле вы можете указать, какой образ Docker использовать, какую версию Node запускать, какие шаги по установке и сборке выполнять.
Самое главное, что Travis CI и CircleCI бесплатны для использования в проектах с открытым исходным кодом.
Jest и Codecov
Далее рассмотрим покрытие тестами. Юнит-тесты очень важны. Они помогают предотвратить регрессии, служат живой документацией для вашей кодовой базы и позволяют уверенно вносить изменения.
Тесты легко внедряются в конвейер CI. Если какой-либо из тестов не работает, то тестовое задание не выполняется, и запрос блокируется от слияния до тех пор, пока тесты не будут исправлены.
Важно не только, чтобы тесты проходили, но и чтобы покрытие кода было высоким. Прохождение тестов, покрывающих только 20% кодовой базы, не даст вам достаточной уверенности в том, что остальные 80% кодовой базы находятся в хорошем состоянии после внесения любого изменения. Более высокое покрытие кода означает меньшее количество мест, где могут скрываться ошибки.
Такие тестовые платформы, как Jest, позволяют вам собирать результаты покрытия кода, а также обеспечивать соблюдение определенных пороговых значений покрытия кода. Если вы хотите сделать эти отчеты о покрытии еще одним шагом вперед, вы можете добавить такой инструмент, как Codecov, в свой конвейер CI.
Codecov берет данные, которые генерирует Jest, и превращает их в отчеты, которые вы можете просматривать в запросах на исправление. Codecov может дать вам представление о том, как каждый запрос на внесение изменений влияет на общее покрытие, было ли увеличение или уменьшение покрытия, и какие файлы были затронуты. Codecov легко интегрируется практически в любой используемый вами инструмент CI, будь то Travis CI, CircleCI, GitHub Actions, GitLab CI, Jenkins или что-то другое.
Кроме того, CodeCov можно бесплатно использовать для проектов с открытым исходным кодом.
SonarQube и SonarCloud
В-третьих, давайте обсудим средства проверки статического анализа. Линтеры, такие как ESLint, необходимы для любого проекта. Линтеры отлично подходят для внедрения лучших практик и согласованных стилей кодирования.
Инструмент статического анализа, такой как SonarQube, может предоставить дополнительные сведения в дополнение к тому, что может найти обычный линтер. SonarQube может помочь выявить запахи кода, сложность кода, дублирование кода и проблемы безопасности.
SonarQube может работать как самоуправляемый сервис, или вы можете использовать его в облаке как SonarCloud. Вы также можете интегрировать SonarQube в свой конвейер CI, чтобы он публиковал комментарии к вашим запросам на исправление.
Sonar предлагает решения как для корпоративных компаний, так и для проектов с открытым исходным кодом. Как и другие инструменты, о которых мы уже говорили, SonarQube и SonarCloud бесплатны для использования в проектах с открытым исходным кодом.
Карты обзоров CodeSee
В-четвертых, давайте рассмотрим способы визуализации нашей кодовой базы и изменений, которые мы вносим в наши запросы на внесение изменений. Разве не приятно знать, как каждый измененный метод или файл влияет на остальную функциональность приложения?
CodeSee Review Maps поможет вам визуализировать, какие файлы были изменены и как эти изменения влияют на вышестоящие и нижестоящие зависимости. Благодаря интеграции с вашим репозиторием GitHub, CodeSee может автоматически публиковать комментарий и диаграмму к каждому запросу на внесение изменений.
CodeSee облегчает просмотр измененных файлов в логическом порядке, а не просто просматривает их в алфавитном порядке. Он даже позволяет вам — как автору кода — создавать интерактивные туры по вашему коду, чтобы провести рецензентов по вашим изменениям.
И — вы угадали — CodeSee Review Maps бесплатны для использования в проектах с открытым исходным кодом.
Действия на GitHub
В-пятых, это была бы не совсем корректная статья об автоматизации частей обзора кода в GitHub, если бы мы не упомянули о GitHub Actions.
GitHub Actions позволяют создавать любые рабочие процессы, которые вы только можете себе представить. Эти рабочие процессы можно запускать как задания или проверки в GitHub, поэтому они функционируют аналогично другим инструментам CI, таким как Travis CI или CircleCI.
GitHub Actions Marketplace — это отличное место для поиска действий с открытым исходным кодом, которые можно использовать в своем проекте. Вы можете фильтровать результаты по таким категориям, как «качество кода», «обзор кода» или «непрерывная интеграция».
Просто в качестве тизера, пара интересных действий в этих категориях, которые привлекли мое внимание, были действия semantic-pull-request и automatic-rebase.
Действие semantic-pull-request «гарантирует, что заголовок вашего PR соответствует спецификации Conventional Commits», что невероятно полезно, если вы сминаете и объединяете свои запросы, а затем полагаетесь на эти сообщения о фиксации для дальнейшей автоматизации в процессе выпуска.
Действие automatic-rebase позволяет вам перебазировать ваши коммиты, просто прокомментировав /rebase
в вашем запросе на pull request. Перебазирование стало проще!
С помощью GitHub Actions мы можем автоматизировать все вещи! И — предупреждение о спойлере — GitHub Actions бесплатны для использования в публичных репозиториях.
Заключение: 5 инструментов для улучшения рецензирования кода в GitHub
Итак, вот пять инструментов для улучшения качества рецензирования кода в GitHub:
- Travis CI или CircleCI (для непрерывной интеграции)
- Jest и Codecov (для покрытия кода)
- SonarQube и SonarCloud (для выявления запахов кода и проблем безопасности)
- CodeSee Review Maps (для диаграмм кода)
- GitHub Actions (для всего остального).
Спасибо, что прочитали, и счастливого кодинга!