stove 5.2.0 → 6.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -0
- data/bin/stove +1 -0
- data/features/plugins/community.feature +7 -7
- data/features/plugins/git.feature +1 -1
- data/features/step_definitions/community_steps.rb +2 -2
- data/lib/stove.rb +2 -2
- data/lib/stove/cli.rb +3 -3
- data/lib/stove/cookbook.rb +3 -3
- data/lib/stove/cookbook/metadata.rb +1 -1
- data/lib/stove/error.rb +4 -3
- data/lib/stove/plugins/git.rb +2 -0
- data/lib/stove/plugins/supermarket.rb +18 -0
- data/lib/stove/runner.rb +1 -1
- data/lib/stove/{community.rb → supermarket.rb} +9 -9
- data/lib/stove/version.rb +1 -1
- data/spec/unit/error_spec.rb +4 -4
- data/templates/errors/git_tagging_failed.erb +5 -0
- data/templates/errors/{cookbook_already_exists.erb → supermarket_already_exists.erb} +0 -0
- data/templates/errors/supermarket_key_validation_failed.erb +3 -0
- data/templates/errors/{community_username_validation_failed.erb → supermarket_username_validation_failed.erb} +1 -1
- metadata +9 -10
- data/bin/bake +0 -6
- data/lib/stove/plugins/community.rb +0 -18
- data/templates/errors/community_key_validation_failed.erb +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 390277d48cb42db0d622b67242398c2356a64caa
|
4
|
+
data.tar.gz: 5d62fb5adb3ab6433d2dd3a2cae863833e52ebda
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5434acb284472d0f408b3e14215942faa47acb190a88147b1d651a54520d19bdd7e55fa5c6932af26de61f4baadf37c676c7e3413bce4d24c834172789812906
|
7
|
+
data.tar.gz: c9df46d77f1c1b61aa22e865ad1df556d8b34f87927019bdc877b3ec5ba0a0cb84459d0f94bc680c867a4a4a816ad5c9009fdf8f579126d205775c020e9cec15
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,19 @@
|
|
2
2
|
|
3
3
|
This is the Changelog for the Stove gem.
|
4
4
|
|
5
|
+
## v6.0.0
|
6
|
+
|
7
|
+
### Breaking Changes
|
8
|
+
|
9
|
+
- All references to the Community site have been renamed to Supermarket. This includes the name of the `community` plugin and all `Community` classes references within the code. This should not be a breaking change unless your developing against stove as a library.
|
10
|
+
- The long ago deprecated `bake` command has been removed.
|
11
|
+
|
12
|
+
### Other Changes
|
13
|
+
|
14
|
+
- Git tagging errors now include more useful error messaging.
|
15
|
+
- The help command now better describes `--no-git` and `--endpoint` flags.
|
16
|
+
- For developers running stove from the git repository, the application now properly loads stove from the repository instead of from an installed gem.
|
17
|
+
|
5
18
|
## v5.2.0 (2017-05-12)
|
6
19
|
|
7
20
|
- Support for uploading to Artifactory
|
data/bin/stove
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Feature:
|
1
|
+
Feature: Supermarket
|
2
2
|
Background:
|
3
3
|
* I have a cookbook named "bacon"
|
4
4
|
|
@@ -13,25 +13,25 @@ Feature: Community
|
|
13
13
|
* it should fail with "requires a private key"
|
14
14
|
|
15
15
|
Scenario: With the default parameters
|
16
|
-
* the
|
16
|
+
* the supermarket has the cookbook:
|
17
17
|
| bacon | 1.2.3 |
|
18
18
|
* I successfully run `stove --no-git`
|
19
|
-
* the
|
19
|
+
* the supermarket will have the cookbooks:
|
20
20
|
| bacon | 0.0.0 |
|
21
21
|
|
22
22
|
Scenario: Yanking a cookbook
|
23
|
-
* the
|
23
|
+
* the supermarket has the cookbooks:
|
24
24
|
| bacon | 1.2.3 |
|
25
25
|
* I successfully run `stove yank -l debug`
|
26
|
-
* the
|
26
|
+
* the supermarket will not have the cookbooks:
|
27
27
|
| bacon | 1.2.3 |
|
28
28
|
* the output should contain "Successfully yanked bacon!"
|
29
29
|
|
30
30
|
Scenario: Yanking a cookbook by name
|
31
|
-
* the
|
31
|
+
* the supermarket has the cookbooks:
|
32
32
|
| eggs | 4.5.6 |
|
33
33
|
* I successfully run `stove yank eggs`
|
34
|
-
* the
|
34
|
+
* the supermarket will not have the cookbooks:
|
35
35
|
| eggs | 4.5.6 |
|
36
36
|
* the output should not contain "Successfully yanked bacon!"
|
37
37
|
* the output should contain "Successfully yanked eggs!"
|
@@ -1,4 +1,4 @@
|
|
1
|
-
Given /^the
|
1
|
+
Given /^the supermarket has the cookbooks?:$/ do |table|
|
2
2
|
table.raw.each do |name, version|
|
3
3
|
version ||= '0.0.0'
|
4
4
|
|
@@ -10,7 +10,7 @@ Given /^the community server has the cookbooks?:$/ do |table|
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
-
Then /^the
|
13
|
+
Then /^the supermarket will( not)? have the cookbooks?:$/ do |negate, table|
|
14
14
|
table.raw.each do |name, version|
|
15
15
|
cookbook = CommunityZero::RSpec.store.find(name, version)
|
16
16
|
|
data/lib/stove.rb
CHANGED
@@ -3,7 +3,7 @@ require 'pathname'
|
|
3
3
|
|
4
4
|
module Stove
|
5
5
|
autoload :Artifactory, 'stove/artifactory'
|
6
|
-
autoload :
|
6
|
+
autoload :Supermarket, 'stove/supermarket'
|
7
7
|
autoload :Config, 'stove/config'
|
8
8
|
autoload :Cookbook, 'stove/cookbook'
|
9
9
|
autoload :Cli, 'stove/cli'
|
@@ -31,7 +31,7 @@ module Stove
|
|
31
31
|
module Plugin
|
32
32
|
autoload :Artifactory, 'stove/plugins/artifactory'
|
33
33
|
autoload :Base, 'stove/plugins/base'
|
34
|
-
autoload :
|
34
|
+
autoload :Supermarket, 'stove/plugins/supermarket'
|
35
35
|
autoload :Git, 'stove/plugins/git'
|
36
36
|
end
|
37
37
|
|
data/lib/stove/cli.rb
CHANGED
@@ -55,7 +55,7 @@ module Stove
|
|
55
55
|
if @argv.first == 'yank'
|
56
56
|
name = @argv[1] || Cookbook.new(options[:path]).name
|
57
57
|
|
58
|
-
if
|
58
|
+
if Supermarket.yank(name)
|
59
59
|
@stdout.puts "Successfully yanked #{name}!"
|
60
60
|
@kernel.exit(0)
|
61
61
|
else
|
@@ -101,14 +101,14 @@ module Stove
|
|
101
101
|
opts.separator ''
|
102
102
|
opts.separator 'Plugins:'
|
103
103
|
|
104
|
-
opts.on('--no-git', 'Do not use the git plugin') do
|
104
|
+
opts.on('--no-git', 'Do not use the git plugin. Skips tagging if specified.') do
|
105
105
|
options[:no_git] = true
|
106
106
|
end
|
107
107
|
|
108
108
|
opts.separator ''
|
109
109
|
opts.separator 'Upload Options:'
|
110
110
|
|
111
|
-
opts.on('--endpoint [URL]', '
|
111
|
+
opts.on('--endpoint [URL]', 'Supermarket endpoint') do |v|
|
112
112
|
options[:endpoint] = v
|
113
113
|
end
|
114
114
|
|
data/lib/stove/cookbook.rb
CHANGED
@@ -17,7 +17,7 @@ module Stove
|
|
17
17
|
|
18
18
|
#
|
19
19
|
# The name of the cookbook (must correspond to the name of the
|
20
|
-
# cookbook on the
|
20
|
+
# cookbook on the Supermarket).
|
21
21
|
#
|
22
22
|
# @return [String]
|
23
23
|
#
|
@@ -71,7 +71,7 @@ module Stove
|
|
71
71
|
end
|
72
72
|
|
73
73
|
#
|
74
|
-
# Deterine if this cookbook version is released on the
|
74
|
+
# Deterine if this cookbook version is released on the Supermarket
|
75
75
|
#
|
76
76
|
# @warn
|
77
77
|
# This is a fairly expensive operation and the result cannot be
|
@@ -82,7 +82,7 @@ module Stove
|
|
82
82
|
# site, false otherwise
|
83
83
|
#
|
84
84
|
def released?
|
85
|
-
|
85
|
+
Supermarket.cookbook(name, version)
|
86
86
|
true
|
87
87
|
rescue ChefAPI::Error::HTTPNotFound
|
88
88
|
false
|
@@ -5,7 +5,7 @@ module Stove
|
|
5
5
|
# Borrowed and modified from:
|
6
6
|
# {https://raw.github.com/opscode/chef/11.4.0/lib/chef/cookbook/metadata.rb}
|
7
7
|
#
|
8
|
-
# Copyright:: Copyright 2008-
|
8
|
+
# Copyright:: Copyright 2008-2017 Chef Software, Inc.
|
9
9
|
#
|
10
10
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
11
11
|
# you may not use this file except in compliance with the License.
|
data/lib/stove/error.rb
CHANGED
@@ -38,15 +38,16 @@ module Stove
|
|
38
38
|
end
|
39
39
|
|
40
40
|
class GitFailed < StoveError; end
|
41
|
+
class GitTaggingFailed < StoveError; end
|
41
42
|
class MetadataNotFound < StoveError; end
|
42
43
|
class ServerUnavailable < StoveError; end
|
43
44
|
class CookbookAlreadyExists < StoveError; end
|
44
45
|
|
45
46
|
# Validations
|
46
47
|
class ValidationFailed < StoveError; end
|
47
|
-
class
|
48
|
-
class
|
49
|
-
class
|
48
|
+
class SupermarketCategoryValidationFailed < ValidationFailed; end
|
49
|
+
class SupermarketKeyValidationFailed < ValidationFailed; end
|
50
|
+
class SupermarketUsernameValidationFailed < ValidationFailed; end
|
50
51
|
class GitCleanValidationFailed < ValidationFailed; end
|
51
52
|
class GitRepositoryValidationFailed < ValidationFailed; end
|
52
53
|
class GitUpToDateValidationFailed < ValidationFailed; end
|
data/lib/stove/plugins/git.rb
CHANGED
@@ -34,11 +34,13 @@ module Stove
|
|
34
34
|
private
|
35
35
|
|
36
36
|
def git(command, errors = true)
|
37
|
+
log.debug("the command matches")
|
37
38
|
log.debug("Running `git #{command}', errors: #{errors}")
|
38
39
|
Dir.chdir(cookbook.path) do
|
39
40
|
response = %x|git #{command}|
|
40
41
|
|
41
42
|
if errors && !$?.success?
|
43
|
+
raise Error::GitTaggingFailed.new(command: command) if command =~ /^tag/
|
42
44
|
raise Error::GitFailed.new(command: command)
|
43
45
|
end
|
44
46
|
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Stove
|
2
|
+
class Plugin::Supermarket < Plugin::Base
|
3
|
+
id 'supermarket'
|
4
|
+
description 'Publish the release to the Chef Supermarket'
|
5
|
+
|
6
|
+
validate(:username) do
|
7
|
+
Config.username
|
8
|
+
end
|
9
|
+
|
10
|
+
validate(:key) do
|
11
|
+
Config.key
|
12
|
+
end
|
13
|
+
|
14
|
+
run('Publishing the release to the Chef Supermarket') do
|
15
|
+
Supermarket.upload(cookbook, options[:extended_metadata])
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/stove/runner.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
require 'chef-api'
|
2
2
|
|
3
3
|
module Stove
|
4
|
-
class
|
4
|
+
class Supermarket
|
5
5
|
include Mixin::Instanceable
|
6
6
|
include Mixin::Optionable
|
7
7
|
|
8
8
|
#
|
9
|
-
# The default endpoint where the
|
9
|
+
# The default endpoint where the Supermarket lives.
|
10
10
|
#
|
11
11
|
# @return [String]
|
12
12
|
#
|
@@ -17,19 +17,19 @@ module Stove
|
|
17
17
|
# and version.
|
18
18
|
#
|
19
19
|
# @example Find a cookbook by name
|
20
|
-
#
|
20
|
+
# Supermarket.cookbook('apache2') #=> {...}
|
21
21
|
#
|
22
22
|
# @example Find a cookbook by name and version
|
23
|
-
#
|
23
|
+
# Supermarket.cookbook('apache2', '1.0.0') #=> {...}
|
24
24
|
#
|
25
25
|
# @example Find a non-existent cookbook
|
26
|
-
#
|
26
|
+
# Supermarket.cookbook('not-real') #=> Community::BadResponse
|
27
27
|
#
|
28
|
-
# @raise [
|
29
|
-
# if the given cookbook (or cookbook version) does not exist on the
|
28
|
+
# @raise [Supermarket::BadResponse]
|
29
|
+
# if the given cookbook (or cookbook version) does not exist on the Supermarket
|
30
30
|
#
|
31
31
|
# @param [String] name
|
32
|
-
# the name of the cookbook on the
|
32
|
+
# the name of the cookbook on the Supermarket
|
33
33
|
# @param [String] version (optional)
|
34
34
|
# the version of the cookbook to find
|
35
35
|
#
|
@@ -63,7 +63,7 @@ module Stove
|
|
63
63
|
end
|
64
64
|
|
65
65
|
#
|
66
|
-
# Delete the given cookbook from the
|
66
|
+
# Delete the given cookbook from the supermarket.
|
67
67
|
#
|
68
68
|
# @param [String] name
|
69
69
|
# the name of the cookbook to delete
|
data/lib/stove/version.rb
CHANGED
data/spec/unit/error_spec.rb
CHANGED
@@ -49,12 +49,12 @@ module Stove::Error
|
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
|
-
describe
|
52
|
+
describe SupermarketKeyValidationFailed do
|
53
53
|
it 'raises an exception with the correct message' do
|
54
54
|
expect { raise described_class }.to raise_error { |error|
|
55
55
|
expect(error).to be_a(described_class)
|
56
56
|
expect(error.message).to eq <<-EOH.gsub(/^ {10}/, '')
|
57
|
-
You did not specify the path to a private key! The Chef
|
57
|
+
You did not specify the path to a private key! The Chef Supermarket requires a private key for authentication:
|
58
58
|
|
59
59
|
stove --key ~/.chef/sethvargo.pem
|
60
60
|
EOH
|
@@ -62,12 +62,12 @@ module Stove::Error
|
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
|
-
describe
|
65
|
+
describe SupermarketUsernameValidationFailed do
|
66
66
|
it 'raises an exception with the correct message' do
|
67
67
|
expect { raise described_class }.to raise_error { |error|
|
68
68
|
expect(error).to be_a(described_class)
|
69
69
|
expect(error.message).to eq <<-EOH.gsub(/^ {10}/, '')
|
70
|
-
You did not specify the username to authenticate with! The Chef
|
70
|
+
You did not specify the username to authenticate with! The Chef Supermarket requires a username for authentication:
|
71
71
|
|
72
72
|
stove --username sethvargo
|
73
73
|
EOH
|
File without changes
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stove
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 6.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Seth Vargo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-09-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: chef-api
|
@@ -140,7 +140,6 @@ description: A utility for releasing Chef community cookbooks
|
|
140
140
|
email:
|
141
141
|
- sethvargo@gmail.com
|
142
142
|
executables:
|
143
|
-
- bake
|
144
143
|
- stove
|
145
144
|
extensions: []
|
146
145
|
extra_rdoc_files: []
|
@@ -152,7 +151,6 @@ files:
|
|
152
151
|
- LICENSE
|
153
152
|
- README.md
|
154
153
|
- Rakefile
|
155
|
-
- bin/bake
|
156
154
|
- bin/stove
|
157
155
|
- features/plugins/community.feature
|
158
156
|
- features/plugins/git.feature
|
@@ -167,7 +165,6 @@ files:
|
|
167
165
|
- lib/stove.rb
|
168
166
|
- lib/stove/artifactory.rb
|
169
167
|
- lib/stove/cli.rb
|
170
|
-
- lib/stove/community.rb
|
171
168
|
- lib/stove/config.rb
|
172
169
|
- lib/stove/cookbook.rb
|
173
170
|
- lib/stove/cookbook/metadata.rb
|
@@ -181,10 +178,11 @@ files:
|
|
181
178
|
- lib/stove/packager.rb
|
182
179
|
- lib/stove/plugins/artifactory.rb
|
183
180
|
- lib/stove/plugins/base.rb
|
184
|
-
- lib/stove/plugins/community.rb
|
185
181
|
- lib/stove/plugins/git.rb
|
182
|
+
- lib/stove/plugins/supermarket.rb
|
186
183
|
- lib/stove/rake_task.rb
|
187
184
|
- lib/stove/runner.rb
|
185
|
+
- lib/stove/supermarket.rb
|
188
186
|
- lib/stove/util.rb
|
189
187
|
- lib/stove/validator.rb
|
190
188
|
- lib/stove/version.rb
|
@@ -201,16 +199,17 @@ files:
|
|
201
199
|
- stove.gemspec
|
202
200
|
- templates/errors/abstract_method.erb
|
203
201
|
- templates/errors/artifactory_key_validation_failed.erb
|
204
|
-
- templates/errors/community_key_validation_failed.erb
|
205
|
-
- templates/errors/community_username_validation_failed.erb
|
206
|
-
- templates/errors/cookbook_already_exists.erb
|
207
202
|
- templates/errors/git_clean_validation_failed.erb
|
208
203
|
- templates/errors/git_failed.erb
|
209
204
|
- templates/errors/git_repository_validation_failed.erb
|
205
|
+
- templates/errors/git_tagging_failed.erb
|
210
206
|
- templates/errors/git_up_to_date_validation_failed.erb
|
211
207
|
- templates/errors/metadata_not_found.erb
|
212
208
|
- templates/errors/server_unavailable.erb
|
213
209
|
- templates/errors/stove_error.erb
|
210
|
+
- templates/errors/supermarket_already_exists.erb
|
211
|
+
- templates/errors/supermarket_key_validation_failed.erb
|
212
|
+
- templates/errors/supermarket_username_validation_failed.erb
|
214
213
|
homepage: https://github.com/sethvargo/stove
|
215
214
|
licenses:
|
216
215
|
- Apache 2.0
|
@@ -231,7 +230,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
231
230
|
version: '0'
|
232
231
|
requirements: []
|
233
232
|
rubyforge_project:
|
234
|
-
rubygems_version: 2.6.
|
233
|
+
rubygems_version: 2.6.13
|
235
234
|
signing_key:
|
236
235
|
specification_version: 4
|
237
236
|
summary: A command-line utility for releasing Chef community cookbooks
|
data/bin/bake
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
module Stove
|
2
|
-
class Plugin::Community < Plugin::Base
|
3
|
-
id 'community'
|
4
|
-
description 'Publish the release to the Chef community site'
|
5
|
-
|
6
|
-
validate(:username) do
|
7
|
-
Config.username
|
8
|
-
end
|
9
|
-
|
10
|
-
validate(:key) do
|
11
|
-
Config.key
|
12
|
-
end
|
13
|
-
|
14
|
-
run('Publishing the release to the Chef community site') do
|
15
|
-
Community.upload(cookbook, options[:extended_metadata])
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|