knife-changelog 4.0.0 → 4.1.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: 411909df80e256eb6bd9e979757fec2380c12af929364ab6c5dc950e0ae1ad4c
4
- data.tar.gz: acd53e149eed37830e7a8f1ab43f6ce43f457bce96ec0a721797a08626365dcd
3
+ metadata.gz: d0b9795c192f99c99cdab392807817812147b4d9482d6b1f5190c8adbac732cd
4
+ data.tar.gz: bf4fd4b3232690bf0b2f2fb7fd63fd1d829f3f5846a78a0a0c0e9a87b7971cb6
5
5
  SHA512:
6
- metadata.gz: 83f46649c2d333d411f6d0f6207fabd62c6c591253288df58473cd1e70f16d96f280b6693c70bc512f77d5aa1971a942cb961c9d4721b6dafefd61829ac67d7e
7
- data.tar.gz: e5f843bfd021fd395c882f306caf9f716a9f1c11b95375a85fc399fb6f6a48114a2b7e75c22a6a7ca5080b2ffd9d76cf04a2ef863553f96e8fe8cced18e9c147
6
+ metadata.gz: 00ab22310ec4ec7f07b53e8070450b1c86d5893315f9eaf9c65dc5dc74b568419feef48d3762d4df8c839cea8e3871f862ef9a6f659bbe304d64ee180b21e2e1
7
+ data.tar.gz: 0e24cc98ac6f6c8681a966cb25d92be0a027209cd1498d086788bd9e488a49134b6fc5db7ab3b5606fc3f6668c10755c12f9c914e3d6e679dfc7eab060d2cd7c
@@ -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.0'
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'
@@ -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.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gregoire Seux
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-07-10 00:00:00.000000000 Z
11
+ date: 2024-07-26 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,7 +189,7 @@ 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: {}
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)