onceover-codequality 0.4.2 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/onceover/codequality/cli.rb +7 -23
- data/lib/onceover/codequality/docs.rb +7 -1
- data/lib/onceover/codequality/lint.rb +4 -1
- data/lib/onceover/codequality/puppetfile.rb +13 -4
- data/lib/onceover/codequality/syntax.rb +49 -11
- data/lib/onceover/codequality/version.rb +1 -1
- data/res/validate_yaml.py +24 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 539deb30ea7e0a162926b170e8adf94de19e7e469eb1212801daedc20b994318
|
4
|
+
data.tar.gz: ed7c7de7e391a6faac5e78e66b4edd6ed38868311a299a19e197bba873939471
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 70ea401197ac110b5f53fbd3e4d433889d6171181e88c790ca2eabb5b8fb88163c5427b097875355c296aea3f595650ecf64b8dc1bacb5ef7ffe0f5e2ab75930
|
7
|
+
data.tar.gz: 14532de430f9523b8519fca0fe1b3a9aabb27f117446668eeed95ca1b5b4df1c2b70aa2bf0902cff8b930f830d0185dd2990d90524a5e6ba5bf20946a713a0df
|
@@ -29,36 +29,20 @@ class Onceover
|
|
29
29
|
html_docs = opts[:html_docs] || false
|
30
30
|
status = true
|
31
31
|
|
32
|
-
if !
|
33
|
-
|
34
|
-
if ! Onceover::CodeQuality::Syntax.puppet
|
35
|
-
status = false
|
36
|
-
logger.error "Syntax test failed, see previous errors"
|
37
|
-
end
|
32
|
+
if ! no_puppetfile
|
33
|
+
status &= Onceover::CodeQuality::Puppetfile.puppetfile
|
38
34
|
end
|
39
35
|
|
40
|
-
if !
|
41
|
-
|
42
|
-
if ! Onceover::CodeQuality::Lint.puppet
|
43
|
-
status = false
|
44
|
-
logger.error "Lint test failed, see previous errors"
|
45
|
-
end
|
36
|
+
if ! no_syntax
|
37
|
+
status &= Onceover::CodeQuality::Syntax.puppet
|
46
38
|
end
|
47
39
|
|
48
|
-
if !
|
49
|
-
|
50
|
-
if ! Onceover::CodeQuality::Puppetfile.puppetfile
|
51
|
-
status = false
|
52
|
-
logger.error "puppetfile syntax failed, see previous errors"
|
53
|
-
end
|
40
|
+
if ! no_lint
|
41
|
+
status &= Onceover::CodeQuality::Lint.puppet
|
54
42
|
end
|
55
43
|
|
56
44
|
if ! no_docs
|
57
|
-
|
58
|
-
if ! Onceover::CodeQuality::Docs.puppet_strings(html_docs)
|
59
|
-
status = false
|
60
|
-
logger.error "Documentation generation failed, see previous errors"
|
61
|
-
end
|
45
|
+
status &= Onceover::CodeQuality::Docs.puppet_strings(html_docs)
|
62
46
|
end
|
63
47
|
|
64
48
|
if status
|
@@ -6,12 +6,18 @@ class Onceover
|
|
6
6
|
LOCAL_MOD_DIR = "site"
|
7
7
|
|
8
8
|
def self.puppet_strings(html_docs)
|
9
|
+
logger.info "Generating documentation..."
|
9
10
|
status = true
|
10
11
|
format = html_docs ? "html" : "markdown"
|
11
12
|
if Dir.exist?(LOCAL_MOD_DIR)
|
12
13
|
Dir.glob("#{LOCAL_MOD_DIR}/*/") { |dir|
|
13
14
|
Dir.chdir(dir) {
|
14
|
-
|
15
|
+
# puppet strings prints useful metrics so don't swallow its output
|
16
|
+
s = system("puppet strings generate --format #{format}")
|
17
|
+
if ! s
|
18
|
+
logger.error("Error running puppet strings - see previous output")
|
19
|
+
end
|
20
|
+
status &= s
|
15
21
|
}
|
16
22
|
}
|
17
23
|
end
|
@@ -25,10 +25,13 @@ class Onceover
|
|
25
25
|
status = true
|
26
26
|
LINT_PATHS.each { |p|
|
27
27
|
if Dir.exists?(p)
|
28
|
-
logger.info("checking #{p}")
|
28
|
+
logger.info("checking lint in #{p}...")
|
29
29
|
if ! system("puppet-lint #{LINT_OPTIONS.join ' '} #{p}")
|
30
30
|
status = false
|
31
|
+
else
|
32
|
+
logger.info("...ok")
|
31
33
|
end
|
34
|
+
|
32
35
|
end
|
33
36
|
}
|
34
37
|
|
@@ -4,11 +4,20 @@ class Onceover
|
|
4
4
|
module Puppetfile
|
5
5
|
|
6
6
|
def self.puppetfile
|
7
|
-
|
8
|
-
|
7
|
+
status = true
|
8
|
+
if File.exist?("Puppetfile")
|
9
|
+
logger.info("Checking Puppetfile...")
|
10
|
+
output, s = Open3.capture2e("r10k puppetfile check")
|
11
|
+
ok = s.exitstatus.zero?
|
12
|
+
status &= ok
|
13
|
+
|
14
|
+
if ok
|
15
|
+
logger.info("...ok")
|
16
|
+
else
|
17
|
+
logger.error("Puppetfile validation failed: #{output}")
|
18
|
+
end
|
9
19
|
else
|
10
|
-
|
11
|
-
status = false
|
20
|
+
logger.warn("No Puppetfile found... continuing")
|
12
21
|
end
|
13
22
|
|
14
23
|
status
|
@@ -1,23 +1,61 @@
|
|
1
|
-
|
2
|
-
# it and check the result
|
1
|
+
require 'open3'
|
3
2
|
class Onceover
|
4
3
|
module CodeQuality
|
5
4
|
module Syntax
|
5
|
+
|
6
6
|
def self.puppet
|
7
7
|
status = true
|
8
|
-
|
9
|
-
|
8
|
+
|
9
|
+
#
|
10
|
+
# puppet-lint
|
11
|
+
#
|
12
|
+
|
13
|
+
logger.info("Checking syntax using puppet-syntax rake task...")
|
14
|
+
# puppet-syntax seems to assign $stdout/$stderr internally in ways that
|
15
|
+
# prevent capturing output. As a nasty hack, run it as inline ruby and
|
16
|
+
# capture the output from the process...
|
17
|
+
inline_ruby = "require 'puppet-syntax/tasks/puppet-syntax' ; Rake::Task['syntax'].invoke"
|
18
|
+
output, s = Open3.capture2e("ruby", "-e", inline_ruby)
|
19
|
+
ok = s.exitstatus.zero?
|
20
|
+
status &= ok
|
21
|
+
|
22
|
+
if ok
|
23
|
+
logger.info("...ok")
|
10
24
|
else
|
11
|
-
logger.
|
25
|
+
logger.error("puppet-syntax validation failed: #{output}")
|
12
26
|
end
|
13
27
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
28
|
+
#
|
29
|
+
# python yaml
|
30
|
+
#
|
31
|
+
|
32
|
+
# Python gives us "better" validation of YAML data then ruby, eg:
|
33
|
+
# ```yaml
|
34
|
+
# foo: bar
|
35
|
+
# baz: clive
|
36
|
+
# ```
|
37
|
+
#
|
38
|
+
# would parse only the foo key in ruby, throwing away the baz key due to
|
39
|
+
# a perceived negative indent, whereas python would tell you to fix the
|
40
|
+
# file and make it consistent. This is yaml implementation dependent but
|
41
|
+
# users would be advised to fix the file, so lets _also_ validate yaml
|
42
|
+
# files with python if available on our path...
|
43
|
+
if system("python --version", :err => File::NULL)
|
44
|
+
logger.info("Running additional python YAML validation")
|
45
|
+
script = File.join(File.dirname(File.expand_path(__FILE__)), "../../../res/validate_yaml.py")
|
46
|
+
output, s = Open3.capture2e("python #{script}")
|
47
|
+
ok = s.exitstatus.zero?
|
48
|
+
status &= ok
|
49
|
+
|
50
|
+
if ok
|
51
|
+
logger.info("...ok")
|
52
|
+
else
|
53
|
+
logger.error("Puppetfile validation failed: #{output}")
|
54
|
+
end
|
55
|
+
else
|
56
|
+
logger.warn("Please install python and add it to your path for enhanced YAML validation")
|
20
57
|
end
|
58
|
+
|
21
59
|
status
|
22
60
|
end
|
23
61
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
import sys
|
2
|
+
import os
|
3
|
+
import re
|
4
|
+
|
5
|
+
status = 0
|
6
|
+
try:
|
7
|
+
import yaml
|
8
|
+
for root, dirs, files in os.walk("."):
|
9
|
+
for f in files:
|
10
|
+
# we want yaml files that are not in hidden (.) dirs. account for / vs \ on windows/linux
|
11
|
+
target = os.path.join(root, f)
|
12
|
+
if target.endswith(".yaml") and not re.match("^\.(/|\\\)\.", target):
|
13
|
+
try:
|
14
|
+
yaml.safe_load(open(target,"r"))
|
15
|
+
except Exception as e:
|
16
|
+
status = 1
|
17
|
+
print("YAML syntax error in %s: %s" % (target, str(e)))
|
18
|
+
|
19
|
+
except ImportError as e:
|
20
|
+
print("Please install the python-yaml library: pip install pyyaml")
|
21
|
+
|
22
|
+
|
23
|
+
sys.exit(status)
|
24
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: onceover-codequality
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Declarative Systems
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-03-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -132,6 +132,7 @@ files:
|
|
132
132
|
- lib/onceover/codequality/syntax.rb
|
133
133
|
- lib/onceover/codequality/version.rb
|
134
134
|
- onceover-codequality.gemspec
|
135
|
+
- res/validate_yaml.py
|
135
136
|
homepage: https://github.com/declarativesystems/onceover-codequality
|
136
137
|
licenses:
|
137
138
|
- Apache-2.0
|