knife-changelog 4.0.0 → 4.1.1

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: 411909df80e256eb6bd9e979757fec2380c12af929364ab6c5dc950e0ae1ad4c
4
- data.tar.gz: acd53e149eed37830e7a8f1ab43f6ce43f457bce96ec0a721797a08626365dcd
3
+ metadata.gz: dbff2bfe2a4d1dc3b8f6328b37377413ce939bc105a4eaddd3a93d797bcfa8e6
4
+ data.tar.gz: 2e78f7f86fe4befeb81cd0be2d8e78e51c5af24cf66fda537a52b9cbe7be1791
5
5
  SHA512:
6
- metadata.gz: 83f46649c2d333d411f6d0f6207fabd62c6c591253288df58473cd1e70f16d96f280b6693c70bc512f77d5aa1971a942cb961c9d4721b6dafefd61829ac67d7e
7
- data.tar.gz: e5f843bfd021fd395c882f306caf9f716a9f1c11b95375a85fc399fb6f6a48114a2b7e75c22a6a7ca5080b2ffd9d76cf04a2ef863553f96e8fe8cced18e9c147
6
+ metadata.gz: 9c92ae94f6a309ac8e8b88d8abecddc8049f62cd36e4bb6bffc6178e1f7817c2dfd0d5a9f16c2636dc40062cb635a6682a28904a2103be72bca51c81b71b2ebd
7
+ data.tar.gz: 5fb3d1d47dc4df61a5deccfa5d0ec9c82d1d2149227c49069fd8bb63fa3cf89ad7e6d400b2fc5a28e9216b94f6afc27af708400ee59152a6ba8556d08ed1d213
@@ -5,12 +5,12 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = 'knife-changelog'
8
- spec.version = '4.0.0'
8
+ spec.version = '4.1.1'
9
9
  spec.authors = ['Gregoire Seux']
10
10
  spec.email = ['kamaradclimber@gmail.com']
11
11
  spec.summary = 'Facilitate access to cookbooks changelog'
12
12
  spec.description = ''
13
- spec.homepage = 'https://github.com/kamaradclimber/knife-changelog'
13
+ spec.homepage = 'https://github.com/criteo/knife-changelog'
14
14
  spec.license = 'MIT'
15
15
 
16
16
  spec.required_ruby_version = '>= 3.0'
@@ -26,7 +26,6 @@ Gem::Specification.new do |spec|
26
26
  spec.add_development_dependency 'rubocop'
27
27
  spec.add_development_dependency 'webmock'
28
28
 
29
- spec.add_dependency 'chef'
30
29
  spec.add_dependency 'chef-cli'
31
30
  spec.add_dependency 'deep_merge'
32
31
  spec.add_dependency 'git'
@@ -35,7 +35,7 @@ class Chef
35
35
  @name_args,
36
36
  config[:policyfile],
37
37
  config[:with_dependencies]
38
- ).generate_changelog(config[:prevent_downgrade])
38
+ ).generate_changelog(prevent_downgrade: config[:prevent_downgrade])
39
39
  end
40
40
  end
41
41
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'chef'
4
3
  require 'chef/knife'
5
4
  require 'chef-cli/command/update'
6
5
  require 'chef-cli/command/install'
@@ -29,15 +28,15 @@ class PolicyChangelog
29
28
  # Updates the Policyfile.lock to get version differences.
30
29
  #
31
30
  # @return update_dir [String] tmp directory with updated Policyfile.lock
32
- def update_policyfile_lock
33
- backup_dir = Dir.mktmpdir
34
- FileUtils.cp(File.join(@policyfile_dir, 'Policyfile.lock.json'), backup_dir)
31
+ def update_policyfile_lock(work_dir: nil)
32
+ work_dir ||= ::Dir.mktmpdir(TMP_PREFIX)
33
+ FileUtils.cp(File.join(@policyfile_dir, 'Policyfile.lock.json'), work_dir)
35
34
  installer = ChefCLI::Command::Install.new
36
35
  raise "Cannot install Policyfile lock #{@policyfile_path}" unless installer.run([@policyfile_relative_path]).zero?
