stove 2.0.0 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +6 -1
- data/CHANGELOG.md +20 -0
- data/README.md +34 -80
- data/Rakefile +9 -1
- data/bin/bake +2 -0
- data/bin/stove +4 -0
- data/features/plugins/community.feature +11 -26
- data/features/plugins/git.feature +17 -6
- data/features/step_definitions/community_steps.rb +3 -1
- data/features/step_definitions/config_steps.rb +4 -21
- data/features/step_definitions/git_steps.rb +38 -1
- data/features/support/env.rb +17 -11
- data/features/support/stove/git.rb +28 -8
- data/lib/stove/cli.rb +72 -53
- data/lib/stove/community.rb +16 -67
- data/lib/stove/config.rb +55 -46
- data/lib/stove/cookbook/metadata.rb +3 -5
- data/lib/stove/cookbook.rb +2 -41
- data/lib/stove/error.rb +37 -8
- data/lib/stove/filter.rb +2 -1
- data/lib/stove/mixins/instanceable.rb +3 -2
- data/lib/stove/mixins/validatable.rb +5 -1
- data/lib/stove/packager.rb +11 -3
- data/lib/stove/plugins/base.rb +26 -13
- data/lib/stove/plugins/community.rb +3 -7
- data/lib/stove/plugins/git.rb +27 -30
- data/lib/stove/rake_task.rb +3 -63
- data/lib/stove/runner.rb +16 -65
- data/lib/stove/validator.rb +7 -6
- data/lib/stove/version.rb +1 -1
- data/lib/stove.rb +3 -21
- data/spec/spec_helper.rb +2 -0
- data/spec/unit/error_spec.rb +148 -0
- data/stove.gemspec +10 -14
- data/templates/errors/abstract_method.erb +5 -0
- data/templates/errors/community_category_validation_failed.erb +5 -0
- data/templates/errors/community_key_validation_failed.erb +3 -0
- data/templates/errors/community_username_validation_failed.erb +3 -0
- data/templates/errors/git_clean_validation_failed.erb +1 -0
- data/templates/errors/git_failed.erb +5 -0
- data/templates/errors/git_repository_validation_failed.erb +3 -0
- data/templates/errors/git_up_to_date_validation_failed.erb +7 -0
- data/templates/errors/metadata_not_found.erb +1 -0
- data/templates/errors/server_unavailable.erb +1 -0
- data/templates/errors/stove_error.erb +1 -0
- metadata +32 -114
- data/features/actions/bump.feature +0 -22
- data/features/actions/changelog.feature +0 -52
- data/features/actions/dev.feature +0 -18
- data/features/actions/upload.feature +0 -26
- data/features/rake.feature +0 -15
- data/features/step_definitions/cli_steps.rb +0 -3
- data/lib/stove/actions/base.rb +0 -21
- data/lib/stove/actions/bump.rb +0 -25
- data/lib/stove/actions/changelog.rb +0 -71
- data/lib/stove/actions/dev.rb +0 -22
- data/lib/stove/actions/finish.rb +0 -8
- data/lib/stove/actions/start.rb +0 -7
- data/lib/stove/actions/upload.rb +0 -11
- data/lib/stove/jira.rb +0 -88
- data/lib/stove/middlewares/chef_authentication.rb +0 -60
- data/lib/stove/middlewares/exceptions.rb +0 -17
- data/lib/stove/mixins/filterable.rb +0 -11
- data/lib/stove/plugins/github.rb +0 -107
- data/lib/stove/plugins/jira.rb +0 -72
- data/locales/en.yml +0 -230
data/lib/stove/jira.rb
DELETED
@@ -1,88 +0,0 @@
|
|
1
|
-
require 'faraday'
|
2
|
-
require 'faraday_middleware'
|
3
|
-
|
4
|
-
module Stove
|
5
|
-
class JIRA
|
6
|
-
include Mixin::Instanceable
|
7
|
-
include Logify
|
8
|
-
include Mixin::Optionable
|
9
|
-
|
10
|
-
option :base_url,
|
11
|
-
ENV['JIRA_URL'] || 'https://tickets.opscode.com/rest/api/2'
|
12
|
-
|
13
|
-
def issue(key, options = {})
|
14
|
-
connection.get("issue/#{key}", options).body
|
15
|
-
end
|
16
|
-
|
17
|
-
def search(query = {})
|
18
|
-
jql = query.map { |k,v| %Q|#{k} = "#{v}"| }.join(' AND ')
|
19
|
-
connection.get('search', jql: jql).body
|
20
|
-
end
|
21
|
-
|
22
|
-
def close_and_comment(key, comment)
|
23
|
-
transitions = issue(key, expand: 'transitions')['transitions']
|
24
|
-
close = transitions.first { |transition| transition['name'] == 'Close' }
|
25
|
-
|
26
|
-
if close.nil?
|
27
|
-
log.warn("Issue #{key} does not have a `Close' transition")
|
28
|
-
return
|
29
|
-
end
|
30
|
-
|
31
|
-
connection.post("issue/#{key}/transitions", {
|
32
|
-
transition: { id: close['id'] },
|
33
|
-
update: {
|
34
|
-
comment: [
|
35
|
-
{ add: { body: comment.to_s } }
|
36
|
-
]
|
37
|
-
},
|
38
|
-
fields: {
|
39
|
-
resolution: {
|
40
|
-
name: 'Fixed'
|
41
|
-
},
|
42
|
-
assignee: {
|
43
|
-
name: nil
|
44
|
-
}
|
45
|
-
}
|
46
|
-
})
|
47
|
-
end
|
48
|
-
|
49
|
-
private
|
50
|
-
|
51
|
-
def connection
|
52
|
-
@connection ||= Faraday.new(base_url) do |builder|
|
53
|
-
# Encode request bodies as JSON
|
54
|
-
builder.request :json
|
55
|
-
|
56
|
-
# Add basic authentication information
|
57
|
-
builder.request :basic_auth, Stove::Config[:jira][:username],
|
58
|
-
Stove::Config[:jira][:password]
|
59
|
-
|
60
|
-
# Handle any common errors
|
61
|
-
builder.use Stove::Middleware::Exceptions
|
62
|
-
|
63
|
-
# Decode responses as JSON if the Content-Type is json
|
64
|
-
builder.response :json
|
65
|
-
builder.response :json_fix
|
66
|
-
|
67
|
-
# Allow up to 3 redirects
|
68
|
-
builder.response :follow_redirects, limit: 3
|
69
|
-
|
70
|
-
# Log all requests and responses (useful for development)
|
71
|
-
builder.response :logger, log
|
72
|
-
|
73
|
-
# Raise errors on 40x and 50x responses
|
74
|
-
builder.response :raise_error
|
75
|
-
|
76
|
-
# Use the default adapter (Net::HTTP)
|
77
|
-
builder.adapter :net_http
|
78
|
-
|
79
|
-
# Set the User-Agent header for logging purposes
|
80
|
-
builder.headers[:user_agent] = Stove::USER_AGENT
|
81
|
-
|
82
|
-
# Set some options, such as timeouts
|
83
|
-
builder.options[:timeout] = 30
|
84
|
-
builder.options[:open_timeout] = 30
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
@@ -1,60 +0,0 @@
|
|
1
|
-
require 'pp'
|
2
|
-
|
3
|
-
module Stove
|
4
|
-
class Middleware::ChefAuthentication < Faraday::Middleware
|
5
|
-
dependency do
|
6
|
-
require 'mixlib/authentication/signedheaderauth'
|
7
|
-
require 'openssl'
|
8
|
-
require 'uri'
|
9
|
-
end
|
10
|
-
|
11
|
-
#
|
12
|
-
# @param [Faraday::Application] app
|
13
|
-
# @param [String] client
|
14
|
-
# the name of the client to use for Chef
|
15
|
-
# @param [OpenSSL::PKey::RSA] key
|
16
|
-
# the RSA private key to sign with
|
17
|
-
#
|
18
|
-
def initialize(app, client, key)
|
19
|
-
super(app)
|
20
|
-
|
21
|
-
@client = client
|
22
|
-
@key = OpenSSL::PKey::RSA.new(File.read(key))
|
23
|
-
end
|
24
|
-
|
25
|
-
def call(env)
|
26
|
-
env[:request_headers].merge!(signing_object(env))
|
27
|
-
@app.call(env)
|
28
|
-
end
|
29
|
-
|
30
|
-
private
|
31
|
-
|
32
|
-
def signing_object(env)
|
33
|
-
params = {
|
34
|
-
:http_method => env[:method],
|
35
|
-
:timestamp => Time.now.utc.iso8601,
|
36
|
-
:user_id => @client,
|
37
|
-
:path => env[:url].path,
|
38
|
-
:body => env[:body] || '',
|
39
|
-
}
|
40
|
-
|
41
|
-
# Royal fucking hack
|
42
|
-
# 1. (n.) This code sample
|
43
|
-
# 2. (v.) Having to decompose a Faraday response because Mixlib
|
44
|
-
# Authentication couldn't get a date to the prom
|
45
|
-
if env[:body] && env[:body].is_a?(Faraday::CompositeReadIO)
|
46
|
-
file = env[:body]
|
47
|
-
.instance_variable_get(:@parts)
|
48
|
-
.first { |part| part.is_a?(Faraday::Parts::FilePart) }
|
49
|
-
.instance_variable_get(:@io)
|
50
|
-
.instance_variable_get(:@ios)[1]
|
51
|
-
.instance_variable_get(:@local_path)
|
52
|
-
|
53
|
-
params[:file] = File.new(file)
|
54
|
-
end
|
55
|
-
|
56
|
-
object = Mixlib::Authentication::SignedHeaderAuth.signing_object(params)
|
57
|
-
object.sign(@key)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
module Stove
|
2
|
-
class Middleware::Exceptions < Faraday::Middleware
|
3
|
-
include Logify
|
4
|
-
|
5
|
-
def call(env)
|
6
|
-
begin
|
7
|
-
@app.call(env)
|
8
|
-
rescue Faraday::Error::ConnectionFailed
|
9
|
-
url = env[:url].to_s.gsub(env[:url].path, '')
|
10
|
-
raise Error::ServerUnavailable.new(url: url)
|
11
|
-
rescue Faraday::Error::ClientError => e
|
12
|
-
log.debug(env.inspect)
|
13
|
-
raise
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,11 +0,0 @@
|
|
1
|
-
module Stove
|
2
|
-
module Mixin::Filterable
|
3
|
-
def before(action, message, &block)
|
4
|
-
Runner.filters[action][:before] << Filter.new(self, message, &block)
|
5
|
-
end
|
6
|
-
|
7
|
-
def after(action, message, &block)
|
8
|
-
Runner.filters[action][:after] << Filter.new(self, message, &block)
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
data/lib/stove/plugins/github.rb
DELETED
@@ -1,107 +0,0 @@
|
|
1
|
-
module Stove
|
2
|
-
class Plugin::GitHub < Plugin::Base
|
3
|
-
id 'github'
|
4
|
-
description 'Publish the release to GitHub'
|
5
|
-
|
6
|
-
onload do
|
7
|
-
require 'faraday'
|
8
|
-
require 'faraday_middleware'
|
9
|
-
require 'octokit'
|
10
|
-
end
|
11
|
-
|
12
|
-
validate(:git) do
|
13
|
-
options[:git]
|
14
|
-
end
|
15
|
-
|
16
|
-
validate(:configuration) do
|
17
|
-
Config.has_key?(:github)
|
18
|
-
end
|
19
|
-
|
20
|
-
validate(:access_token) do
|
21
|
-
Config[:github].has_key?(:access_token)
|
22
|
-
end
|
23
|
-
|
24
|
-
after(:upload, 'Publishing the release to GitHub') do
|
25
|
-
release = client.create_release(repository, cookbook.tag_version,
|
26
|
-
name: cookbook.tag_version,
|
27
|
-
body: cookbook.changeset,
|
28
|
-
)
|
29
|
-
asset = client.upload_asset("repos/#{repository}/releases/#{release.id}", cookbook.tarball,
|
30
|
-
content_type: 'application/x-gzip',
|
31
|
-
name: filename,
|
32
|
-
)
|
33
|
-
client.update_release_asset("repos/#{repository}/releases/assets/#{asset.id}",
|
34
|
-
name: filename,
|
35
|
-
label: 'Download Cookbook',
|
36
|
-
)
|
37
|
-
end
|
38
|
-
|
39
|
-
def client
|
40
|
-
return @client if @client
|
41
|
-
|
42
|
-
config = {}.tap do |h|
|
43
|
-
h[:middleware] = middleware
|
44
|
-
h[:access_token] = Config[:github][:access_token]
|
45
|
-
h[:api_endpoint] = Config[:github][:api_endpoint] if Config[:github][:api_endpoint]
|
46
|
-
end
|
47
|
-
|
48
|
-
@client = Octokit::Client.new(config)
|
49
|
-
@client
|
50
|
-
end
|
51
|
-
|
52
|
-
def changeset
|
53
|
-
@changeset ||= cookbook.changeset.split("\n")[2..-1].join("\n").strip
|
54
|
-
end
|
55
|
-
|
56
|
-
def repository
|
57
|
-
@repository ||= Octokit::Repository.from_url(repo_url)
|
58
|
-
end
|
59
|
-
|
60
|
-
def filename
|
61
|
-
@filename ||= "#{cookbook.name}-#{cookbook.version}.tar.gz"
|
62
|
-
end
|
63
|
-
|
64
|
-
def middleware
|
65
|
-
Faraday::Builder.new do |builder|
|
66
|
-
# Handle any common errors
|
67
|
-
builder.use Stove::Middleware::Exceptions
|
68
|
-
builder.use Octokit::Response::RaiseError
|
69
|
-
|
70
|
-
# Log all requests and responses (useful for development)
|
71
|
-
builder.response :logger, log
|
72
|
-
|
73
|
-
# Raise errors on 40x and 50x responses
|
74
|
-
builder.response :raise_error
|
75
|
-
|
76
|
-
# Use the default adapter (Net::HTTP)
|
77
|
-
builder.adapter :net_http
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
#
|
82
|
-
# The URL for this repository on GitHub. This method automatically
|
83
|
-
# translates SSH and git:// URLs to https:// URLs.
|
84
|
-
#
|
85
|
-
# @return [String]
|
86
|
-
#
|
87
|
-
def repo_url
|
88
|
-
return @repo_url if @repo_url
|
89
|
-
|
90
|
-
path = File.join('.git', 'config')
|
91
|
-
log.debug("Calculating repo_url from `#{path}'")
|
92
|
-
|
93
|
-
config = File.read(path)
|
94
|
-
log.debug("Config contents:\n#{config}")
|
95
|
-
|
96
|
-
config =~ /\[remote "#{options[:remote]}"\]\n\s+url = (.+)$/
|
97
|
-
log.debug("Match: #{$1.inspect}")
|
98
|
-
|
99
|
-
@repo_url = $1.to_s
|
100
|
-
.strip
|
101
|
-
.gsub(/\.git$/, '')
|
102
|
-
.gsub(/^\S+@(\S+):/, 'https://\1/')
|
103
|
-
.gsub('git://', 'https://')
|
104
|
-
@repo_url
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
data/lib/stove/plugins/jira.rb
DELETED
@@ -1,72 +0,0 @@
|
|
1
|
-
module Stove
|
2
|
-
class Plugin::JIRA < Plugin::Base
|
3
|
-
id 'jira'
|
4
|
-
description 'Resolve JIRA issues'
|
5
|
-
|
6
|
-
validate(:configuration) do
|
7
|
-
Config.has_key?(:jira)
|
8
|
-
end
|
9
|
-
|
10
|
-
validate(:username) do
|
11
|
-
Config[:jira].has_key?(:username)
|
12
|
-
end
|
13
|
-
|
14
|
-
validate(:password) do
|
15
|
-
Config[:jira].has_key?(:password)
|
16
|
-
end
|
17
|
-
|
18
|
-
before(:changelog, 'Generate JIRA changeset') do
|
19
|
-
by_type = unreleased_issues.inject({}) do |hash, issue|
|
20
|
-
type = issue['fields']['issuetype']['name']
|
21
|
-
hash[type] ||= []
|
22
|
-
hash[type] << {
|
23
|
-
key: issue['key'],
|
24
|
-
summary: issue['fields']['summary'],
|
25
|
-
}
|
26
|
-
|
27
|
-
hash
|
28
|
-
end
|
29
|
-
|
30
|
-
# Calculate the JIRA path based off of the JIRA base_url
|
31
|
-
jira_base = URI.parse(JIRA.base_url)
|
32
|
-
jira_base.path = ''
|
33
|
-
jira_base = jira_base.to_s
|
34
|
-
log.debug("JIRA base is `#{jira_base}'")
|
35
|
-
|
36
|
-
contents = []
|
37
|
-
|
38
|
-
by_type.each do |type, issues|
|
39
|
-
contents << "### #{type}"
|
40
|
-
issues.sort { |a, b| b[:key].to_i <=> a[:key].to_i }.each do |issue|
|
41
|
-
url = "#{jira_base}/browse/#{issue[:key]}"
|
42
|
-
contents << "- **[#{issue[:key]}](#{url})** - #{issue[:summary]}"
|
43
|
-
end
|
44
|
-
contents << ''
|
45
|
-
end
|
46
|
-
|
47
|
-
cookbook.changeset = contents.join("\n")
|
48
|
-
end
|
49
|
-
|
50
|
-
after(:upload, 'Resolving JIRA issues') do
|
51
|
-
unreleased_issues.collect do |issue|
|
52
|
-
Thread.new do
|
53
|
-
JIRA.close_and_comment(issue['key'], "Released in #{cookbook.version}")
|
54
|
-
end
|
55
|
-
end.map(&:join)
|
56
|
-
end
|
57
|
-
|
58
|
-
#
|
59
|
-
# The list of unreleased tickets on JIRA.
|
60
|
-
#
|
61
|
-
# @return [Array<Hash>]
|
62
|
-
#
|
63
|
-
def unreleased_issues
|
64
|
-
@unreleased_issues ||= JIRA.search(
|
65
|
-
project: 'COOK',
|
66
|
-
resolution: 'Fixed',
|
67
|
-
status: 'Fix Committed',
|
68
|
-
component: cookbook.name,
|
69
|
-
)['issues']
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
data/locales/en.yml
DELETED
@@ -1,230 +0,0 @@
|
|
1
|
-
en:
|
2
|
-
stove:
|
3
|
-
errors:
|
4
|
-
abstract_method: >
|
5
|
-
`%{method}` is an abstract method. You must override this method in
|
6
|
-
your subclass with the proper implementation and logic. For more
|
7
|
-
information, please see the inline documentation for %{method}. If you
|
8
|
-
are not a developer, this is most likely a bug. Please file a bug report
|
9
|
-
at https://github.com/sethvargo/stove/issues/new and include the
|
10
|
-
command(s) you ran to arrive at this error.
|
11
|
-
|
12
|
-
git_failed: >
|
13
|
-
An error occurred while running:
|
14
|
-
|
15
|
-
git %{command}
|
16
|
-
|
17
|
-
There is likely an informative message from git that explains what
|
18
|
-
happened right above this message.
|
19
|
-
|
20
|
-
metadata_not_found: >
|
21
|
-
The file at `%{path}' does not exist or does not contain valid metadata.
|
22
|
-
Please make sure you have specified the correct path and that the
|
23
|
-
metdata file exists.
|
24
|
-
|
25
|
-
server_unavailable: >
|
26
|
-
The server at `%{url}` is unavailable or is not currently accepting
|
27
|
-
client connections. Please ensure the server is accessible via ping (or
|
28
|
-
telnet) on your local network. If this error persists, please contact
|
29
|
-
your network administrator.
|
30
|
-
|
31
|
-
|
32
|
-
validations:
|
33
|
-
# Bump validations
|
34
|
-
# ----------------
|
35
|
-
bump:
|
36
|
-
changed: >
|
37
|
-
The version you are trying to bump already exists! You must specify a
|
38
|
-
new version.
|
39
|
-
|
40
|
-
incremented: >
|
41
|
-
The cookbook version you are attempting to bump to is less than the
|
42
|
-
existing version. You cannot (re-)release a previous version of the
|
43
|
-
same cookbook. Please specify a higher version.
|
44
|
-
|
45
|
-
|
46
|
-
# Changelog validations
|
47
|
-
# ---------------------
|
48
|
-
changelog:
|
49
|
-
editor: >
|
50
|
-
The `$EDITOR' environment variable is not set. In order to use the
|
51
|
-
Changelog plugin, you must set a default editor for Stove to open when
|
52
|
-
generating the CHANGLEOG. You can set the editor like this:
|
53
|
-
|
54
|
-
export EDITOR=vi
|
55
|
-
|
56
|
-
exists: >
|
57
|
-
There is no `CHANGELOG.md' found at `%{path}. In order to use the
|
58
|
-
Changelog plugin, you must have a changelog in markdown format at the
|
59
|
-
root of your cookbook. You can also skip the Changelog plugin by
|
60
|
-
specifying the `--no-changelog' option:
|
61
|
-
|
62
|
-
bake x.y.z --no-changelog
|
63
|
-
|
64
|
-
format: >
|
65
|
-
The changelog at `%{path}' does not appear to be a valid format. The
|
66
|
-
changelog must be in the following format:
|
67
|
-
|
68
|
-
[Cookbook Name]
|
69
|
-
===============
|
70
|
-
|
71
|
-
v[version] ([release date])
|
72
|
-
---------------------------
|
73
|
-
- [Release point]
|
74
|
-
|
75
|
-
For example:
|
76
|
-
|
77
|
-
Apache 2
|
78
|
-
========
|
79
|
-
|
80
|
-
v1.0.0 (2013-04-05)
|
81
|
-
-------------------
|
82
|
-
- Initial release
|
83
|
-
|
84
|
-
|
85
|
-
# Git validations
|
86
|
-
# ---------------
|
87
|
-
git:
|
88
|
-
clean: >
|
89
|
-
The cookbook at `%{path}' has untracked files! In order to use the git
|
90
|
-
plugin, you must have a clean working directory. Please commit or
|
91
|
-
stash your changes before running Stove again.
|
92
|
-
|
93
|
-
repository: >
|
94
|
-
The cookbook at `%{path}' does not appear to be a valid git
|
95
|
-
repository. In order to use the git plugin, your cookbook must be
|
96
|
-
initialized as a git repository. To create a git repository, run:
|
97
|
-
|
98
|
-
git init %{path}
|
99
|
-
|
100
|
-
up_to_date: >
|
101
|
-
The cookbook at `%{path}' is out of sync with the remote repository.
|
102
|
-
Please update your local cache with the remote repository before
|
103
|
-
continuing:
|
104
|
-
|
105
|
-
git pull
|
106
|
-
|
107
|
-
And then push your local changes to the remote repository:
|
108
|
-
|
109
|
-
git push
|
110
|
-
|
111
|
-
|
112
|
-
# GitHub validations
|
113
|
-
# ------------------
|
114
|
-
github:
|
115
|
-
access_token: >
|
116
|
-
The Stove configuration for GitHub does not contain an access token.
|
117
|
-
In order to use the GitHub plugin, you must set an access token in the
|
118
|
-
GitHub section of the `~/.stove' file:
|
119
|
-
|
120
|
-
{
|
121
|
-
"github": {
|
122
|
-
"access_token": "YOUR_ACCESS_TOKEN"
|
123
|
-
}
|
124
|
-
}
|
125
|
-
|
126
|
-
You can generate an access token for GitHub by following the
|
127
|
-
instructions at: https://help.github.com/articles/creating-an-access-token-for-command-line-use.
|
128
|
-
|
129
|
-
configuration: >
|
130
|
-
The Stove configuration for GitHub does not exist! In order to use the
|
131
|
-
GitHub plugin, you must set your GitHub information in the `~/.stove'
|
132
|
-
file:
|
133
|
-
|
134
|
-
{
|
135
|
-
"github": {
|
136
|
-
"access_token": "YOUR_ACCESS_TOKEN"
|
137
|
-
}
|
138
|
-
}
|
139
|
-
|
140
|
-
git: >
|
141
|
-
In order to use the GitHub plugin, you must also activate the `git'
|
142
|
-
plugin.
|
143
|
-
|
144
|
-
|
145
|
-
# JIRA validations
|
146
|
-
# ----------------
|
147
|
-
jira:
|
148
|
-
configuration: >
|
149
|
-
The Stove configuration for JIRA does not exist! In order to use the
|
150
|
-
JIRA plugin, you must set your JIRA information in the `~/.stove'
|
151
|
-
file:
|
152
|
-
|
153
|
-
{
|
154
|
-
"jira": {
|
155
|
-
"username": "YOUR_USERNAME",
|
156
|
-
"password": "YOUR_PASSWORD"
|
157
|
-
}
|
158
|
-
}
|
159
|
-
|
160
|
-
password: >
|
161
|
-
The Stove configuration for JIRA does not contain a password. In order
|
162
|
-
to use JIRA features, you must set a password in the jira section of
|
163
|
-
the `~/.stove' file:
|
164
|
-
|
165
|
-
{
|
166
|
-
"jira": {
|
167
|
-
"password": "YOUR_PASSWORD"
|
168
|
-
}
|
169
|
-
}
|
170
|
-
|
171
|
-
username: >
|
172
|
-
The Stove configuration for JIRA does not contain a username. In order
|
173
|
-
to use JIRA features, you must set a username in the jira section of
|
174
|
-
the `~/.stove' file:
|
175
|
-
|
176
|
-
{
|
177
|
-
"jira": {
|
178
|
-
"username": "YOUR_USERNAME"
|
179
|
-
}
|
180
|
-
}
|
181
|
-
|
182
|
-
# Community validations
|
183
|
-
# ---------------------
|
184
|
-
community:
|
185
|
-
configuration: >
|
186
|
-
The Stove configuration for the Chef community site does not exist! In
|
187
|
-
order to perform operations against the Chef community site, you must
|
188
|
-
set your username and path to your client key in the community section
|
189
|
-
of the `~/.stove' file:
|
190
|
-
|
191
|
-
{
|
192
|
-
"community": {
|
193
|
-
"username": "YOUR_USERNAME",
|
194
|
-
"key": "YOUR_KEY_PATH"
|
195
|
-
}
|
196
|
-
}
|
197
|
-
|
198
|
-
key: >
|
199
|
-
The Stove configuration for the Chef community site does not contain a
|
200
|
-
key. In order to use the Chef community site features, you must set
|
201
|
-
the path to your key the community section of the `~/.stove' file:
|
202
|
-
|
203
|
-
{
|
204
|
-
"community": {
|
205
|
-
"key": "YOUR_KEY_PATH"
|
206
|
-
}
|
207
|
-
}
|
208
|
-
|
209
|
-
username: >
|
210
|
-
The Stove configuration for the Chef community site does not contain a
|
211
|
-
username. In order to use the Chef community site features, you must
|
212
|
-
set a username the community section of the `~/.stove' file:
|
213
|
-
|
214
|
-
{
|
215
|
-
"community": {
|
216
|
-
"username": "YOUR_USERNAME"
|
217
|
-
}
|
218
|
-
}
|
219
|
-
|
220
|
-
category: >
|
221
|
-
You did not specify a category! The Chef community site requires all
|
222
|
-
cookbooks belong to a category. For existing cookboks, Stove can query
|
223
|
-
the Chef community site API and automatically complete the category
|
224
|
-
for you. However, for new cookbooks, you must specify the `--category'
|
225
|
-
flag at runtime:
|
226
|
-
|
227
|
-
bake x.y.z --category Utilities
|
228
|
-
|
229
|
-
For a complete listing of categories, please see the Chef community
|
230
|
-
site.
|