ra10ke 1.2.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c18588b9b0b4eb792bfcc75c573a7d8107840baf321c20ca4d0ba26aabc03912
4
- data.tar.gz: 1503a4fa9911f99ac01e12aebd8cbc7f8e3402aa385c411f0861fe082bcaacfd
3
+ metadata.gz: 42a64a748cf4b63602804c2aac20987e23d8a7ad2a01ca3365d3ed998324f058
4
+ data.tar.gz: daa94b8601294ed8c480f431d396eda60c2a14d2c7aa608e4941189033c01b24
5
5
  SHA512:
6
- metadata.gz: '078235ff75fc9d159333ef7e2eff5424e01e801e91480778fe035cd9aaba19a4073c0f0b48a2792f08afab4d1e9ac597a8ad4262b3afa220749862bdfb5e11ca'
7
- data.tar.gz: 3820689a48c0df80436ab56c3b0e27093f5951753ac6997fbfbb27cbccb3c13d2f8151ac01d65f1b8732aebe0b24b002be8fcc6caf5677b089ebdeb94b83f2d5
6
+ metadata.gz: b1b0a572ecb7928f0e38254f6ed91f4e501f2755497a53ced15a164ada79dfa2b335afe7f4565c27ae63050a17d57c8df45dd39dd5fbac0271361f00c8063c5a
7
+ data.tar.gz: 251245599d77dbbd4b01c3946693083782fe8b1f0937236fc207ca3c69616b967743cafa0bb8e4151407199fd8d4e0be0479da8e7f83009bb22f0fe9192785e1
@@ -2,7 +2,6 @@ name: Test
2
2
 
3
3
  on:
4
4
  - pull_request
5
- - push
6
5
 
7
6
  env:
8
7
  BUNDLE_WITHOUT: release
@@ -14,11 +13,9 @@ jobs:
14
13
  fail-fast: false
15
14
  matrix:
16
15
  include:
17
- - ruby: "2.4"
18
- - ruby: "2.5"
19
- - ruby: "2.6"
20
16
  - ruby: "2.7"
21
17
  - ruby: "3.0"
18
+ - ruby: "3.1"
22
19
  coverage: "yes"
23
20
  env:
24
21
  COVERAGE: ${{ matrix.coverage }}
