Effortless Code Conventions Review for Pull Request Changes

Reliably arranged source code helps hackability. You can filter code speedier if its organizing is predictable.

Photo by chuttersnap on Unsplash

To fight with non-consistent source code formatting there are static analysis tools such as RuboCop .

We decided to share code formatting feedback directly on GitHub by commenting Pull Requests changes.

There is a suitable tool for this job - pronto . With help of *CI *(in our case that’s CircleCI ) we run it for each Pull Request.

Our CircleCI 2.0 configuration to run pronto #

**NOTE: **In order to reduce mess with dependencies we put all our linters and pronto into separate Gemfile.tools.

# .circleci/config.yml
version: 2
jobs:
  lint:
    environment:
      - BUNDLE_GEMFILE: Gemfile.tools
    docker:
      # specify the version you desire here
      - image: circleci/ruby:2.4.2-stretch-node-browsers
        environment:
          RAILS_ENV: test
          RACK_ENV: test

    working_directory: ~/repo

    steps:
      - checkout
      - restore_cache:
          keys:
          - v1-tools-dependencies-{{ checksum "Gemfile.tools.lock" }}
          # fallback to using the latest cache if no exact match is found
          - v1-tools-dependencies-

      - run:
          name: install cmake
          command: |
            sudo apt-get install cmake            
      - run:
          name: install dependencies
          command: |
            bundle check --path vendor/bundle || bundle install --jobs=4 --retry=3 --path vendor/bundle            
      - save_cache:
          paths:
            - ./vendor/bundle
          key: v1-tools-dependencies-{{ checksum "Gemfile.tools.lock" }}


      - run:
          name: run source code analysis
          command: |
            bundle exec pronto run -c origin/master -f github_status -f github_pr_review --exit-code            
      - store_artifacts:
          path: ./tmp

workflows:
  version: 2
  release:
    jobs:
      - lint:
# Run lint after tests
#          requires:
#            - test
source 'https://rubygems.org'

git_source(:github) do |repo_name|
  repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
  "https://github.com/#{repo_name}.git"
end

gem 'pronto'
gem 'oj'
gem 'pronto-rubocop', require: false
gem 'pronto-scss', require: false
gem 'pronto-eslint', require: false
gem 'pronto-brakeman', require: false
gem 'pronto-rails_best_practices', require: false

Finally, you need to add PRONTO_GITHUB_ACCESS_TOKEN. You could obtain your PERSONAL GITHUB ACCESS TOKEN by following this instruction and check environment variable on CircleCI to add it to the project.

Summary #

There are similar ready SASS solutions to help you with reducing the amount of waste:

But they are not free and most of them are solve only specific problems.

With pronto, you have more options to customize by:

  • setup specific code analyzers for the different problems

  • easier support rules to follow company conventions

  • store rules in the repository with project source code

Let’s remove the waste of time for trivial problems and spend it on codding!

Get More #

Contact us to find out more about how we work. We’re excited to help you — as always, we’d love to hear what you think!

Paul Keen is an Open Source Contributor and a Chief Technology Officer at JetThoughts . Follow him on LinkedIn or GitHub .

If you enjoyed this story, we recommend reading our latest tech stories and trending tech stories .

Comments