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 +4 -4
- data/knife-changelog.gemspec +2 -3
- data/lib/chef/knife/changelog.rb +1 -1
- data/lib/knife/changelog/policyfile.rb +25 -28
- data/spec/unit/policyfile_spec.rb +1 -1
- metadata +6 -22
- data/resources/Berksfile +0 -4
- data/resources/Berksfile.lock +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dbff2bfe2a4d1dc3b8f6328b37377413ce939bc105a4eaddd3a93d797bcfa8e6
|
4
|
+
data.tar.gz: 2e78f7f86fe4befeb81cd0be2d8e78e51c5af24cf66fda537a52b9cbe7be1791
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9c92ae94f6a309ac8e8b88d8abecddc8049f62cd36e4bb6bffc6178e1f7817c2dfd0d5a9f16c2636dc40062cb635a6682a28904a2103be72bca51c81b71b2ebd
|
7
|
+
data.tar.gz: 5fb3d1d47dc4df61a5deccfa5d0ec9c82d1d2149227c49069fd8bb63fa3cf89ad7e6d400b2fc5a28e9216b94f6afc27af708400ee59152a6ba8556d08ed1d213
|
data/knife-changelog.gemspec
CHANGED
@@ -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.
|
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/
|
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'
|
data/lib/chef/knife/changelog.rb
CHANGED
@@ -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
|
-
|
34
|
-
FileUtils.cp(File.join(@policyfile_dir, 'Policyfile.lock.json'),
|
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(
|
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
|
-
|
112
|
-
repo = Git.clone(source_url,
|
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
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
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.
|
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:
|
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/
|
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