puppet-syntax 3.0.1 → 3.1.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: db77920a61d0b8ea3ccbc521c7dad372f382fe897f7cabb6532acb7a154ae49a
4
- data.tar.gz: c61d81fc4bb5eb0a655c951c849d0124e3123253ca2fa5de2ecabbe1b524f9e7
3
+ metadata.gz: 5d56b393f1a0a60742b7c0600dd39568eb232cee2bae2400b169fee499cb12a6
4
+ data.tar.gz: 3b641f2e4ad9f5ab9fa8f91853bfc557b6573e871caeae2228b17f2446d96270
5
5
  SHA512:
6
- metadata.gz: d51df8b8a2975e90d44fa9fad4892609b331a95bd459e226af0a7d80589458e059e06149da6412aae6d32de0e0ab058a0517e552be3ab9edf07670c712c3bba7
7
- data.tar.gz: 8aa88875e46d83c30eac88b28219f1daef4e905782c6997cb0fe8973c84bbbaec6d891d171ecd66930e1e6ab4a9e7154db63a87f4eef99317f000e7ffcf3667c
6
+ metadata.gz: e4cf5aff0b7abe2e3dc4f07f6a3fec2704c637c063f076e08d9c4812f8fdb8b68fc4d65277982d12008914dca799cf45e8bf6ec5120827b3485abc569755b6c3
7
+ data.tar.gz: 63e40dd6206c72b2dfddbc85dd0efff6c4fffcd748277e15cacf1aaa54c79a1d62b67da751842ee190856b01e333c391197e22393372d54851306b67639b12bf
@@ -1,4 +1,5 @@
1
1
  ---
2
+ os: linux
2
3
  dist: bionic
3
4
  language: ruby
4
5
  # Workaround https://github.com/bundler/bundler/issues/3558
@@ -9,14 +10,16 @@ rvm:
9
10
  - 2.4.4
10
11
  - 2.5.1
11
12
  - 2.6.5
13
+ - 2.7
12
14
  env:
13
15
  - PUPPET_VERSION="~> 5.5.10"
14
- - PUPPET_VERSION="~> 6.1.0"
15
- - PUPPET_VERSION="~> 6.2.0"
16
- - PUPPET_VERSION="~> 6.5.0"
16
+ - PUPPET_VERSION="~> 6.5"
17
17
  - PUPPET_VERSION=">= 0"
18
18
  - PUPPET_VERSION="git://github.com/puppetlabs/puppet.git#master"
19
- matrix:
19
+ jobs:
20
+ exclude:
21
+ - rvm: 2.7
22
+ env: PUPPET_VERSION="~> 5.5.10"
20
23
  allow_failures:
21
24
  - env: PUPPET_VERSION=">= 0"
22
25
  - env: PUPPET_VERSION="git://github.com/puppetlabs/puppet.git#master"