37
36
  updater = ChefCLI::Command::Update.new
38
37
  raise "Error updating Policyfile lock #{@policyfile_path}" unless updater.run([@policyfile_path, @cookbooks_to_update].flatten).zero?
39
38
  updated_policyfile_lock = read_policyfile_lock(@policyfile_dir)
40
- FileUtils.cp(File.join(backup_dir, 'Policyfile.lock.json'), @policyfile_dir)
39
+ FileUtils.cp(File.join(work_dir, 'Policyfile.lock.json'), @policyfile_dir)
41
40
  updated_policyfile_lock
42
41
  end
43
42
 
@@ -107,9 +106,9 @@ class PolicyChangelog
107
106
  # @param current [String] current cookbook version tag
108
107
  # @param target [String] target cookbook version tag
109
108
  # @return [String] changelog between tags for one cookbook
110
- def git_changelog(source_url, current, target, cookbook = nil)
111
- dir = Dir.mktmpdir(TMP_PREFIX)
112
- repo = Git.clone(source_url, dir)
109
+ def git_changelog(source_url, current, target, cookbook = nil, work_dir: nil)
110
+ repo_dir = ::File.join(work_dir || Dir.mktmpdir(TMP_PREFIX), "git-#{source_url.gsub(/[\/:]+/, '-')}")
111
+ repo = ::Dir.exist?(repo_dir) ? ::Git.open(repo_dir) : ::Git.clone(source_url, repo_dir)
113
112
  cookbook_path = cookbook ? git_cookbook_path(repo, cookbook) : '.'
114
113
  repo.log.path(cookbook_path).between(git_ref(current, repo, cookbook), git_ref(target, repo, cookbook)).map do |commit|
115
114
  "#{commit.sha[0, 7]} #{commit.message.lines.first.strip}"
@@ -176,11 +175,11 @@ class PolicyChangelog
176
175
  # @param name [String] cookbook name
177
176
  # @param data [Hash] cookbook versions and source url data
178
177
  # @return [String] formatted changelog
179
- def format_output(name, data)
178
+ def format_output(name, data, work_dir: nil)
180
179
  output = ["\nChangelog for #{name}: #{data['current_version']}->#{data['target_version']}"]
181
180
  output << '=' * output.first.size
182
181
  output << if data['current_version']
183
- git_changelog(data['source_url'], data['current_version'], data['target_version'], name)
182
+ git_changelog(data['source_url'], data['current_version'], data['target_version'], name, work_dir: work_dir)
184
183
  else
185
184
  'Cookbook was not in the Policyfile.lock.json'
186
185
  end
@@ -215,33 +214,31 @@ class PolicyChangelog
215
214
  #
216
215
  # @return [String] formatted version changelog
217
216
  def generate_changelog(prevent_downgrade: false)
218
- lock_current = read_policyfile_lock(@policyfile_dir)
219
- current = versions(lock_current['cookbook_locks'], 'current')
220
-
221
- lock_target = update_policyfile_lock
222
- target = versions(lock_target['cookbook_locks'], 'target')
223
-
224
- updated_cookbooks = current.deep_merge(target).reject { |_name, data| reject_version_filter(data) }
225
- changelog_cookbooks = if @with_dependencies || @cookbooks_to_update.nil?
226
- updated_cookbooks
227
- else
228
- updated_cookbooks.select { |name, _data| @cookbooks_to_update.include?(name) }
229
- end
230
-
231
- validate_downgrade!(updated_cookbooks) if prevent_downgrade
232
-
233
- generate_changelog_from_versions(changelog_cookbooks)
217
+ ::Dir.mktmpdir(TMP_PREFIX) do |dir|
218
+ lock_current = read_policyfile_lock(@policyfile_dir)
219
+ current = versions(lock_current['cookbook_locks'], 'current')
220
+ lock_target = update_policyfile_lock(work_dir: dir)
221
+ target = versions(lock_target['cookbook_locks'], 'target')
222
+ updated_cookbooks = current.deep_merge(target).reject { |_name, data| reject_version_filter(data) }
223
+ changelog_cookbooks = if @with_dependencies || @cookbooks_to_update.nil?
224
+ updated_cookbooks
225
+ else
226
+ updated_cookbooks.select { |name, _data| @cookbooks_to_update.include?(name) }
227
+ end
228
+ validate_downgrade!(updated_cookbooks) if prevent_downgrade
229
+ generate_changelog_from_versions(changelog_cookbooks, work_dir: dir)
230
+ end
234
231
  end
