salt-lint 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +3 -0
- data/Gemfile +8 -0
- data/LICENSE +22 -0
- data/README.md +13 -0
- data/Rakefile +7 -0
- data/bin/salt-lint +10 -0
- data/lib/salt-lint/actions.rb +38 -0
- data/lib/salt-lint/options.rb +40 -0
- data/lib/salt-lint/printer.rb +49 -0
- data/lib/salt-lint/runner.rb +20 -0
- data/lib/salt-lint/tests.rb +69 -0
- data/lib/salt-lint/version.rb +3 -0
- data/lib/salt-lint.rb +10 -0
- data/salt-lint.gemspec +26 -0
- data/shippable.yml +10 -0
- data/spec/basic_spec.rb +8 -0
- data/spec/files_spec.rb +22 -0
- data/spec/spec_helper.rb +50 -0
- data/spec/tests_spec.rb +32 -0
- data/tests/.well_formatted_top.sls.swp +0 -0
- data/tests/file_with_multiple_errors.sls +3 -0
- data/tests/non_yaml_file.sls +3 -0
- data/tests/well_formatted_top.sls +4 -0
- metadata +161 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 2c6fdd6bc0f61861da08a6749f212f70702f859f
|
4
|
+
data.tar.gz: 7cdfc50a058ea2233f81cfb7d08e0de6b19dcf73
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 914c047db9b1a65e441f058a96db6f9d65a659c8fc896ec3cc2d7c79b3148724c899d01c77c6caba17f956f1f2275c57b0e5fe56a2ae07e9b8e6ad39ac818ca8
|
7
|
+
data.tar.gz: 6629dc6f3f525536de001d603fa708d858ea3c00ec8785e0ae3e313dfa59a1d7b44f4e7d082f215f8ce95d4ce80a7183beaaa67245a380b00cbd21c2a6286fbb
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2015 Lukasz Raczylo
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
22
|
+
|
data/README.md
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# salt-lint
|
2
|
+
|
3
|
+
Linter for Salt configuration management.
|
4
|
+
|
5
|
+
[](https://app.shippable.com/projects/551cfc825ab6cc1352b491b3/builds/latest)
|
6
|
+
[](https://app.shippable.com/projects/551cfc825ab6cc1352b491b3/builds/latest)
|
7
|
+
|
8
|
+
|
9
|
+
[](http://badge.fury.io/rb/salt-lint)
|
10
|
+
[](https://codeclimate.com/github/lukaszraczylo/salt-lint)
|
11
|
+
[](https://gratipay.com/lukaszraczylo/)
|
12
|
+
|
13
|
+
## Do not use it until version >= 0.5
|
data/Rakefile
ADDED
data/bin/salt-lint
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
module SaltLint
|
2
|
+
# Executing appropriate actions
|
3
|
+
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
4
|
+
class Actions
|
5
|
+
# Check if files comply with linter rules
|
6
|
+
def self.check_rules(f)
|
7
|
+
$invalid_yaml = Hash.new
|
8
|
+
$invalid_newline = Hash.new
|
9
|
+
|
10
|
+
checks_went_fine = true
|
11
|
+
Printer.print('debug', "Checking file: #{f}", 5)
|
12
|
+
test_suite_methods = SaltLint::Tests.methods(false).sort
|
13
|
+
line_counter = 1
|
14
|
+
File.readlines(f).each do |l|
|
15
|
+
test_suite_methods.each do |m|
|
16
|
+
if ! $invalid_yaml[f]
|
17
|
+
checks_went_fine_tmp = SaltLint::Tests.send(m, line_counter, l, f)
|
18
|
+
checks_went_fine_tmp == false ? checks_went_fine = false : nil
|
19
|
+
end
|
20
|
+
end
|
21
|
+
line_counter += 1
|
22
|
+
end
|
23
|
+
checks_went_fine ? Printer.print('success', "File looks fine: #{f}") : Printer.print('error', "Found errors in file: #{f}")
|
24
|
+
return checks_went_fine
|
25
|
+
end
|
26
|
+
|
27
|
+
# Scans folder specified as argument --scan for SLS files and returns array
|
28
|
+
def self.scan
|
29
|
+
files = Dir.glob( $arguments.scan + "**/*.sls")
|
30
|
+
if files and files.count > 0
|
31
|
+
return files
|
32
|
+
else
|
33
|
+
Printer.print('error', 'No salt state files found.')
|
34
|
+
exit 1
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'trollop'
|
2
|
+
|
3
|
+
module SaltLint
|
4
|
+
# Parsing user arguments / parameters class
|
5
|
+
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
6
|
+
class Options
|
7
|
+
# Actions based on parsed command line arguments
|
8
|
+
def self.act
|
9
|
+
# Scanning for files in
|
10
|
+
if $arguments.scan_given
|
11
|
+
list_of_files = SaltLint::Actions.scan
|
12
|
+
if list_of_files.count > 0
|
13
|
+
SaltLint::Actions.scan.each do |f|
|
14
|
+
SaltLint::Actions.check_rules(f)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
# Parsing command line arguments
|
22
|
+
def self.parse(args)
|
23
|
+
opts = Trollop::options do
|
24
|
+
version "salt-lint #{SaltLint::VERSION} (c) 2015 Lukasz Raczylo <lukasz@raczylo.com>\nVisit https://github.com/lukaszraczylo/salt-lint for source code"
|
25
|
+
banner <<-EOS
|
26
|
+
salt-lint is a first linter for Salt state files.
|
27
|
+
Usage:
|
28
|
+
$ salt-lint [options]
|
29
|
+
|
30
|
+
where [options] are:
|
31
|
+
EOS
|
32
|
+
opt :debug, 'Enable debug mode', default: 0
|
33
|
+
opt :file, 'File to check against', type: :string
|
34
|
+
opt :scan, 'Traversal scan of current directory and sub dirs', type: :string
|
35
|
+
end
|
36
|
+
$debug = opts.debug.to_i
|
37
|
+
return opts
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# Printer module
|
2
|
+
# ~~~~~~~~~~~~~~
|
3
|
+
# It's responsible for printing, duh.
|
4
|
+
|
5
|
+
require 'colorize'
|
6
|
+
|
7
|
+
module Printer
|
8
|
+
def self.print(msg_type = 'info', message = 'no message specified', debug_level = 0)
|
9
|
+
prefix = nil
|
10
|
+
show = true
|
11
|
+
kill = false
|
12
|
+
case msg_type
|
13
|
+
when 'debug'
|
14
|
+
prefix = '[d]'
|
15
|
+
color = 'light_black'
|
16
|
+
show = false
|
17
|
+
when 'warning'
|
18
|
+
prefix = '[!]'
|
19
|
+
color = 'yellow'
|
20
|
+
when 'error'
|
21
|
+
prefix = '[!!!]'
|
22
|
+
color = 'red'
|
23
|
+
kill = true
|
24
|
+
when 'question'
|
25
|
+
prefix = '[?]'
|
26
|
+
color = 'light_blue'
|
27
|
+
when 'success'
|
28
|
+
prefix = '[:)]'
|
29
|
+
color = 'light_green'
|
30
|
+
else
|
31
|
+
prefix = '[i]'
|
32
|
+
color = 'white'
|
33
|
+
end
|
34
|
+
|
35
|
+
# If debug message requested - check if debug flag has been enabled and which
|
36
|
+
# level of debug if so. If global debug level is higher or equal to message
|
37
|
+
# debug level - print it out.
|
38
|
+
if msg_type == 'debug' and $debug != false and debug_level <= $debug
|
39
|
+
show = true
|
40
|
+
end
|
41
|
+
|
42
|
+
if show == true
|
43
|
+
puts "#{prefix} #{message}".send(color.to_sym)
|
44
|
+
end
|
45
|
+
|
46
|
+
# Kill switch for error messages. Using this one to abort script run as
|
47
|
+
# something went really wrong there.
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'salt-lint/version'
|
2
|
+
require 'salt-lint/options'
|
3
|
+
require 'salt-lint/printer'
|
4
|
+
require 'salt-lint/actions'
|
5
|
+
require 'salt-lint/tests'
|
6
|
+
|
7
|
+
require 'awesome_print'
|
8
|
+
|
9
|
+
module SaltLint
|
10
|
+
# Main class executed on every run. Just to spin things up.
|
11
|
+
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
12
|
+
class Runner
|
13
|
+
def initialize(*args)
|
14
|
+
$arguments = SaltLint::Options.parse(args)
|
15
|
+
# ap $arguments
|
16
|
+
# ap $debug
|
17
|
+
SaltLint::Options.act
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module SaltLint
|
4
|
+
# Main class for all the tests.
|
5
|
+
class Tests
|
6
|
+
|
7
|
+
# Test content: Checking given line for trailing whitespaces.
|
8
|
+
def self.check_trailing_whitespace(line_number, line, file)
|
9
|
+
is_ok = true
|
10
|
+
Printer.print('debug', "Checking for trailing whitespaces: #{line_number}", 5)
|
11
|
+
line.match(/[ \t]+$/) ? is_ok = false : nil
|
12
|
+
if ! is_ok
|
13
|
+
Printer.print('warning', "Trailing whitespace character found: #{file}:#{line_number}")
|
14
|
+
end
|
15
|
+
return is_ok
|
16
|
+
end
|
17
|
+
|
18
|
+
# Test content: Checking given file for no newline at the end of the file.
|
19
|
+
def self.check_for_no_newline(line_number, line, file)
|
20
|
+
is_ok = true
|
21
|
+
Printer.print('debug', "Checking for no-newline at the end of the file in file #{file}", 5)
|
22
|
+
f = File.readlines(file).last
|
23
|
+
f.match(/^\n$/) ? is_ok = true : is_ok = false
|
24
|
+
if ! $invalid_newline.has_key?(file) && is_ok == false
|
25
|
+
Printer.print('warning', "No newline at the end of the file #{file}")
|
26
|
+
$invalid_newline[file] = is_ok
|
27
|
+
end
|
28
|
+
return is_ok
|
29
|
+
end
|
30
|
+
|
31
|
+
# Test content: Checking if given file is a valid YAML file.
|
32
|
+
def self.check_if_proper_yaml(line_number, line, file)
|
33
|
+
is_ok = true
|
34
|
+
begin
|
35
|
+
YAML.load_file(file)
|
36
|
+
rescue Psych::SyntaxError
|
37
|
+
is_ok = false
|
38
|
+
if ! $invalid_yaml.has_key?(file)
|
39
|
+
Printer.print('warning', "File #{file} is not YAML. Unable to parse.")
|
40
|
+
$invalid_yaml[file] = true
|
41
|
+
end
|
42
|
+
end
|
43
|
+
return is_ok
|
44
|
+
end
|
45
|
+
|
46
|
+
# Test content: Checking if given line isn't longer than 80 characters.
|
47
|
+
def self.check_line_length(line_number, line, file)
|
48
|
+
is_ok = true
|
49
|
+
Printer.print('debug', "Checking line length: #{line_number}", 5)
|
50
|
+
line.length > 80 ? is_ok = false : nil
|
51
|
+
if ! is_ok
|
52
|
+
Printer.print('warning', "Line length above 80 characters: #{file}:#{line_number}")
|
53
|
+
end
|
54
|
+
return is_ok
|
55
|
+
end
|
56
|
+
|
57
|
+
# Test content: Checking if given line contains double quoted content without
|
58
|
+
# variable.
|
59
|
+
def self.check_double_quotes(line_number, line, file)
|
60
|
+
is_ok = true
|
61
|
+
Printer.print('debug', "Checking for double quotes: #{line_number}", 5)
|
62
|
+
line.match(/\"(?!{+).*(?!}+)\"/) ? is_ok = false : nil
|
63
|
+
if ! is_ok
|
64
|
+
Printer.print('warning', "Using double quotes with no variables: #{file}:#{line_number}")
|
65
|
+
end
|
66
|
+
return is_ok
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
data/lib/salt-lint.rb
ADDED
data/salt-lint.gemspec
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
lib = File.expand_path('../lib', __FILE__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
require 'salt-lint/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = 'salt-lint'
|
7
|
+
spec.version = SaltLint::VERSION
|
8
|
+
spec.authors = ['Lukasz Raczylo']
|
9
|
+
spec.email = ['lukasz@raczylo.com']
|
10
|
+
spec.summary = %q{Salt linter written in Ruby}
|
11
|
+
spec.description = 'Created as nobody from Salt community created one till today.'
|
12
|
+
spec.homepage = 'https://github.com/lukaszraczylo/salt-lint'
|
13
|
+
spec.license = 'MIT'
|
14
|
+
|
15
|
+
spec.files = `git ls-files -z`.split("\x0")
|
16
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
17
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
|
+
spec.require_paths = ['lib']
|
19
|
+
|
20
|
+
spec.required_ruby_version = '>=1.9.2'
|
21
|
+
spec.add_development_dependency 'awesome_print', '~> 1.2.0', '>= 1.2.0'
|
22
|
+
spec.add_development_dependency 'trollop','2.1.2', '>= 2.1.2'
|
23
|
+
spec.add_development_dependency 'bundler', '~> 1.5'
|
24
|
+
spec.add_development_dependency 'rake', '~> 10.0', '>= 10.0.0'
|
25
|
+
spec.add_development_dependency 'rspec', '~> 2.6'
|
26
|
+
end
|
data/shippable.yml
ADDED
data/spec/basic_spec.rb
ADDED
data/spec/files_spec.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe 'Files operations' do
|
4
|
+
|
5
|
+
it 'scans all the files within "tests" directory' do
|
6
|
+
$arguments = OpenStruct.new({ scan: 'tests', scan_given: true })
|
7
|
+
list_of_sls_files = SaltLint::Actions.scan
|
8
|
+
expect(list_of_sls_files.grep(/well_formatted_top\.sls/).any?).to eq true
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'checks well formatted file' do
|
12
|
+
$arguments = OpenStruct.new({ file: 'tests/well_formatted_top.sls', file_given: true })
|
13
|
+
$debug = 0
|
14
|
+
expect(SaltLint::Actions.check_rules($arguments.file)).to eq true
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'checks file with multiple errors' do
|
18
|
+
$arguments = OpenStruct.new({ file: 'tests/file_with_multiple_errors.sls', file_given: true })
|
19
|
+
$debug = 0
|
20
|
+
expect(SaltLint::Actions.check_rules($arguments.file)).to eq false
|
21
|
+
end
|
22
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
|
+
|
4
|
+
require 'salt-lint'
|
5
|
+
require 'rspec'
|
6
|
+
require 'aruba/rspec'
|
7
|
+
require 'pathname'
|
8
|
+
require 'ostruct'
|
9
|
+
|
10
|
+
require 'salt-lint/printer'
|
11
|
+
require 'salt-lint/actions'
|
12
|
+
|
13
|
+
RSpec.configure do |c|
|
14
|
+
c.fail_fast = true
|
15
|
+
c.include ArubaDoubles
|
16
|
+
|
17
|
+
c.before :each do
|
18
|
+
Aruba::RSpec.setup
|
19
|
+
end
|
20
|
+
|
21
|
+
c.after :each do
|
22
|
+
Aruba::RSpec.teardown
|
23
|
+
end
|
24
|
+
|
25
|
+
c.before(:all, &:silence_output)
|
26
|
+
c.after(:all, &:enable_output)
|
27
|
+
end
|
28
|
+
|
29
|
+
root_path = Pathname.new(__FILE__).parent.parent
|
30
|
+
ENV['PATH'] = "#{root_path.join('bin').to_s}#{File::PATH_SEPARATOR}#{ENV['PATH']}"
|
31
|
+
|
32
|
+
public
|
33
|
+
|
34
|
+
def silence_output
|
35
|
+
# Store the original stderr and stdout in order to restore them later
|
36
|
+
@original_stderr = $stderr
|
37
|
+
@original_stdout = $stdout
|
38
|
+
|
39
|
+
# Redirect stderr and stdout
|
40
|
+
$stderr = File.new(File.join('/dev', 'null'), 'w')
|
41
|
+
$stdout = File.new(File.join('/dev', 'null'), 'w')
|
42
|
+
end
|
43
|
+
|
44
|
+
# Replace stderr and stdout so anything else is output correctly
|
45
|
+
def enable_output
|
46
|
+
$stderr = @original_stderr
|
47
|
+
$stdout = @original_stdout
|
48
|
+
@original_stderr = nil
|
49
|
+
@original_stdout = nil
|
50
|
+
end
|
data/spec/tests_spec.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
test_file_good = 'tests/well_formatted_top.sls'
|
4
|
+
test_file_bad_yaml = 'tests/non_yaml_file.sls'
|
5
|
+
test_file_bad = 'tests/file_with_multiple_errors.sls'
|
6
|
+
|
7
|
+
describe 'Tests suite checks if' do
|
8
|
+
it 'file is in YAML format (incorrect)' do
|
9
|
+
expect(SaltLint::Tests.check_if_proper_yaml(0, 0, test_file_bad_yaml)).to eq false
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'file is in YAML format (correct)' do
|
13
|
+
expect(SaltLint::Tests.check_if_proper_yaml(0, 0, test_file_good)).to eq true
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'won\'t allow lines longer than 80 characters' do
|
17
|
+
expect(SaltLint::Tests.check_line_length(0, 'xG9H2z8dOK0n3fTX1g4bWS5a6lRI7t6jCsY58mLJ2pqU9N3k4rBD0woA17iMyP90eEZ2u3cFbQ47uYD5lmM16' , test_file_good)).to eq false
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'won\'t allow double quotes' do
|
21
|
+
expect(SaltLint::Tests.check_double_quotes(0, 'There\'s one "potato"', test_file_good)).to eq false
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'won\'t allow trailing whitespace' do
|
25
|
+
expect(SaltLint::Tests.check_trailing_whitespace(0, 'This text looks okay ', test_file_good)).to eq false
|
26
|
+
expect(SaltLint::Tests.check_trailing_whitespace(0, "This text looks okay\t", test_file_good)).to eq false
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'won\'t allow to forget about newline at the end of the file' do
|
30
|
+
expect(SaltLint::Tests.check_for_no_newline(0, 0, test_file_bad)).to eq false
|
31
|
+
end
|
32
|
+
end
|
Binary file
|
metadata
ADDED
@@ -0,0 +1,161 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: salt-lint
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Lukasz Raczylo
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-04-02 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: awesome_print
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.2.0
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 1.2.0
|
23
|
+
type: :development
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.2.0
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 1.2.0
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: trollop
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - '='
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 2.1.2
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 2.1.2
|
43
|
+
type: :development
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - '='
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 2.1.2
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 2.1.2
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: bundler
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - "~>"
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '1.5'
|
60
|
+
type: :development
|
61
|
+
prerelease: false
|
62
|
+
version_requirements: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - "~>"
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '1.5'
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
name: rake
|
69
|
+
requirement: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - "~>"
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '10.0'
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 10.0.0
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - "~>"
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '10.0'
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: 10.0.0
|
87
|
+
- !ruby/object:Gem::Dependency
|
88
|
+
name: rspec
|
89
|
+
requirement: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - "~>"
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '2.6'
|
94
|
+
type: :development
|
95
|
+
prerelease: false
|
96
|
+
version_requirements: !ruby/object:Gem::Requirement
|
97
|
+
requirements:
|
98
|
+
- - "~>"
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: '2.6'
|
101
|
+
description: Created as nobody from Salt community created one till today.
|
102
|
+
email:
|
103
|
+
- lukasz@raczylo.com
|
104
|
+
executables:
|
105
|
+
- salt-lint
|
106
|
+
extensions: []
|
107
|
+
extra_rdoc_files: []
|
108
|
+
files:
|
109
|
+
- ".gitignore"
|
110
|
+
- Gemfile
|
111
|
+
- LICENSE
|
112
|
+
- README.md
|
113
|
+
- Rakefile
|
114
|
+
- bin/salt-lint
|
115
|
+
- lib/salt-lint.rb
|
116
|
+
- lib/salt-lint/actions.rb
|
117
|
+
- lib/salt-lint/options.rb
|
118
|
+
- lib/salt-lint/printer.rb
|
119
|
+
- lib/salt-lint/runner.rb
|
120
|
+
- lib/salt-lint/tests.rb
|
121
|
+
- lib/salt-lint/version.rb
|
122
|
+
- salt-lint.gemspec
|
123
|
+
- shippable.yml
|
124
|
+
- spec/basic_spec.rb
|
125
|
+
- spec/files_spec.rb
|
126
|
+
- spec/spec_helper.rb
|
127
|
+
- spec/tests_spec.rb
|
128
|
+
- tests/.well_formatted_top.sls.swp
|
129
|
+
- tests/file_with_multiple_errors.sls
|
130
|
+
- tests/non_yaml_file.sls
|
131
|
+
- tests/well_formatted_top.sls
|
132
|
+
homepage: https://github.com/lukaszraczylo/salt-lint
|
133
|
+
licenses:
|
134
|
+
- MIT
|
135
|
+
metadata: {}
|
136
|
+
post_install_message:
|
137
|
+
rdoc_options: []
|
138
|
+
require_paths:
|
139
|
+
- lib
|
140
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - ">="
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: 1.9.2
|
145
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
146
|
+
requirements:
|
147
|
+
- - ">="
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0'
|
150
|
+
requirements: []
|
151
|
+
rubyforge_project:
|
152
|
+
rubygems_version: 2.4.5
|
153
|
+
signing_key:
|
154
|
+
specification_version: 4
|
155
|
+
summary: Salt linter written in Ruby
|
156
|
+
test_files:
|
157
|
+
- spec/basic_spec.rb
|
158
|
+
- spec/files_spec.rb
|
159
|
+
- spec/spec_helper.rb
|
160
|
+
- spec/tests_spec.rb
|
161
|
+
has_rdoc:
|