onceover 3.20.0 → 3.21.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 +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: []
|