onceover 3.20.0 → 3.21.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.devcontainer/devcontainer.json +33 -0
- data/.github/workflows/tests.yaml +5 -8
- data/.gitignore +0 -1
- data/.rubocop.yml +1 -1
- data/.vscode/extensions.json +4 -0
- data/Gemfile +9 -0
- data/README.md +1 -1
- data/factsets/Windows_Server-2008r2-64.json +184 -184
- data/factsets/Windows_Server-2012r2-64.json +165 -165
- data/factsets/windows-10-64.json +104 -104
- data/features/zzz_run.feature +8 -7
- data/lib/onceover/cli/run.rb +1 -0
- data/lib/onceover/cli/show.rb +1 -1
- data/lib/onceover/controlrepo.rb +59 -31
- data/lib/onceover/deploy.rb +6 -3
- data/lib/onceover/runner.rb +1 -0
- data/lib/onceover/testconfig.rb +4 -2
- data/onceover.gemspec +4 -2
- data/spec/fixtures/controlrepos/caching/Puppetfile +17 -17
- metadata +14 -13
data/lib/onceover/controlrepo.rb
CHANGED
@@ -232,46 +232,74 @@ class Onceover
|
|
232
232
|
|
233
233
|
output_array = []
|
234
234
|
threads = []
|
235
|
+
error_array = []
|
235
236
|
puppetfile.modules.each do |mod|
|
236
237
|
threads << Thread.new do
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
238
|
+
begin
|
239
|
+
row = []
|
240
|
+
logger.debug "Loading data for #{mod.full_name}"
|
241
|
+
row << mod.full_name
|
242
|
+
if mod.is_a?(R10K::Module::Forge)
|
243
|
+
row << mod.expected_version
|
244
|
+
row << mod.v3_module.current_release.version
|
245
|
+
|
246
|
+
# Configure a custom version format to support modern Puppet Forge versions.
|
247
|
+
# (major.minor.tiny-patchlevel-patchlevel_minor)
|
248
|
+
# e.g. 8.5.0-0-2
|
249
|
+
puppetforge_format = Versionomy.default_format.modified_copy do
|
250
|
+
field(:patchlevel_minor) do
|
251
|
+
recognize_number(:default_value_optional => true,
|
252
|
+
:delimiter_regexp => '-',
|
253
|
+
:default_delimiter => '-')
|
254
|
+
end
|
255
|
+
end
|
256
|
+
|
257
|
+
current = puppetforge_format.parse(mod.expected_version)
|
258
|
+
latest = puppetforge_format.parse(mod.v3_module.current_release.version)
|
259
|
+
row << if current.major < latest.major
|
260
|
+
"Major".red
|
261
|
+
elsif current.minor < latest.minor
|
262
|
+
"Minor".yellow
|
263
|
+
elsif current.tiny < latest.tiny
|
264
|
+
"Tiny".green
|
265
|
+
elsif current.patchlevel < latest.patchlevel
|
266
|
+
"PatchLevel".green
|
267
|
+
elsif current.patchlevel_minor < latest.patchlevel_minor
|
268
|
+
"PatchLevel_minor".green
|
269
|
+
else
|
270
|
+
"No".green
|
271
|
+
end
|
272
|
+
|
273
|
+
row << mod.v3_module.endorsement
|
274
|
+
superseded_by = mod.v3_module.superseded_by
|
275
|
+
row << (superseded_by.nil? ? '' : superseded_by[:slug])
|
276
|
+
else
|
277
|
+
row << "N/A"
|
278
|
+
row << "N/A"
|
279
|
+
row << "N/A"
|
280
|
+
row << "N/A"
|
281
|
+
row << "N/A"
|
282
|
+
end
|
283
|
+
output_array << row
|
284
|
+
rescue RuntimeError => e
|
285
|
+
error = []
|
286
|
+
error << mod.full_name
|
287
|
+
error << mod.expected_version
|
288
|
+
error << mod.v3_module.current_release.version
|
289
|
+
error << e.message
|
290
|
+
error_array << error
|
291
|
+
logger.debug "Error loading module #{mod.full_name} - #{e.inspect}"
|
292
|
+
end
|
265
293
|
end
|
266
|
-
output_array << row
|
267
294
|
end
|
268
|
-
end
|
269
295
|
|
270
296
|
threads.map(&:join)
|
271
297
|
|
272
298
|
output_array.sort_by! { |line| line[0] }
|
299
|
+
error_array.sort_by! { |line| line[0] } unless error_array.empty?
|
273
300
|
|
274
301
|
puts Terminal::Table.new(headings: ["Full Name", "Current Version", "Latest Version", "Out of Date?", "Endorsement", "Superseded by"], rows: output_array)
|
302
|
+
puts Terminal::Table.new(headings: ["Issue assessing module", "Current", "Latest", "Error"], rows: error_array) unless error_array.empty?
|
275
303
|
end
|
276
304
|
|
277
305
|
def update_puppetfile
|
@@ -575,7 +603,7 @@ class Onceover
|
|
575
603
|
else
|
576
604
|
template = File.read(File.expand_path("./#{template_name}", template_dir))
|
577
605
|
end
|
578
|
-
ERB.new(template,
|
606
|
+
ERB.new(template, trim_mode: '-').result(bind)
|
579
607
|
end
|
580
608
|
|
581
609
|
def self.init_write_file(contents, out_file)
|
data/lib/onceover/deploy.rb
CHANGED
@@ -86,9 +86,12 @@ class Onceover
|
|
86
86
|
FileUtils.copy repo.puppetfile, "#{temp_controlrepo}/Puppetfile"
|
87
87
|
puppetfile_contents = File.read("#{temp_controlrepo}/Puppetfile")
|
88
88
|
|
89
|
-
|
90
|
-
|
91
|
-
|
89
|
+
# Avoid touching thing if we don't need to
|
90
|
+
if /:control_branch/.match(puppetfile_contents)
|
91
|
+
logger.debug "replacing :control_branch mentions in the Puppetfile with #{git_branch}"
|
92
|
+
new_puppetfile_contents = puppetfile_contents.gsub(/:control_branch/, "'#{git_branch}'")
|
93
|
+
File.write("#{temp_controlrepo}/Puppetfile", new_puppetfile_contents)
|
94
|
+
end
|
92
95
|
end
|
93
96
|
|
94
97
|
# Remove all files written by the last onceover run, but not the ones
|
data/lib/onceover/runner.rb
CHANGED
@@ -85,6 +85,7 @@ class Onceover
|
|
85
85
|
# NOTE: This is the way to provide options to rspec according to:
|
86
86
|
# https://github.com/puppetlabs/puppetlabs_spec_helper/blob/master/lib/puppetlabs_spec_helper/rake_tasks.rb#L51
|
87
87
|
ENV['CI_SPEC_OPTIONS'] = ENV['CI_SPEC_OPTIONS'].to_s + @config.filter_tags.map { |tag| " --tag #{tag}" }.join unless @config.filter_tags.nil?
|
88
|
+
ENV['CI_SPEC_OPTIONS'] = ENV['CI_SPEC_OPTIONS'].to_s + ' --fail-fast' if @config.fail_fast
|
88
89
|
|
89
90
|
if @config.opts[:parallel]
|
90
91
|
logger.debug "Running #{@command_prefix}rake parallel_spec from #{@repo.tempdir}"
|
data/lib/onceover/testconfig.rb
CHANGED
@@ -27,12 +27,13 @@ class Onceover
|
|
27
27
|
attr_accessor :after_conditions
|
28
28
|
attr_accessor :skip_r10k
|
29
29
|
attr_accessor :force
|
30
|
+
attr_accessor :fail_fast
|
30
31
|
attr_accessor :strict_variables
|
31
32
|
attr_accessor :formatters
|
32
33
|
|
33
34
|
def initialize(file, opts = {})
|
34
35
|
begin
|
35
|
-
config = YAML.safe_load(File.read(file), [Symbol])
|
36
|
+
config = YAML.safe_load(File.read(file), permitted_classes: [Symbol])
|
36
37
|
rescue Errno::ENOENT
|
37
38
|
raise "Could not find #{file}"
|
38
39
|
rescue Psych::SyntaxError
|
@@ -79,6 +80,7 @@ class Onceover
|
|
79
80
|
@filter_nodes = opts[:nodes] ? [opts[:nodes].split(',')].flatten.map {|x| Onceover::Node.find(x)} : nil
|
80
81
|
@skip_r10k = opts[:skip_r10k] ? true : false
|
81
82
|
@force = opts[:force] || false
|
83
|
+
@fail_fast = opts[:fail_fast] || false
|
82
84
|
|
83
85
|
# Validate the mock_functions
|
84
86
|
if @mock_functions && @mock_functions.any? { |name, details| details.has_key? 'type' }
|
@@ -242,7 +244,7 @@ class Onceover
|
|
242
244
|
source_files.each do |source_file|
|
243
245
|
target_file = File.join(repo.tempdir, 'spec', source_file.sub(/^#{repo.spec_dir}/, ''))
|
244
246
|
if File.directory?(source_file)
|
245
|
-
FileUtils.cp_r source_file, target_file unless File.
|
247
|
+
FileUtils.cp_r source_file, target_file unless File.exist? target_file
|
246
248
|
else
|
247
249
|
FileUtils.mkdir_p File.dirname target_file
|
248
250
|
FileUtils.cp source_file, target_file
|
data/onceover.gemspec
CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = "onceover"
|
7
|
-
s.version = "3.
|
7
|
+
s.version = "3.21.0"
|
8
8
|
s.authors = ["Dylan Ratcliffe"]
|
9
9
|
s.email = ["dylan.ratcliffe@puppet.com"]
|
10
10
|
s.homepage = "https://github.com/dylanratcliffe/onceover"
|
@@ -38,6 +38,8 @@ Gem::Specification.new do |s|
|
|
38
38
|
|
39
39
|
s.add_development_dependency 'cucumber', '~> 4.1'
|
40
40
|
s.add_development_dependency 'pry', '~> 0.13.1'
|
41
|
-
|
41
|
+
# We need to depend on rubocop <= 1.12 in order to support Ruby 2.4 (Puppet
|
42
|
+
# 5). Once we drop support for Puppet 5 we can re-open this
|
43
|
+
s.add_development_dependency 'rubocop', '>= 1.6.1', '<= 1.12'
|
42
44
|
s.add_development_dependency 'rubygems-tasks', '~> 0.2.5'
|
43
45
|
end
|
@@ -1,17 +1,17 @@
|
|
1
|
-
forge "http://forge.puppetlabs.com"
|
2
|
-
#
|
3
|
-
# I want to download some modules to check if r10k feature in Onceover works correctly.
|
4
|
-
#
|
5
|
-
|
6
|
-
# Versions should be updated to be the latest at the time you start
|
7
|
-
mod "puppetlabs/stdlib", '4.11.0'
|
8
|
-
|
9
|
-
# Modules from Git
|
10
|
-
# Examples: https://github.com/puppetlabs/r10k/blob/master/doc/puppetfile.mkd#examples
|
11
|
-
mod 'apache',
|
12
|
-
:git => 'https://github.com/puppetlabs/puppetlabs-apache',
|
13
|
-
:commit => '83401079053dca11d61945bd9beef9ecf7576cbf'
|
14
|
-
|
15
|
-
#mod 'apache',
|
16
|
-
# :git => 'https://github.com/puppetlabs/puppetlabs-apache',
|
17
|
-
# :branch => 'docs_experiment'
|
1
|
+
forge "http://forge.puppetlabs.com"
|
2
|
+
#
|
3
|
+
# I want to download some modules to check if r10k feature in Onceover works correctly.
|
4
|
+
#
|
5
|
+
|
6
|
+
# Versions should be updated to be the latest at the time you start
|
7
|
+
mod "puppetlabs/stdlib", '4.11.0'
|
8
|
+
|
9
|
+
# Modules from Git
|
10
|
+
# Examples: https://github.com/puppetlabs/r10k/blob/master/doc/puppetfile.mkd#examples
|
11
|
+
mod 'apache',
|
12
|
+
:git => 'https://github.com/puppetlabs/puppetlabs-apache',
|
13
|
+
:commit => '83401079053dca11d61945bd9beef9ecf7576cbf'
|
14
|
+
|
15
|
+
#mod 'apache',
|
16
|
+
# :git => 'https://github.com/puppetlabs/puppetlabs-apache',
|
17
|
+
# :branch => 'docs_experiment'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: onceover
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.21.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dylan Ratcliffe
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-06-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: backticks
|
@@ -280,22 +280,22 @@ dependencies:
|
|
280
280
|
name: rubocop
|
281
281
|
requirement: !ruby/object:Gem::Requirement
|
282
282
|
requirements:
|
283
|
-
- - "~>"
|
284
|
-
- !ruby/object:Gem::Version
|
285
|
-
version: '1.6'
|
286
283
|
- - ">="
|
287
284
|
- !ruby/object:Gem::Version
|
288
285
|
version: 1.6.1
|
286
|
+
- - "<="
|
287
|
+
- !ruby/object:Gem::Version
|
288
|
+
version: '1.12'
|
289
289
|
type: :development
|
290
290
|
prerelease: false
|
291
291
|
version_requirements: !ruby/object:Gem::Requirement
|
292
292
|
requirements:
|
293
|
-
- - "~>"
|
294
|
-
- !ruby/object:Gem::Version
|
295
|
-
version: '1.6'
|
296
293
|
- - ">="
|
297
294
|
- !ruby/object:Gem::Version
|
298
295
|
version: 1.6.1
|
296
|
+
- - "<="
|
297
|
+
- !ruby/object:Gem::Version
|
298
|
+
version: '1.12'
|
299
299
|
- !ruby/object:Gem::Dependency
|
300
300
|
name: rubygems-tasks
|
301
301
|
requirement: !ruby/object:Gem::Requirement
|
@@ -318,11 +318,13 @@ executables:
|
|
318
318
|
extensions: []
|
319
319
|
extra_rdoc_files: []
|
320
320
|
files:
|
321
|
+
- ".devcontainer/devcontainer.json"
|
321
322
|
- ".gitattributes"
|
322
323
|
- ".github/workflows/tests.yaml"
|
323
324
|
- ".gitignore"
|
324
325
|
- ".gitmodules"
|
325
326
|
- ".rubocop.yml"
|
327
|
+
- ".vscode/extensions.json"
|
326
328
|
- Gemfile
|
327
329
|
- README.md
|
328
330
|
- Rakefile
|
@@ -485,7 +487,7 @@ homepage: https://github.com/dylanratcliffe/onceover
|
|
485
487
|
licenses:
|
486
488
|
- Apache-2.0
|
487
489
|
metadata: {}
|
488
|
-
post_install_message:
|
490
|
+
post_install_message:
|
489
491
|
rdoc_options: []
|
490
492
|
require_paths:
|
491
493
|
- lib
|
@@ -500,9 +502,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
500
502
|
- !ruby/object:Gem::Version
|
501
503
|
version: '0'
|
502
504
|
requirements: []
|
503
|
-
|
504
|
-
|
505
|
-
signing_key:
|
505
|
+
rubygems_version: 3.4.10
|
506
|
+
signing_key:
|
506
507
|
specification_version: 4
|
507
508
|
summary: Testing tools for Puppet controlrepos
|
508
509
|
test_files: []
|