Автоматическая проверка кода с помощью Vexor


Я думаю многим известен сервис Hound, который занимается автоматической проверкой кода. Когда вы создаете новый Pull Request на GitHub, Hound запускает проверку вашего кода на основе таких решений, как rubocop, haml-lint или scss-lint. Если в процессе проверки всплывают какие-то проблемы, Hound сообщит об этом, добавив соответствующий комментарий в ваш Pull Request. Это отличный инструмент для работы, но как говорится, за всё хорошее, приходится платить.

Hound Price

Не каждая компания готова платить такие деньги, поэтому я решил пойти другим путём. За основу взял библиотеку pronto, которая из коробки умеет всё тоже самое, что и Hound. Осталось дело за малым - интегрировать pronto с Vexor. Далее идет пошаговая инструкция, что для этого понадобится сделать.

Первым делом заходим на GitHub и генерируем персональный токен.

Access Token

Затем, добавляем 2 переменные окружения в настройках вашего проекта на Vexor.

Env Variables

Далее, добавляем pronto и несколько его плагинов в Gemfile вашего проекта. Список доступных плагинов можно найти по этой ссылке.

group :test do
  gem 'pronto'
  gem 'pronto-brakeman', require: false
  gem 'pronto-coffeelint', require: false
  gem 'pronto-fasterer', require: false
  gem 'pronto-flay', require: false
  gem 'pronto-haml', require: false
  gem 'pronto-jshint', require: false
  gem 'pronto-rails_best_practices', require: false
  gem 'pronto-reek', require: false
  gem 'pronto-rubocop', require: false
  gem 'pronto-scss', require: false
end

Для запуска pronto нам потребуется создать файл bin/pronto:

#!/usr/bin/env ruby

require 'bundler/setup'
require 'pronto'
require 'pronto/cli'

begin
  Pronto::CLI.start
rescue Octokit::NotFound
  puts 'Pull Request Not Found'
end

И дать ему права на выполнение:

$ chmod +x bin/pronto

Теперь нам остаётся только добавить несколько команд в .vexor.yml:

language: ruby

script:
  - git remote set-branches origin '*'
  - git fetch
  - git checkout $CI_BRANCH
  - bin/pronto run -f github_pr -c $DEFAULT_BRANCH
  - bundle exec rake

И всё, можно проверять.

Pull Request

Кто-то может возразить, зачем всё это нужно, если есть overcommit? Новые разработчики на проекте часто забывают настроить overcommit и это обнаруживается только спустя несколько дней, когда другой разработчик не может отправить свои изменения на сервер. Чтобы исключить подобные ситуации, я рекомендую использовать эти инструменты вместе.

P.S. Хочу поблагодарить Сашу Кириллова, за помощь с интеграцией pronto и Vexor.

Похожие записи

Управление зависимостями через Homebrew

Управление внешними зависимостями проекта c помощью Homebrew Bundle.

Класс Set и уникальные коллекции объектов

Рассмотрим решение одной задачи с использованием класса Set и DDD.

Настройка Passenger для работы с Action Cable

Решаем проблему работы WebSocket-сервера через Phusion Passenger.

Настройка Rails-сервера на DigitalOcean

Настройка боевого Rails-сервера на DigitalOcean. Шаг за шагом.

Резервное копирование GitLab с помощью rsync

Мини-проект для автоматического резервного копирования GitLab c помощью Ruby и rsync.

Настройка Rails-окружения на OS X Yosemite

Полноценное рабочее окружение на OS X 10.10 Yosemite: Ruby, Homebrew, Oh My ZSH, rbenv и многое другое.