235
232
 
236
233
  # Generates Policyfile changelog
237
234
  #
238
235
  # @param cookbook_versions. Format is { 'NAME' => { 'current_version' => 'VERSION', 'target_version' => 'VERSION' }
239
236
  # @return [String] formatted version changelog
240
- def generate_changelog_from_versions(cookbook_versions)
237
+ def generate_changelog_from_versions(cookbook_versions, work_dir: nil)
241
238
  lock_current = read_policyfile_lock(@policyfile_dir)
242
239
  sources = cookbook_versions.map do |name, data|
243
240
  [name, get_source_url(lock_current['cookbook_locks'][name]['source_options'])] if data['current_version']
244
241
  end.compact.to_h
245
- cookbook_versions.deep_merge(sources).map { |name, data| format_output(name, data) }.join("\n")
242
+ cookbook_versions.deep_merge(sources).map { |name, data| format_output(name, data, work_dir: work_dir) }.join("\n")
246
243
  end
247
244
  end
@@ -284,7 +284,7 @@ RSpec.describe PolicyChangelog do
284
284
  }
285
285
 
286
286
  allow(changelog).to receive(:git_changelog)
287
- .with(instance_of(String), '4.0.0', '5.0.0', 'users')
287
+ .with(instance_of(String), '4.0.0', '5.0.0', 'users', work_dir: nil)
288
288
  .and_return('e1b971a Add test commit message')
289
289
 
290
290
  output = <<~COMMIT.chomp
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knife-changelog
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0
4
+ version: 4.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gregoire Seux
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-07-10 00:00:00.000000000 Z
11
+ date: 2025-04-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pry
@@ -80,20 +80,6 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: chef
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :runtime
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
83
  - !ruby/object:Gem::Dependency
98
84
  name: chef-cli
99
85
  requirement: !ruby/object:Gem::Requirement
@@ -196,8 +182,6 @@ files:
196
182
  - knife-changelog.gemspec
197
183
  - lib/chef/knife/changelog.rb
198
184
  - lib/knife/changelog/policyfile.rb
199
- - resources/Berksfile
200
- - resources/Berksfile.lock
201
185
  - spec/data/Policyfile.lock.json
202
186
  - spec/data/Policyfile.rb
203
187
  - spec/data/Policyfile_git.lock.json
@@ -205,11 +189,11 @@ files:
205
189
  - spec/data/updated/Policyfile.lock.json
206
190
  - spec/spec_helper.rb
207
191
  - spec/unit/policyfile_spec.rb
208
- homepage: https://github.com/kamaradclimber/knife-changelog
192
+ homepage: https://github.com/criteo/knife-changelog
209
193
  licenses:
210
194
  - MIT
211
195
  metadata: {}
212
- post_install_message:
196
+ post_install_message:
213
197
  rdoc_options: []
214
198
  require_paths:
215
199
  - lib
@@ -225,7 +209,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
225
209
  version: '0'
226
210
  requirements: []
227
211
  rubygems_version: 3.3.27
228
- signing_key:
212
+ signing_key:
229
213
  specification_version: 4
230
214
  summary: Facilitate access to cookbooks changelog
231
215
  test_files:
data/resources/Berksfile DELETED
@@ -1,4 +0,0 @@
1
- source "https://supermarket.chef.io"
2
-
3
- cookbook 'ohai'
4
- cookbook 'ulimit', :github => 'bmhatfield/chef-ulimit'
@@ -1,9 +0,0 @@
1
- DEPENDENCIES
2
- ohai
3
- ulimit
4
- git: git://github.com/bmhatfield/chef-ulimit.git
5
- revision: c8bb9a486b9bfb7d91e51141e6352ea3703a1819
6
-
7
- GRAPH
8
- ohai (1.1.10)
9
- ulimit (0.1.4)