Сегодня тема - интеграция GitHub и линтеров, на примере Go. Впрочем, кроме "Go Report Card" - сервисы мультиязычны. О пользе линтеров вообще, объяснять я думаю не нужно. А вот в защиту линтеров в облаках в частности, пару слов скажу. Конечно удобнее настроить редактор и править предупреждения локально, но это не всегда возможно. Для редактора может банально не найтись нужного плагина, настройка зачастую сложна, поддерживать в актуальном состоянии плагины тяжело. И оформление результатов у сервисов куда как лучше, я не видел ни одну IDE с графиками, плашками, агрегированными метриками для ошибок и т.п.
Go Report Card
Работает только с кодом на Go, бесплатен. Прогоняет код через 7 линтеров и публикует результаты, бейдж для README в комплекте. Интерфейс образец лаконичности: заходим на страницу, вводим URL репозиторий и любуемся результатами, настроек никаких, регистрации не требует. Обновление подразумевается ручное, но при желании добавьте в ".travis.yml" строчку:
Конечная цель - попасть в top рейтинга.
... after_success: - bash <(curl --request POST "https://goreportcard.com/checks" --data "repo=github.com/user/example") ...
Code Climate
Этот сервис работает не только с Go. Он больше направлен на проверку web-приложений. Но уверен, что вы, среди порядка 30 линтеров, найдёте интересное и для себя. Например для Go 3 штуки, плюс я подключил себе экзотические линтеры для markdown и shell. Сервис умеет считать покрытие кода, но к сожалению только для Ruby, JavaScript, PHP, и Python. Но для этого у нас существует codecov описанный в предыдущей статье. Codeclimate традиционно бесплатен для Open Source.
Интеграция запутана по сравнению с остальными. Регистрируемся на сайте, добавляем репозиторий. Генерируем token на GitHub: "Settings\Personal access tokens\Generate new token" и там в простейшем случае даём права на "repo:status". В проекте на GitHub идём в "Settings\Webhooks & services\Services\Add service" выбираем "CodeClimate" и вписываем token. Далее в репозиторий добавляем файл с перечислением линтеров и расширений файлов для анализа ".codeclimate.yml":
Подробнее о настройке найдёте документации.
В результате, из полезного, имеем список issues для исправления. Часть линтеров поддерживает подробные описания проблемы с способы их исправления. Вот пример сообщения от "shellcheck".
Интеграция запутана по сравнению с остальными. Регистрируемся на сайте, добавляем репозиторий. Генерируем token на GitHub: "Settings\Personal access tokens\Generate new token" и там в простейшем случае даём права на "repo:status". В проекте на GitHub идём в "Settings\Webhooks & services\Services\Add service" выбираем "CodeClimate" и вписываем token. Далее в репозиторий добавляем файл с перечислением линтеров и расширений файлов для анализа ".codeclimate.yml":
... engines: markdownlint: enabled: true shellcheck: enabled: true gofmt: enabled: true golint: enabled: true govet: enabled: true ratings: paths: - "**.go" - "**.md" - "**.sh"
В результате, из полезного, имеем список issues для исправления. Часть линтеров поддерживает подробные описания проблемы с способы их исправления. Вот пример сообщения от "shellcheck".
Codebeat
Сервис работает с Swift, Objective-C, Go, Ruby, Python, Java. Ориентирован он на анализ метрик кода. Сервис предупредит о высокой цикломатической сложности или размере функции, большом количестве аргументов или переменных, превышенной глубине вложенности и т.п. Ну и как обычно: "public projects free forever".
Для работы с codebeat достаточно войти через GitHub на сайт и добавить репозиторий. Дополнительную настройку, по заверениям автора, производить не нужно. Хотя на первый взгляд требования к коду завышены. Я попробую пока пожить с дефолтными настройками, которые при желании можно изменить. Так же в документации подробно описаны проверяемые метрики и нюансы работы с сервисом.
Оформления результатов проверки отторжения не вызывает, симпатично и удобно, смотрите сами.
Для работы с codebeat достаточно войти через GitHub на сайт и добавить репозиторий. Дополнительную настройку, по заверениям автора, производить не нужно. Хотя на первый взгляд требования к коду завышены. Я попробую пока пожить с дефолтными настройками, которые при желании можно изменить. Так же в документации подробно описаны проверяемые метрики и нюансы работы с сервисом.
Оформления результатов проверки отторжения не вызывает, симпатично и удобно, смотрите сами.
Итоги
По результатам этой и предыдущей статей, получили, на каждый commit автоматические:
Всё что можно автоматизировано, агрегировано, настроено, осталось самое простое - написать приложение.
- Проверку компилируемости.
- Прогон тестов и анализ покрытия кода.
- Проверку линтерами go кода (а так же markdown и shell).
Всё что можно автоматизировано, агрегировано, настроено, осталось самое простое - написать приложение.