data/CHANGELOG.md CHANGED
@@ -2,6 +2,31 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## [v2.0.0](https://github.com/voxpupuli/ra10ke/tree/v2.0.0) (2022-05-18)
6
+
7
+ [Full Changelog](https://github.com/voxpupuli/ra10ke/compare/v1.2.0...v2.0.0)
8
+
9
+ **Breaking changes:**
10
+
11
+ - Bump minimal Ruby Version 2.4.0-\>2.7.0 [\#77](https://github.com/voxpupuli/ra10ke/pull/77) ([bastelfreak](https://github.com/bastelfreak))
12
+ - Dependencies Table output [\#72](https://github.com/voxpupuli/ra10ke/pull/72) ([logicminds](https://github.com/logicminds))
13
+
14
+ **Implemented enhancements:**
15
+
16
+ - Add Ruby 3.1 support [\#78](https://github.com/voxpupuli/ra10ke/pull/78) ([bastelfreak](https://github.com/bastelfreak))
17
+ - Converts puppet forge module entries into puppetfile git entries [\#76](https://github.com/voxpupuli/ra10ke/pull/76) ([logicminds](https://github.com/logicminds))
18
+
19
+ **Fixed bugs:**
20
+
21
+ - incompatible with r10k gem \> 3.8 [\#57](https://github.com/voxpupuli/ra10ke/issues/57)
22
+ - CI: Do not run twice [\#79](https://github.com/voxpupuli/ra10ke/pull/79) ([bastelfreak](https://github.com/bastelfreak))
23
+ - Fix \#74 - server responded with 400 [\#75](https://github.com/voxpupuli/ra10ke/pull/75) ([logicminds](https://github.com/logicminds))
24
+ - Fix \#70 - cache dir does not exist [\#71](https://github.com/voxpupuli/ra10ke/pull/71) ([logicminds](https://github.com/logicminds))
25
+
26
+ **Closed issues:**
27
+
28
+ - cache dir does not exist [\#70](https://github.com/voxpupuli/ra10ke/issues/70)
29
+
5
30
  ## [v1.2.0](https://github.com/voxpupuli/ra10ke/tree/v1.2.0) (2022-04-21)
6
31
 
7
32
  [Full Changelog](https://github.com/voxpupuli/ra10ke/compare/v1.1.0...v1.2.0)
data/README.md CHANGED
@@ -68,6 +68,15 @@ Ignoring specific modules:
68
68
  Under specific conditions you may not wish to report on specific modules being out of date,
69
69
  to ignore a module create `.r10kignore` file in the same directory as your Puppetfile.
70
70
 
71
+ ### r10k::print_git_conversion
72
+ This rake task will go through the puppetfile and convert forge based modules into git based modules using
73
+ the modules't source repository and version tag.
74
+
75
+ This feature is useful when you want to bring all the forge modules into git source control. This assumes every module
76
+ tags the release or provides a valid repo url. We recommend to manually review
77
+ the output provided by this task before replacing the forge based content in your puppetfile as not every module author
78
+ tagged a release or provided a working url.
79
+
71
80
  ### r10k:solve_dependencies
72
81
 
73
82
  Reads the Puppetfile in the current directory and uses the ruby 'solve' library to find
@@ -1,37 +1,147 @@
1
+ require 'semverse'
2
+ require 'r10k/puppetfile'
3
+ require 'puppet_forge'
4
+ require 'table_print'
5
+ require 'git'
6
+
1
7
  module Ra10ke::Dependencies
2
- @@version_formats = {}
8
+ class Verification
3
9
 
4
- # Registers a block that finds the latest version.
5
- # The block will be called with a list of tags.
6
- # If the block returns nil the next format will be tried.
7
- def self.register_version_format(name, &block)
8
- @@version_formats[name] = block
9
- end
10
+ def self.version_formats
11
+ @version_formats ||= {}
12
+ end
13
+
14
+ # Registers a block that finds the latest version.
15
+ # The block will be called with a list of tags.
16
+ # If the block returns nil the next format will be tried.
17
+ def self.register_version_format(name, &block)
18
+ version_formats[name] = block
19
+ end
20
+
21
+ Ra10ke::Dependencies::Verification.register_version_format(:semver) do |tags|
22
+ latest_tag = tags.map do |tag|
23
+ begin
24
+ Semverse::Version.new tag[/\Av?(.*)\Z/, 1]
25
+ rescue Semverse::InvalidVersionFormat
26
+ # ignore tags that do not comply to semver
27
+ nil
28
+ end
29
+ end.select { |tag| !tag.nil? }.sort.last.to_s.downcase
30
+ latest_ref = tags.detect { |tag| tag[/\Av?(.*)\Z/, 1] == latest_tag }
31
+ end
32
+ attr_reader :puppetfile
33
+
34
+ def initialize(pfile)
35
+ @puppetfile = pfile
36
+ # semver is the default version format.
37
+
38
+ puppetfile.load!
39
+ end
40
+
41
+ def get_latest_ref(remote_refs)
42
+ tags = remote_refs['tags'].keys
43
+ latest_ref = nil
44
+ self.class.version_formats.detect { |_, block| latest_ref = block.call(tags) }
45
+ latest_ref = 'undef (tags do not follow any known pattern)' if latest_ref.nil?
46
+ latest_ref
47
+ end
48
+
49
+ def ignored_modules
50
+ # ignore file allows for "don't tell me about this"
51
+ @ignored_modules ||= begin
52
+ File.readlines('.r10kignore').each {|l| l.chomp!} if File.exist?('.r10kignore')
53
+ end || []
54
+ end
55
+
56
+ # @summary creates an array of module hashes with version info
57
+ # @param {Object} supplied_puppetfile - the parsed puppetfile object
58
+ # @returns {Array} array of version info for each module
59
+ # @note does not include ignored modules or modules up2date
60
+ def processed_modules(supplied_puppetfile = puppetfile)
61
+ threads = []
62
+ threads = supplied_puppetfile.modules.map do |puppet_module|
63
+ Thread.new do
64
+ begin
65
+ next if ignored_modules.include? puppet_module.title
66
+ if puppet_module.class == ::R10K::Module::Forge
67
+ module_name = puppet_module.title.gsub('/', '-')
68
+ forge_version = ::PuppetForge::Module.find(module_name).current_release.version
69
+ installed_version = puppet_module.expected_version
70
+ {
71
+ name: puppet_module.title,
72
+ installed: installed_version,
73
+ latest: forge_version,
74
+ type: 'forge',
75
+ message: installed_version != forge_version ? :outdated : :current
76
+ }
77
+
78
+ elsif puppet_module.class == R10K::Module::Git
79
+ # use helper; avoid `desired_ref`
80
+ # we do not want to deal with `:control_branch`
81
+ ref = puppet_module.version
82
+ next unless ref
83
+
84
+ remote = puppet_module.instance_variable_get(:@remote)
85
+ remote_refs = Git.ls_remote(remote)
86
+
87
+ # skip if ref is a branch
88
+ next if remote_refs['branches'].key?(ref)
89
+
90
+ if remote_refs['tags'].key?(ref)
91
+ # there are too many possible versioning conventions
92
+ # we have to be be opinionated here
93
+ # so semantic versioning (vX.Y.Z) it is for us
94
+ # as well as support for skipping the leading v letter
95
+ #
96
+ # register own version formats with
97
+ # Ra10ke::Dependencies.register_version_format(:name, &block)
98
+ latest_ref = get_latest_ref(remote_refs)
99
+ elsif ref.match(/^[a-z0-9]{40}$/)
100
+ ref = ref.slice(0,8)
101
+ # for sha just assume head should be tracked
102
+ latest_ref = remote_refs['head'][:sha].slice(0,8)
103
+ else
104
+ raise "Unable to determine ref type for #{puppet_module.title}"
105
+ end
106
+ {
107
+ name: puppet_module.title,
108
+ installed: ref,
109
+ latest: latest_ref,
110
+ type: 'git',
111
+ message: ref != latest_ref ? :outdated : :current
112
+ }
113
+
114
+ end
115
+ rescue R10K::Util::Subprocess::SubprocessError => e
116
+ {
117
+ name: puppet_module.title,
118
+ installed: nil,
119
+ latest: nil,
120
+ type: :error,
121
+ message: e.message
122
+ }
123
+ end
124
+ end
125
+ end
126
+ threads.map { |th| th.join.value }.compact
127
+ end
10
128
 
11
- # semver is the default version format.
12
- register_version_format(:semver) do |tags|
13
- latest_tag = tags.map do |tag|
14
- begin
15
- Semverse::Version.new tag[/\Av?(.*)\Z/, 1]
16
- rescue Semverse::InvalidVersionFormat
17
- # ignore tags that do not comply to semver
18
- nil
129
+ def outdated(supplied_puppetfile = puppetfile)
130
+ processed_modules.find_all do | mod |
131
+ mod[:message] == :outdated
19
132
  end
20
- end.select { |tag| !tag.nil? }.sort.last.to_s.downcase
21
- latest_ref = tags.detect { |tag| tag[/\Av?(.*)\Z/, 1] == latest_tag }
22
- end
133
+ end
23
134
 
24
- def get_latest_ref(remote_refs)
25
- tags = remote_refs['tags'].keys
26
- latest_ref = nil
27
- @@version_formats.detect { |_, block| latest_ref = block.call(tags) }
28
- latest_ref = 'undef (tags do not follow any known pattern)' if latest_ref.nil?
29
- latest_ref
135
+ def print_table(mods)
136
+ puts
137
+ tp mods, { name: { width: 50 } }, :installed, :latest, :type, :message
138
+ end
30
139
  end
31
140
 
32
- def define_task_dependencies(*_args)
33
- desc "Print outdated forge modules"
34
- task :dependencies do
141
+ def define_task_print_git_conversion(*_args)
142
+ desc "Convert and print forge modules to git format"
143
+ task :print_git_conversion do
144
+ require 'ra10ke/git_repo'
35
145
  require 'r10k/puppetfile'
36
146
  require 'puppet_forge'
37
147
 
@@ -45,49 +155,40 @@ module Ra10ke::Dependencies
45
155
  if File.exist?('.r10kignore')
46
156
  ignore_modules = File.readlines('.r10kignore').each {|l| l.chomp!}
47
157
  end
48
-
49
- puppetfile.modules.each do |puppet_module|
50
- next if ignore_modules.include? puppet_module.title
51
- if puppet_module.class == R10K::Module::Forge
52
- module_name = puppet_module.title.gsub('/', '-')
53
- forge_version = PuppetForge::Module.find(module_name).current_release.version
54
- installed_version = puppet_module.expected_version
55
- if installed_version != forge_version
56
- puts "#{puppet_module.title} is OUTDATED: #{installed_version} vs #{forge_version}"
57
- end
58
- end
59
-
60
- if puppet_module.class == R10K::Module::Git
61
- # use helper; avoid `desired_ref`
62
- # we do not want to deal with `:control_branch`
63
- ref = puppet_module.version
64
- next unless ref
65
-
66
- remote = puppet_module.instance_variable_get(:@remote)
67
- remote_refs = Git.ls_remote(remote)
68
-
69
- # skip if ref is a branch
70
- next if remote_refs['branches'].key?(ref)
71
-
72
- if remote_refs['tags'].key?(ref)
73
- # there are too many possible versioning conventions
74
- # we have to be be opinionated here
75
- # so semantic versioning (vX.Y.Z) it is for us
76
- # as well as support for skipping the leading v letter
77
- #
78
- # register own version formats with
79
- # Ra10ke::Dependencies.register_version_format(:name, &block)
80
- latest_ref = get_latest_ref(remote_refs)
81
- elsif ref.match(/^[a-z0-9]{40}$/)
82
- # for sha just assume head should be tracked
83
- latest_ref = remote_refs['head'][:sha]
84
- else
85
- raise "Unable to determine ref type for #{puppet_module.title}"
158
+ forge_mods = puppetfile.modules.find_all { |mod| mod.instance_of?(R10K::Module::Forge) && mod.v3_module.homepage_url? }
159
+
160
+ threads = forge_mods.map do |mod|
161
+ Thread.new do
162
+ source_url = mod.v3_module.attributes.dig(:current_release, :metadata, :source) || mod.v3_module.homepage_url
163
+ # git:// does not work with ls-remote command, convert to https
164
+ source_url = source_url.gsub('git://', 'https://')
165
+ source_url = source_url.gsub(/\Agit\@(.*)\:(.*)/) do
166
+ "https://#{$1}/#{$2}"
86
167
  end
168
+ repo = ::Ra10ke::GitRepo.new(source_url)
169
+ ref = repo.get_ref_like(mod.expected_version)
170
+ ref_name = ref ? ref[:name] : "bad url or tag #{mod.expected_version} is missing"
171
+ <<~EOF
172
+ mod '#{mod.name}',
173
+ :git => '#{source_url}',
174
+ :ref => '#{ref_name}'
87
175
 
88
- puts "#{puppet_module.title} is OUTDATED: #{ref} vs #{latest_ref}" if ref != latest_ref
176
+ EOF
89
177
  end
90
178
  end
179
+ output = threads.map { |th| th.join.value }
180
+ puts output
181
+ end
182
+ end
183
+
184
+ def define_task_dependencies(*_args)
185
+ desc "Print outdated forge modules"
186
+ task :dependencies do
187
+ PuppetForge.user_agent = "ra10ke/#{Ra10ke::VERSION}"
188
+ puppetfile = get_puppetfile
189
+ PuppetForge.host = puppetfile.forge if puppetfile.forge =~ /^http/
190
+ dependencies = Ra10ke::Dependencies::Verification.new(puppetfile)
191
+ dependencies.print_table(dependencies.outdated)
91
192
  end
92
193
  end
93
194
  end
@@ -85,8 +85,8 @@ module Ra10ke
85
85
  @all_refs ||= begin
86
86
  remote_refs.each_with_object([]) do |line, refs|
87
87
  sha, ref = line.split("\t")
88
+ next refs if line.include?('redirecting')
88
89
  next refs if sha.eql?('ref: refs/heads/master')
89
-
90
90
  _, type, name, subtype = ref.chomp.split('/')
91
91
  next refs unless name
92
92
 
@@ -99,6 +99,18 @@ module Ra10ke
99
99
  end
100
100
  end
101
101
 
102
+ # @summary searches all the refs for a ref similar to the name provided
103
+ # This is useful when looking for tags if a v or not a v
104
+ # @param ref_name [String]
105
+ # @return [String] the matching ref_name or nil
106
+ def get_ref_like(ref_name)
107
+ return nil unless valid_url?
108
+ ref = all_refs.find do |ref|
109
+ ref[:name].include?(ref_name)
110
+ end
111
+ ref
112
+ end
113
+
102
114
  # useful for mocking easily
103
115
  # @param cmd [String]
104
116
  # @param silent [Boolean] set to true if you wish to send output to /dev/null, false by default
@@ -27,11 +27,11 @@ module Ra10ke
27
27
  def modules(puppetfile)
28
28
  @modules ||= begin
29
29
  return [] unless File.exist?(puppetfile)
30
-
31
30
  all_lines = File.read(puppetfile).lines.map(&:strip_comment)
32
31
  # remove comments from all the lines
33
- lines_without_comments = all_lines.reject { |line| line.match(/#.*\n/) }.join("\n")
32
+ lines_without_comments = all_lines.reject { |line| line.match(/#.*\n/) || line.empty? }.join("\n")
34
33
  lines_without_comments.split(/^mod/).map do |line|
34
+
35
35
  next nil if line =~ /^forge/
36
36
  next nil if line.empty?
37
37
 
data/lib/ra10ke/solve.rb CHANGED
@@ -6,6 +6,7 @@ require 'set'
6
6
  require 'solve'
7
7
  require 'yaml/store'
8
8
  require 'semverse/version'
9
+ require 'fileutils'
9
10
 
10
11
  # How many versions to fetch from the Forge, at most
11
12
  FETCH_LIMIT = 3
@@ -35,6 +36,9 @@ module Ra10ke::Solve
35
36
  end
36
37
  # Actual new logic begins here:
37
38
  cache = (ENV['XDG_CACHE_DIR'] || File.expand_path('~/.cache'))
39
+
40
+ FileUtils.mkdir_p(cache)
41
+
38
42
  # Metadata cache, since the Forge is slow:
39
43
  @metadata_cache = YAML::Store.new File.join(cache, 'ra10ke.metadata_cache')
40
44
  # The graph of available module versions
@@ -1,3 +1,3 @@
1
1
  module Ra10ke
2
- VERSION = "1.2.0"
2
+ VERSION = "2.0.0"
3
3
  end
data/lib/ra10ke.rb CHANGED
@@ -41,6 +41,7 @@ module Ra10ke
41
41
  define_task_duplicates(*args)
42
42
  define_task_install(*args)
43
43
  define_task_validate(*args)
44
+ define_task_print_git_conversion(*args)
44
45
  end
45
46
  end
46
47
 
data/ra10ke.gemspec CHANGED
@@ -14,11 +14,11 @@ Gem::Specification.new do |spec|
14
14
 
15
15
  spec.files = `git ls-files`.split($/)
16
16
  spec.require_paths = ["lib"]
17
- spec.required_ruby_version = '>= 2.4.0'
17
+ spec.required_ruby_version = '>= 2.6.0'
18
18
 
19
19
  spec.add_dependency "rake"
20
20
  spec.add_dependency "puppet_forge"
21
- spec.add_dependency "r10k"
21
+ spec.add_dependency "r10k", '>= 2.6.5'
22
22
  spec.add_dependency "git"
23
23
  spec.add_dependency "solve"
24
24
  spec.add_dependency 'semverse', '>= 2.0'
@@ -0,0 +1,78 @@
1
+ # used in profiles
2
+ mod 'puppet/systemd', :latest
3
+ mod 'puppet/lldpd', :latest
4
+ mod 'puppet/ferm', :latest
5
+ mod 'puppet/borg', :latest
6
+ mod 'puppet/wireguard', :latest
7
+ mod 'puppet/bird', :latest
8
+ mod 'herculesteam/augeasproviders_pam', :latest
9
+ mod 'herculesteam/augeasproviders_shellvar', :latest
10
+ mod 'puppetlabs/vcsrepo', :latest
11
+ mod 'saz/ssh', :latest
12
+ mod 'puppet/r10k', :latest
13
+ mod 'puppet/dbbackup', :latest
14
+ mod 'puppet/mosquitto', :latest
15
+ mod 'puppet/grafana', :latest
16
+ mod 'puppet/nginx', :latest
17
+ mod 'puppet/ssh_keygen', :latest
18
+ mod 'puppet/unbound', :latest
19
+ mod 'puppetlabs/inifile', :latest
20
+ mod 'puppet/prometheus', :latest
21
+ mod 'theforeman/foreman', :latest
22
+ mod 'theforeman/puppet', :latest
23
+ mod 'theforeman/foreman_proxy', :latest
24
+ mod 'puppet/nftables', :latest
25
+ mod 'herculesteam/augeasproviders_sysctl', :latest
26
+ mod 'camptocamp/catalog_diff', :latest
27
+ mod 'puppet/unattended_upgrades', :latest
28
+ mod 'puppet/selinux', :latest
29
+ mod 'choria/choria', :latest
30
+ mod 'puppet/archive', :latest
31
+ mod 'puppet/elasticsearch', :latest
32
+ mod 'jsok/vault',
33
+ git: 'https://github.com/bastelfreak/puppet-vault',
34
+ ref: 'test'
35
+
36
+ # dependencies
37
+ mod 'herculesteam/augeasproviders_core', :latest
38
+ mod 'puppetlabs/stdlib', :latest
39
+ mod 'choria/mcollective', :latest
40
+ mod 'puppetlabs/concat', :latest
41
+ mod 'puppetlabs/apt', :latest
42
+ mod 'puppetlabs/apache', :latest
43
+ mod 'puppetlabs/postgresql', :latest
44
+ mod 'puppet/extlib', :latest
45
+ mod 'puppet/redis', :latest
46
+ mod 'puppet/epel', :latest
47
+ mod 'theforeman/puppetserver_foreman', :latest
48
+ mod 'richardc/datacat', :latest
49
+ mod 'theforeman/dns', :latest
50
+ mod 'theforeman/dhcp', :latest
51
+ mod 'theforeman/tftp', :latest
52
+ mod 'puppetlabs/xinetd', :latest
53
+ mod 'choria-mcollective_choria', :latest
54
+ mod 'choria/mcollective_agent_puppet', :latest
55
+ mod 'choria/mcollective_agent_package', :latest
56
+ mod 'choria/mcollective_agent_service', :latest
57
+ mod 'choria/mcollective_agent_filemgr', :latest
58
+ mod 'choria/mcollective_agent_shell', :latest
59
+ mod 'choria/mcollective_agent_nettest', :latest
60
+ mod 'choria/mcollective_agent_puppetca', :latest
61
+ mod 'choria/mcollective_agent_bolt_tasks', :latest
62
+ mod 'choria/mcollective_agent_iptables', :latest
63
+ mod 'choria/mcollective_agent_process', :latest
64
+ mod 'choria/mcollective_util_actionpolicy', :latest
65
+ mod 'optiz0r/mcollective_agent_puppet_env', :latest
66
+ mod 'jay7x/mcollective_agent_query', :latest
67
+ mod 'choria/mcollective_data_sysctl', :latest
68
+ mod 'puppet/yum', :latest
69
+ mod 'puppetlabs/java', :latest
70
+ mod 'puppet/elastic_stack', :latest
71
+ mod 'puppet/hashi_stack', :latest
72
+
73
+ # core modules are not vendored on Gentoo
74
+ mod 'puppetlabs-sshkeys_core', :latest
75
+ mod 'puppetlabs-mount_core', :latest
76
+ mod 'puppetlabs-augeas_core', :latest
77
+ mod 'puppetlabs-selinux_core', :latest
78
+ mod 'puppetlabs-yumrepo_core', :latest
@@ -0,0 +1,28 @@
1
+ mod 'choria',
2
+ :git => 'https://github.com/choria-io/puppet-choria',
3
+ :ref => '0.26.2'
4
+
5
+ mod 'inifile',
6
+ :git => 'https://github.com/puppetlabs/puppetlabs-inifile',
7
+ :ref => '2.2.0'
8
+
9
+ mod 'ruby',
10
+ :git => 'https://github.com/puppetlabs/puppetlabs-ruby.git',
11
+ :ref => 'v1.0.1'
12
+
13
+ mod 'stdlib',
14
+ :git => 'https://github.com/puppetlabs/puppetlabs-stdlib',
15
+ :ref => '4.24.0'
16
+
17
+ mod 'concat',
18
+ :git => 'https://github.com/puppetlabs/puppetlabs-concat',
19
+ :ref => '4.0.0'
20
+
21
+ mod 'ntp',
22
+ :git => 'https://github.com/puppetlabs/puppetlabs-ntp',
23
+ :ref => '6.4.1'
24
+
25
+ mod 'archive',
26
+ :git => 'https://github.com/voxpupuli/puppet-archive',
27
+ :ref => 'v3.1.1'
28
+
@@ -1,35 +1,59 @@
1
1
  # frozen_string_literal: true
2
-
2
+ require 'r10k/puppetfile'
3
3
  require 'spec_helper'
4
4
  require 'ra10ke/dependencies'
5
+ require 'ra10ke'
6
+
5
7
  RSpec::Mocks.configuration.allow_message_expectations_on_nil = true
6
8
 
7
9
  RSpec.describe 'Ra10ke::Dependencies::Verification' do
8
- after(:each) do
9
- # reset version formats
10
- formats = Ra10ke::Dependencies.class_variable_get(:@@version_formats)
11
- Ra10ke::Dependencies.class_variable_set(:@@version_formats, formats.select { |k, _v| k == :semver } )
10
+ let(:instance) do
11
+ pfile = R10K::Puppetfile.new(File.basename(puppetfile), nil,puppetfile, nil, false)
12
+ Ra10ke::Dependencies::Verification.new(pfile)
13
+ end
14
+
15
+ let(:puppetfile) do
16
+ File.join(fixtures_dir, 'Puppetfile')
12
17
  end
13
18
 
14
19
  context 'register_version_format' do
15
20
  it 'default contains semver' do
16
- expect(Ra10ke::Dependencies.class_variable_get(:@@version_formats)).to have_key(:semver)
21
+ expect(Ra10ke::Dependencies::Verification.version_formats).to have_key(:semver)
17
22
  end
18
23
  it 'add new version format' do
19
- Ra10ke::Dependencies.register_version_format(:test) do |tags|
24
+ Ra10ke::Dependencies::Verification.register_version_format(:test) do |tags|
20
25
  nil
21
26
  end
22
- expect(Ra10ke::Dependencies.class_variable_get(:@@version_formats)).to have_key(:test)
27
+ expect(Ra10ke::Dependencies::Verification.version_formats).to have_key(:test)
23
28
  end
24
29
  end
25
30
 
26
- context 'get_latest_ref' do
31
+ context 'show output in table format' do
27
32
  let(:instance) do
28
- class DependencyDummy
29
- include Ra10ke::Dependencies
30
- end.new
33
+ pfile = R10K::Puppetfile.new(File.basename(puppetfile), nil,puppetfile, nil, false)
34
+ Ra10ke::Dependencies::Verification.new(pfile)
35
+ end
36
+
37
+ let(:puppetfile) do
38
+ File.join(fixtures_dir, 'Puppetfile')
39
+ end
40
+
41
+ let(:processed_modules) do
42
+ instance.outdated
43
+ end
44
+
45
+ it 'have dependencies array' do
46
+ expect(processed_modules).to be_a Array
31
47
  end
32
48
 
49
+ it 'show dependencies as table' do
50
+ instance.print_table(processed_modules)
51
+ end
52
+
53
+ end
54
+
55
+ context 'get_latest_ref' do
56
+
33
57
  context 'find latest semver tag' do
34
58
  let(:latest_tag) do
35
59
  'v1.1.0'
@@ -60,7 +84,7 @@ RSpec.describe 'Ra10ke::Dependencies::Verification' do
60
84
  end
61
85
 
62
86
  it do
63
- Ra10ke::Dependencies.register_version_format(:number) do |tags|
87
+ Ra10ke::Dependencies::Verification.register_version_format(:number) do |tags|
64
88
  tags.detect { |tag| tag == latest_tag }
65
89
  end
66
90
  expect(instance.get_latest_ref({
@@ -68,5 +92,17 @@ RSpec.describe 'Ra10ke::Dependencies::Verification' do
68
92
  })).to eq(latest_tag)
69
93
  end
70
94
  end
95
+
96
+ context 'convert to ref' do
97
+
98
+ it 'run rake task' do
99
+ output_conversion = File.read(File.join(fixtures_dir, 'Puppetfile_git_conversion'))
100
+ require 'ra10ke'
101
+ Ra10ke::RakeTask.new do |t|
102
+ t.basedir = fixtures_dir
103
+ end
104
+ expect{Rake::Task['r10k:print_git_conversion'].invoke}.to output(output_conversion).to_stdout
105
+ end
106
+ end
71
107
  end
72
108
  end
@@ -34,4 +34,15 @@ RSpec.describe 'Ra10ke::Deprecation::Validation' do
34
34
 
35
35
  expect(instance.bad_mods?).to eq(false)
36
36
  end
37
+
38
+ describe 'handles large puppetfile' do
39
+ let(:puppetfile) do
40
+ File.join(fixtures_dir, 'Puppetfile_deprecation_issue')
41
+ end
42
+
43
+ it 'deprecated modules' do
44
+ expect(instance.bad_mods?).to eq(false)
45
+ expect(instance.deprecated_modules.count).to eq(0)
46
+ end
47
+ end
37
48
  end
@@ -38,6 +38,10 @@ RSpec.describe 'Ra10ke::GitRepo' do
38
38
  expect(instance.remote_refs.first).to eq("1b3322d525e96bf7d0565b08703e2a44c90e7b4a\tHEAD\n")
39
39
  end
40
40
 
41
+ it '#get_ref_like' do
42
+ expect(instance.get_ref_like('8.0.0'))
43
+ end
44
+
41
45
  it '#valid_ref?' do
42
46
  expect(instance.valid_ref?('master')).to be true
43
47
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ra10ke
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Theo Chatzimichos
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-04-21 00:00:00.000000000 Z
12
+ date: 2022-05-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -45,14 +45,14 @@ dependencies:
45
45
  requirements:
46
46
  - - ">="
47
47
  - !ruby/object:Gem::Version
48
- version: '0'
48
+ version: 2.6.5
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - ">="
54
54
  - !ruby/object:Gem::Version
55
- version: '0'
55
+ version: 2.6.5
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: git
58
58
  requirement: !ruby/object:Gem::Requirement
@@ -184,6 +184,8 @@ files:
184
184
  - lib/ra10ke/version.rb
185
185
  - ra10ke.gemspec
186
186
  - spec/fixtures/Puppetfile
187
+ - spec/fixtures/Puppetfile_deprecation_issue
188
+ - spec/fixtures/Puppetfile_git_conversion
187
189
  - spec/fixtures/Puppetfile_test
188
190
  - spec/fixtures/Puppetfile_with_bad_refs
189
191
  - spec/fixtures/Puppetfile_with_commit
@@ -213,7 +215,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
213
215
  requirements:
214
216
  - - ">="
215
217
  - !ruby/object:Gem::Version
216
- version: 2.4.0
218
+ version: 2.6.0
217
219
  required_rubygems_version: !ruby/object:Gem::Requirement
218
220
  requirements:
219
221
  - - ">="