Onceover::CodeQuality

This is the Code Quality plugin for Onceover, The gateway drug to automated infrastructure testing with Puppet

What does it do?

The plugin checks your control repository for:

  • Linting
  • Syntax

And then generates documentation using Puppet Strings

For sure you can hack around with rake/make and hack something up each time but aint nobody got time for that!

Installation

Install the onceover-codequality gem by adding it to your Gemfile or by running the following command:

$ gem install onceover-codequality

Usage

Installing the codequality gem creates a new item within onceover's run command: codequality. See onceover run codequality --help for all available options.

The command will return 1 to the system if any tests fail, otherwise 0, which makes it perfect to include in build pipelines.

Check all code in the control repository for Lint and Syntax errors

$ onceover run codequality

Skip Lint check

$onceover run codequality --no_lint

Skip Puppet syntax check

$ onceover run codequality --no_syntax

Skip Puppetfile syntax check

$ onceover run codequality --no_puppetfile

Skip documentation generation

$ onceover run codequality --no_docs

Use custom lint settings Create a file puppet-lint.rc in the directory you run onceover codequality from and it will be automatically used by Puppet Lint. If missing, the built-in defaults from lib/onceover/codequality/lint.rb will be used.

Sample output

All clear

$ onceover run codequality
INFO   -> Checking for lint...
INFO   -> checking manifests
INFO   -> checking site/role
INFO   -> Checking syntax...
---> syntax:manifests
---> syntax:templates
---> syntax:hiera:yaml
INFO   -> Code Quality tests passed, have a nice day

Lint and syntax errors

$ onceover run codequality
INFO   -> Checking for lint...
INFO   -> checking manifests
INFO   -> checking site/role
./manifests/example.pp - WARNING: class not documented on line 1
./manifests/webserver.pp - WARNING: class not documented on line 1
./manifests/database_server.pp - WARNING: class not documented on line 1
ERROR  -> Lint test failed, see previous errors
INFO   -> Checking syntax...
---> syntax:manifests
Could not parse for environment *root*: Syntax error at 'ensure' at /home/geoff/crud/control-repo/manifests/bogus.pp:2:3
ERROR  -> Syntax test failed, see previous errors
ERROR  -> Code Quality tests failed, see previous error
$ echo $?
1

FAQ

WARN: Unresolved specs during Gem::Specification.reset?

I get these errors when I run onceover run codequality but everything seems to work, what gives?:

WARN: Unresolved specs during Gem::Specification.reset:
      rake (>= 0)
      hiera (< 4, >= 2.0)
      gettext (>= 3.0.2)
WARN: Clearing out unresolved specs.
Please report a bug if this causes problems.

Beats me - something to do with rubygems. The best way to beat this message is to use bundler which basically you should already be doing anyway (for your own sanity):

$ bundle exec onceover run codequality

What are you using under-the-hood?

Development

If you have new ideas for things to check this might be a handy place to add them, please open a ticket, otherwise see the helloworld plugin if you want to have a go at writing a plugin of your own.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/declarativesystems/onceover-codequality.