понедельник, 11 июля 2016 г.

Линтеры в облаках

Сегодня тема - интеграция GitHub и линтеров, на примере Go. Впрочем, кроме "Go Report Card" - сервисы мультиязычны. О пользе линтеров вообще, объяснять я думаю не нужно. А вот в защиту линтеров в облаках в частности, пару слов скажу. Конечно удобнее настроить редактор и править предупреждения локально, но это не всегда возможно. Для редактора может банально не найтись нужного плагина, настройка зачастую сложна, поддерживать в актуальном состоянии плагины тяжело. И оформление результатов у сервисов куда как лучше, я не видел ни одну IDE с графиками, плашками, агрегированными метриками для ошибок и т.п.

 

Go Report Card

Работает только с кодом на Go, бесплатен. Прогоняет код через 7 линтеров и публикует результаты, бейдж для README в комплекте. Интерфейс образец лаконичности: заходим на страницу, вводим URL репозиторий и любуемся результатами, настроек никаких, регистрации не требует. Обновление подразумевается ручное, но при желании добавьте в ".travis.yml" строчку:
...
after_success:
  - bash <(curl --request POST "https://goreportcard.com/checks" --data "repo=github.com/user/example")
...
Конечная цель - попасть в top рейтинга.

 

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":
...
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 на сайт и добавить репозиторий. Дополнительную настройку, по заверениям автора, производить не нужно. Хотя на первый взгляд требования к коду завышены. Я попробую пока пожить с дефолтными настройками, которые при желании можно изменить. Так же в документации подробно описаны проверяемые метрики и нюансы работы с сервисом.

Оформления результатов проверки отторжения не вызывает, симпатично и удобно, смотрите сами.

 

Итоги

По результатам этой и предыдущей статей, получили, на каждый commit автоматические:
  • Проверку компилируемости.
  • Прогон тестов и анализ покрытия кода.
  • Проверку линтерами go кода (а так же markdown и shell).
Бегать проверять результаты в пять различных сервисов не хочется, поэтому всё агрегировано отображается в README:
 Всё что можно автоматизировано, агрегировано, настроено, осталось самое простое - написать приложение.

Комментариев нет:

Отправить комментарий