@@ -2,6 +2,18 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## [v3.1.0](https://github.com/voxpupuli/puppet-syntax/tree/v3.1.0) (2020-06-24)
6
+
7
+ [Full Changelog](https://github.com/voxpupuli/puppet-syntax/compare/v3.0.1...v3.1.0)
8
+
9
+ **Implemented enhancements:**
10
+
11
+ - print actual template errors on $stderr [\#125](https://github.com/voxpupuli/puppet-syntax/pull/125) ([foxxx0](https://github.com/foxxx0))
12
+
13
+ **Merged pull requests:**
14
+
15
+ - Add ruby2.7 testing, replacing multiple obsolete puppet6 versions [\#124](https://github.com/voxpupuli/puppet-syntax/pull/124) ([DavidS](https://github.com/DavidS))
16
+
5
17
  ## [v3.0.1](https://github.com/voxpupuli/puppet-syntax/tree/v3.0.1) (2020-05-27)
6
18
 
7
19
  [Full Changelog](https://github.com/voxpupuli/puppet-syntax/compare/v3.0.0...v3.0.1)
@@ -48,9 +48,16 @@ module PuppetSyntax
48
48
  $stderr.puts "---> #{t.name}"
49
49
 
50
50
  c = PuppetSyntax::Templates.new
51
- errors = c.check(filelist_templates)
52
- $stdout.puts "#{errors.join("\n")}\n" unless errors.empty?
53
- exit 1 unless errors.empty?
51
+ result = c.check(filelist_templates)
52
+ unless result[:warnings].empty?
53
+ $stdout.puts "WARNINGS:"
54
+ $stdout.puts result[:warnings].join("\n")
55
+ end
56
+ unless result[:errors].empty?
57
+ $stderr.puts "ERRORS:"
58
+ $stderr.puts result[:errors].join("\n")
59
+ exit 1
60
+ end
54
61
  end
55
62
 
56
63
  desc 'Syntax check Hiera config files'
@@ -9,38 +9,64 @@ module PuppetSyntax
9
9
 
10
10
  # We now have to redirect STDERR in order to capture warnings.
11
11
  $stderr = warnings = StringIO.new()
12
- errors = []
12
+ result = { warnings: [], errors: [] }
13
13
 
14
14
  filelist.each do |file|
15
15
  if File.extname(file) == '.epp' or PuppetSyntax.epp_only
16
- errors.concat validate_epp(file)
16
+ tmp = validate_epp(file)
17
17
  elsif File.extname(file) == '.erb'
18
- errors.concat validate_erb(file)
18
+ tmp = validate_erb(file)
19
19
  end
20
+ result.merge!(tmp) { |k, a, b| a.concat(b) } unless tmp.nil?
20
21
  end
21
22
 
22
23
  $stderr = STDERR
23
- errors << warnings.string unless warnings.string.empty?
24
- errors.map! { |e| e.to_s }
24
+ result[:warnings] << warnings.string unless warnings.string.empty?
25
25
 
26
- errors
26
+ result[:errors].map! { |e| e.to_s }
27
+ result[:warnings].map! { |w| w.to_s }
28
+
29
+ result
27
30
  end
28
31
 
29
32
  def validate_epp(filename)
30
33
  require 'puppet/pops'
31
- errors = []
34
+ result = { warnings: [], errors: [] }
35
+ formatter = Puppet::Pops::Validation::DiagnosticFormatterPuppetStyle.new
36
+ evaluating_parser = Puppet::Pops::Parser::EvaluatingParser::EvaluatingEppParser.new()
37
+ parser = evaluating_parser.parser()
32
38
  begin
33
- parser = Puppet::Pops::Parser::EvaluatingParser::EvaluatingEppParser.new()
34
- parser.parse_file(filename)
35
- rescue => detail
36
- errors << detail
39
+ parse_result = parser.parse_file(filename)
40
+ validation_result = evaluating_parser.validate(parse_result.model)
41
+
42
+ # print out any warnings
43
+ validation_result.warnings.each do |warn|
44
+ message = formatter.format_message(warn)
45
+ file = warn.file
46
+ line = warn.source_pos.line
47
+ column = warn.source_pos.pos
48
+ result[:warnings] << "#{file}:#{line}:#{column}: #{message}"
49
+ end
50
+
51
+ # collect errors and return them in order to indicate validation failure
52
+ validation_result.errors.each do |err|
53
+ message = formatter.format_message(err)
54
+ file = err.file
55
+ line = err.source_pos.line
56
+ column = err.source_pos.pos
57
+ result[:errors] << "#{file}:#{line}:#{column}: #{message}"
58
+ end
59
+ rescue Puppet::ParseError, SyntaxError => exc
60
+ result[:errors] << exc
61
+ rescue => exc
62
+ result[:errors] << exc
37
63
  end
38
64
 
39
- errors
65
+ result
40
66
  end
41
67
 
42
68
  def validate_erb(filename)
43
- errors = []
69
+ result = { warnings: [], errors: [] }
44
70
 
45
71
  begin
46
72
  erb = ERB.new(File.read(filename), nil, '-')
@@ -53,10 +79,10 @@ module PuppetSyntax
53
79
  # This is normal because we don't have the variables that would
54
80
  # ordinarily be bound by the parent Puppet manifest.
55
81
  rescue SyntaxError => error
56
- errors << error
82
+ result[:errors] << error
57
83
  end
58
84
 
59
- errors
85
+ result
60
86
  end
61
87
  end
62
88
  end
@@ -1,3 +1,3 @@
1
1
  module PuppetSyntax
2
- VERSION = '3.0.1'
2
+ VERSION = '3.1.0'
3
3
  end
@@ -18,91 +18,99 @@ describe PuppetSyntax::Templates do
18
18
  files = fixture_templates('pass.erb')
19
19
  res = subject.check(files)
20
20
 
21
- expect(res).to match([])
21
+ expect(res[:warnings]).to match([])
22
+ expect(res[:errors]).to match([])
22
23
  end
23
24
 
24
25
  it 'should ignore NameErrors from unbound variables' do
25
26
  files = fixture_templates('pass_unbound_var.erb')
26
27
  res = subject.check(files)
27
28
 
28
- expect(res).to match([])
29
+ expect(res[:warnings]).to match([])
30
+ expect(res[:errors]).to match([])
29
31
  end
30
32
 
31
33
  it 'should catch SyntaxError' do
32
34
  files = fixture_templates('fail_error.erb')
33
35
  res = subject.check(files)
34
36
 
35
- expect(res.size).to eq(1)
36
- expect(res[0]).to match(/2: syntax error, unexpected/)
37
+ expect(res[:errors].size).to eq(1)
38
+ expect(res[:errors][0]).to match(/2: syntax error, unexpected/)
37
39
  end
38
40
 
39
41
  it 'should catch Ruby warnings' do
40
42
  files = fixture_templates('fail_warning.erb')
41
43
  res = subject.check(files)
42
44
 
43
- expect(res.size).to eq(1)
44
- expect(res[0]).to match(conditional_warning_regex)
45
+ expect(res[:warnings].size).to eq(1)
46
+ expect(res[:warnings][0]).to match(conditional_warning_regex)
45
47
  end
46
48
 
47
49
  it 'should read more than one valid file' do
48
50
  files = fixture_templates(['pass.erb', 'pass_unbound_var.erb'])
49
51
  res = subject.check(files)
50
52
 
51
- expect(res).to match([])
53
+ expect(res[:warnings]).to match([])
54
+ expect(res[:errors]).to match([])
52
55
  end
53
56
 
54
57
  it 'should continue after finding an error in the first file' do
55
58
  files = fixture_templates(['fail_error.erb', 'fail_warning.erb'])
56
59
  res = subject.check(files)
57
60
 
58
- expect(res.size).to eq(2)
59
- expect(res[0]).to match(/2: syntax error, unexpected/)
60
- expect(res[1]).to match(conditional_warning_regex)
61
+ expect(res[:warnings].size).to eq(1)
62
+ expect(res[:errors].size).to eq(1)
63
+ expect(res[:errors][0]).to match(/2: syntax error, unexpected/)
64
+ expect(res[:warnings][0]).to match(conditional_warning_regex)
61
65
  end
62
66
 
63
67
  it 'should ignore a TypeError' do
64
68
  files = fixture_templates('typeerror_shouldwin.erb')
65
69
  res = subject.check(files)
66
70
 
67
- expect(res).to match([])
71
+ expect(res[:warnings]).to match([])
72
+ expect(res[:errors]).to match([])
68
73
  end
69
74
 
70
75
  it 'should ignore files without .erb extension' do
71
76
  files = fixture_templates('ignore.tpl')
72
77
  res = subject.check(files)
73
78
 
74
- expect(res).to match([])
79
+ expect(res[:warnings]).to match([])
80
+ expect(res[:errors]).to match([])
75
81
  end
76
82
 
77
83
  it 'should return nothing from a valid file' do
78
84
  files = fixture_templates('pass.epp')
79
85
  res = subject.check(files)
80
86
 
81
- expect(res).to match([])
87
+ expect(res[:warnings]).to match([])
88
+ expect(res[:errors]).to match([])
82
89
  end
83
90
 
84
91
  it 'should catch SyntaxError' do
85
92
  files = fixture_templates('fail_error.epp')
86
93
  res = subject.check(files)
87
94
 
88
- expect(res.size).to eq(1)
89
- expect(res[0]).to match(/This Type-Name has no effect/)
95
+ expect(res[:errors].size).to eq(1)
96
+ expect(res[:errors][0]).to match(/This Type-Name has no effect/)
90
97
  end
91
98
 
92
99
  it 'should read more than one valid file' do
93
100
  files = fixture_templates(['pass.epp', 'pass_also.epp'])
94
101
  res = subject.check(files)
95
102
 
96
- expect(res).to match([])
103
+ expect(res[:warnings]).to match([])
104
+ expect(res[:errors]).to match([])
97
105
  end
98
106
 
99
107
  it 'should continue after finding an error in the first file' do
100
108
  files = fixture_templates(['fail_error.epp', 'fail_error_also.epp'])
101
109
  res = subject.check(files)
102
110
 
103
- expect(res.size).to eq(2)
104
- expect(res[0]).to match(/This Type-Name has no effect/)
105
- expect(res[1]).to match(/Syntax error at '}' \(file: \S*\/fail_error_also.epp, line: 2, column: 4\)/)
111
+ expect(res[:errors].size).to eq(2)
112
+ expect(res[:errors][0]).to match(/This Type-Name has no effect/)
113
+ expect(res[:errors][1]).to match(/Syntax error at '}' \(file: \S*\/fail_error_also.epp, line: 2, column: 4\)/)
106
114
  end
107
115
 
108
116
  context "when the 'epp_only' options is set" do
@@ -114,7 +122,7 @@ describe PuppetSyntax::Templates do
114
122
  files = fixture_templates('pass.erb')
115
123
  res = subject.check(files)
116
124
 
117
- expect(res.size).to eq(1)
125
+ expect(res[:errors].size).to eq(1)
118
126
  end
119
127
  end
120
128
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppet-syntax
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.1
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vox Pupuli
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-27 00:00:00.000000000 Z
11
+ date: 2020-06-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake