knife-changelog 1.4.1 → 1.7.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/.github/workflows/ci.yml +15 -0
- data/.github/workflows/release.yml +18 -0
- data/Rakefile +4 -7
- data/knife-changelog.gemspec +1 -2
- data/lib/chef/knife/changelog.rb +1 -1
- data/lib/knife/changelog/changelog.rb +3 -3
- data/lib/knife/changelog/git_submodule.rb +18 -0
- data/lib/knife/changelog/policyfile.rb +22 -4
- data/spec/unit/policyfile_spec.rb +10 -5
- metadata +6 -18
- data/.travis.yml +0 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 023bd4002b877a917379e771cda46f246bf6bde1da80d980d5398b0e3d020e48
|
4
|
+
data.tar.gz: bb6e6831e93c34bc0896313ff01faa0935b371d1b37031213fbb075ede0cc908
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f0a9cb080f54d631f2e7029dcf7aa55c873c39f00f74b932ecb4a4b6f46b4dab2f437e6eb48fb6cec30efcd17dce79a2c98ab584caf0d87ac4d8385d88fce159
|
7
|
+
data.tar.gz: c7bcf3f6ef83c9cfcefae5bb7423daa63e2b292cbd8c2c67c72670cf4e6c7c8cab641d8016cca205bf298e76c015dd24575963f8ba122070012606582933b906
|
@@ -0,0 +1,15 @@
|
|
1
|
+
name: Tests
|
2
|
+
on: [push, pull_request]
|
3
|
+
jobs:
|
4
|
+
test:
|
5
|
+
runs-on: ubuntu-latest
|
6
|
+
strategy:
|
7
|
+
matrix:
|
8
|
+
ruby-version: ['2.5', '2.7']
|
9
|
+
steps:
|
10
|
+
- uses: actions/checkout@v2
|
11
|
+
- uses: ruby/setup-ruby@v1
|
12
|
+
with:
|
13
|
+
ruby-version: ${{ matrix.ruby-version }}
|
14
|
+
bundler-cache: true
|
15
|
+
- run: bundle exec rake
|
@@ -0,0 +1,18 @@
|
|
1
|
+
name: Release
|
2
|
+
on:
|
3
|
+
push:
|
4
|
+
tags: [ '*' ]
|
5
|
+
jobs:
|
6
|
+
release:
|
7
|
+
runs-on: ubuntu-latest
|
8
|
+
steps:
|
9
|
+
- uses: actions/checkout@v2
|
10
|
+
- uses: ruby/setup-ruby@v1
|
11
|
+
with:
|
12
|
+
ruby-version: 2.7
|
13
|
+
- run: |
|
14
|
+
install -D -m 600 <(echo -e "---\n:rubygems_api_key: ${RUBYGEMS_API_KEY}") $HOME/.gem/credentials
|
15
|
+
gem build *.gemspec
|
16
|
+
gem push *.gem
|
17
|
+
env:
|
18
|
+
RUBYGEMS_API_KEY: ${{secrets.RUBYGEMS_API_KEY}}
|
data/Rakefile
CHANGED
@@ -1,9 +1,6 @@
|
|
1
|
-
require
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'rspec/core/rake_task'
|
2
3
|
|
3
|
-
|
4
|
-
require 'rspec/core/rake_task'
|
5
|
-
RSpec::Core::RakeTask.new(:spec)
|
4
|
+
RSpec::Core::RakeTask.new(:spec)
|
6
5
|
|
7
|
-
|
8
|
-
rescue LoadError
|
9
|
-
end
|
6
|
+
task default: :spec
|
data/knife-changelog.gemspec
CHANGED
@@ -5,7 +5,7 @@ $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 = '1.
|
8
|
+
spec.version = '1.7.0'
|
9
9
|
spec.authors = ['Gregoire Seux']
|
10
10
|
spec.email = ['kamaradclimber@gmail.com']
|
11
11
|
spec.summary = 'Facilitate access to cookbooks changelog'
|
@@ -18,7 +18,6 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.add_development_dependency 'bundler', '~> 1.6'
|
22
21
|
spec.add_development_dependency 'pry'
|
23
22
|
spec.add_development_dependency 'rake'
|
24
23
|
spec.add_development_dependency 'rspec'
|
data/lib/chef/knife/changelog.rb
CHANGED
@@ -18,7 +18,7 @@ class KnifeChangelog
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
def initialize(config)
|
21
|
+
def initialize(config = {})
|
22
22
|
@tmp_prefix = 'knife-changelog'
|
23
23
|
@config = config
|
24
24
|
@tmp_dirs = []
|
@@ -177,7 +177,7 @@ class KnifeChangelog
|
|
177
177
|
if !url.end_with?('.git')
|
178
178
|
url = "#{url}.git"
|
179
179
|
end
|
180
|
-
location = Location.new(url, guess_version_for(name), '
|
180
|
+
location = Location.new(url, guess_version_for(name), 'HEAD')
|
181
181
|
handle_git(name, location)
|
182
182
|
end
|
183
183
|
|
@@ -200,7 +200,7 @@ class KnifeChangelog
|
|
200
200
|
subm_revision.error!
|
201
201
|
revision = subm_revision.stdout.strip.split(' ').first
|
202
202
|
revision.gsub!(/^\+/, '')
|
203
|
-
loc = Location.new(url, revision, '
|
203
|
+
loc = Location.new(url, revision, 'HEAD')
|
204
204
|
handle_git(name, loc)
|
205
205
|
end
|
206
206
|
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require 'chef/log'
|
3
|
+
require_relative 'changelog'
|
4
|
+
|
5
|
+
class KnifeChangelog
|
6
|
+
class GitSubmodule < Changelog
|
7
|
+
|
8
|
+
def run(submodules)
|
9
|
+
raise ::ArgumentError, "Submodules must be an Array instead of #{submodules.inspect}" unless submodules.is_a?(::Array)
|
10
|
+
submodules.map do |submodule|
|
11
|
+
Chef::Log.debug "Checking changelog for #{submodule} (submodule)"
|
12
|
+
format_changelog(submodule, *handle_submodule(submodule))
|
13
|
+
end.compact.join("\n")
|
14
|
+
ensure
|
15
|
+
clean
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -107,14 +107,30 @@ class PolicyChangelog
|
|
107
107
|
# @param current [String] current cookbook version tag
|
108
108
|
# @param target [String] target cookbook version tag
|
109
109
|
# @return [String] changelog between tags for one cookbook
|
110
|
-
def git_changelog(source_url, current, target)
|
110
|
+
def git_changelog(source_url, current, target, cookbook = nil)
|
111
111
|
dir = Dir.mktmpdir(TMP_PREFIX)
|
112
112
|
repo = Git.clone(source_url, dir)
|
113
|
-
|
113
|
+
cookbook_path = cookbook ? git_cookbook_path(repo, cookbook) : '.'
|
114
|
+
repo.log.path(cookbook_path).between(git_ref(current, repo, cookbook), git_ref(target, repo, cookbook)).map do |commit|
|
114
115
|
"#{commit.sha[0, 7]} #{commit.message.lines.first.strip}"
|
115
116
|
end.join("\n")
|
116
117
|
end
|
117
118
|
|
119
|
+
# Tries to find the location of a specific cookbook in the given repo
|
120
|
+
#
|
121
|
+
# @param repo [Git::Base] Git repository object
|
122
|
+
# @param cookbook [String] name of the cookbook to search the location
|
123
|
+
# @return [String] reative location of the cookbook in the repo
|
124
|
+
def git_cookbook_path(repo, cookbook)
|
125
|
+
metadata_files = ['metadata.rb', '*/metadata.rb'].flat_map { |location| repo.ls_files(location).keys }
|
126
|
+
metadata_path = metadata_files.find do |path|
|
127
|
+
path = ::File.join(repo.dir.to_s, path)
|
128
|
+
::Chef::Cookbook::Metadata.new.tap { |m| m.from_file(path) }.name == cookbook
|
129
|
+
end
|
130
|
+
raise "Impossible to find matching metadata for #{cookbook} in #{repo.remote.url}" unless metadata_path
|
131
|
+
::File.dirname(metadata_path)
|
132
|
+
end
|
133
|
+
|
118
134
|
# Tries to convert a supermarket tag to a git reference
|
119
135
|
# if there is a difference in formatting between the two.
|
120
136
|
# This is issue is present for the 'java' cookbook.
|
@@ -122,9 +138,11 @@ class PolicyChangelog
|
|
122
138
|
#
|
123
139
|
# @param ref [String] version reference
|
124
140
|
# @param repo [Git::Base] Git repository object
|
141
|
+
# @param cookbook [String] name of the cookbook to ref against
|
125
142
|
# @return [String]
|
126
|
-
def git_ref(myref, repo)
|
143
|
+
def git_ref(myref, repo, cookbook_name = nil)
|
127
144
|
possible_refs = ['v' + myref, myref]
|
145
|
+
possible_refs += possible_refs.map { |ref| "#{cookbook_name}-#{ref}" } if cookbook_name
|
128
146
|
possible_refs += possible_refs.map { |ref| ref.chomp('.0') } if myref[/\.0$/]
|
129
147
|
existing_ref = possible_refs.find do |ref|
|
130
148
|
begin
|
@@ -162,7 +180,7 @@ class PolicyChangelog
|
|
162
180
|
output = ["\nChangelog for #{name}: #{data['current_version']}->#{data['target_version']}"]
|
163
181
|
output << '=' * output.first.size
|
164
182
|
output << if data['current_version']
|
165
|
-
git_changelog(data['source_url'], data['current_version'], data['target_version'])
|
183
|
+
git_changelog(data['source_url'], data['current_version'], data['target_version'], name)
|
166
184
|
else
|
167
185
|
'Cookbook was not in the Policyfile.lock.json'
|
168
186
|
end
|
@@ -214,7 +214,7 @@ RSpec.describe PolicyChangelog do
|
|
214
214
|
allow(changelog).to receive(:git_ref).with('1.0.0', any_args).and_return('v1.0.0')
|
215
215
|
allow(changelog).to receive(:git_ref).with('1.0.1', any_args).and_return('v1.0.1')
|
216
216
|
allow(changelog).to receive(:correct_tags)
|
217
|
-
allow(git_repo).to receive_message_chain(:log, :between)
|
217
|
+
allow(git_repo).to receive_message_chain(:log, :path, :between)
|
218
218
|
.with('v1.0.0', 'v1.0.1')
|
219
219
|
.and_return([git_commit])
|
220
220
|
|
@@ -238,11 +238,16 @@ RSpec.describe PolicyChangelog do
|
|
238
238
|
|
239
239
|
context 'when tag invalid and able to correct' do
|
240
240
|
it 'returns correct git tag' do
|
241
|
-
allow(repo).to receive(:checkout).with(/v1.0/).and_raise(::Git::GitExecuteError)
|
242
241
|
allow(repo).to receive(:checkout).with('1.0.0').and_raise(::Git::GitExecuteError)
|
243
|
-
allow(repo).to receive(:checkout).with('1.0').and_return(true)
|
244
242
|
|
245
|
-
|
243
|
+
tags = %w[v1.0.0 1.0 v1.0 cookbook_name-1.0.0 cookbook_name-1.0 cookbook_name-v1.0.0 cookbook_name-v1.0]
|
244
|
+
tags.each do |valid_result|
|
245
|
+
allow(repo).to receive(:checkout).with(valid_result).and_return(true)
|
246
|
+
tags.reject { |v| v == valid_result }.each do |invalid_result|
|
247
|
+
allow(repo).to receive(:checkout).with(invalid_result).and_raise(::Git::GitExecuteError)
|
248
|
+
end
|
249
|
+
expect(changelog.git_ref('1.0.0', repo, 'cookbook_name')).to eq valid_result
|
250
|
+
end
|
246
251
|
end
|
247
252
|
end
|
248
253
|
|
@@ -308,7 +313,7 @@ RSpec.describe PolicyChangelog do
|
|
308
313
|
}
|
309
314
|
|
310
315
|
allow(changelog).to receive(:git_changelog)
|
311
|
-
.with(instance_of(String), '4.0.0', '5.0.0')
|
316
|
+
.with(instance_of(String), '4.0.0', '5.0.0', 'users')
|
312
317
|
.and_return('e1b971a Add test commit message')
|
313
318
|
|
314
319
|
output = <<~COMMIT.chomp
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: knife-changelog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.7.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:
|
11
|
+
date: 2021-07-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: bundler
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '1.6'
|
20
|
-
type: :development
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '1.6'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: pry
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -199,9 +185,10 @@ executables: []
|
|
199
185
|
extensions: []
|
200
186
|
extra_rdoc_files: []
|
201
187
|
files:
|
188
|
+
- ".github/workflows/ci.yml"
|
189
|
+
- ".github/workflows/release.yml"
|
202
190
|
- ".gitignore"
|
203
191
|
- ".rubocop.yml"
|
204
|
-
- ".travis.yml"
|
205
192
|
- Gemfile
|
206
193
|
- LICENSE.txt
|
207
194
|
- README.md
|
@@ -211,6 +198,7 @@ files:
|
|
211
198
|
- lib/knife/changelog/berksfile.rb
|
212
199
|
- lib/knife/changelog/changelog.rb
|
213
200
|
- lib/knife/changelog/git.rb
|
201
|
+
- lib/knife/changelog/git_submodule.rb
|
214
202
|
- lib/knife/changelog/policyfile.rb
|
215
203
|
- resources/Berksfile
|
216
204
|
- resources/Berksfile.lock
|
@@ -243,7 +231,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
243
231
|
- !ruby/object:Gem::Version
|
244
232
|
version: '0'
|
245
233
|
requirements: []
|
246
|
-
rubygems_version: 3.
|
234
|
+
rubygems_version: 3.1.6
|
247
235
|
signing_key:
|
248
236
|
specification_version: 4
|
249
237
|
summary: Facilitate access to cookbooks changelog
|
data/.travis.yml
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
rvm:
|
3
|
-
- 2.4
|
4
|
-
deploy:
|
5
|
-
provider: rubygems
|
6
|
-
api_key:
|
7
|
-
secure: LAM8qxTQa6oxzKiQpWrqRlcE1czmGFj16NSj1FVgZYJLZIfXKdvSpth+DfuCk8mxG1tvDXa3ckfERrzexG3lYGNPGyZH2sjnyt900Evd3Bn8vhv0LXE7cEZb3x/uJ3RHRvKpEDnMsy4gqoVByDLWXWnI9Q/8B4AtzFeTVsTr48g=
|
8
|
-
gem: knife-changelog
|
9
|
-
on:
|
10
|
-
tags: true
|
11
|
-
repo: criteo/knife-changelog
|
12
|
-
sudo: false # use docker based infra
|