cheflow 0.2.0 → 0.3.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/CHANGELOG.md +8 -0
- data/COOKBOOKS.md +29 -64
- data/README.md +56 -1
- data/cheflow.gemspec +5 -5
- data/lib/cheflow/cli.rb +120 -30
- data/lib/cheflow/cookbook.rb +15 -8
- data/lib/cheflow/version.rb +1 -1
- metadata +14 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2cad60057a95b60c4ca9da1c46c06cc495c8bbf8
|
4
|
+
data.tar.gz: d9649b15a0084e3bfaa4e22daf979a09e114dbe7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b36da2d89b9150759ef417a2766f11139911c24cd0e263703ec6c0d493f58dc90431009bc976229663cb62deabfb7aacfd665932bc1f716d824706276742efb3
|
7
|
+
data.tar.gz: 1aa106c0d68610f1e638f80238257113a1d04d3cfc8006c063f8ca77a507bf4f07f6f800d024e308dbbba604d8936396bb1c0a70c6fc92d524421a95b97f85c0
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
## 0.3.0 (UNRELEASED)
|
2
|
+
|
3
|
+
- [Improvement] Don't return an environment that has no versions of the cookbook in it.
|
4
|
+
- [Feature] Added `bump` command which will bump the version of the current cookbook.
|
5
|
+
- [Feature] Added `upload` command which will upload the current cookbook.
|
6
|
+
- [Feature] Added straight up copies of the `outdated` and `update` Berkshelf commands.
|
7
|
+
- [Feature] Added `apply` command to apply locked versions to the given environment.
|
8
|
+
|
1
9
|
## 0.2.0
|
2
10
|
|
3
11
|
- [Improvement] Only showing the 15 most recent version in the info command.
|
data/COOKBOOKS.md
CHANGED
@@ -1,63 +1,8 @@
|
|
1
1
|
## Cookbooks
|
2
2
|
|
3
|
-
Each
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
### Library Cookbooks
|
8
|
-
|
9
|
-
This is the most basic building block of Cookbooks. These types of cookbooks are reusable and are
|
10
|
-
mixed into other cookbooks to enhance them by:
|
11
|
-
|
12
|
-
- Adding LWRPs that abstract common functionality
|
13
|
-
- Including Libraries that add Ruby modules/classes for any depending cookbooks
|
14
|
-
|
15
|
-
The goal of these cookbooks is to abstract common things into re-usable building blocks. They often
|
16
|
-
do not include a single recipe because their job is to solely enhance the Chef primitives. It is
|
17
|
-
also very common for these cookbooks to not include attributes since there's nothing to configure.
|
18
|
-
|
19
|
-
Library cookbooks may depend on other library cookbooks or application cookbooks. They never depend
|
20
|
-
on a Node Cookbook and they never depend on a Wrapper cookbook.
|
21
|
-
|
22
|
-
Since the name of an LWRP is derived from the cookbook it is defined in, these cookbooks are named
|
23
|
-
with that in mind. Pick names that make sense for the way you want LWRPs to appear in recipes.
|
24
|
-
|
25
|
-
Library cookbooks are usually public, and you are strongly encouraged to open source your Library
|
26
|
-
cookbooks.
|
27
|
-
|
28
|
-
|
29
|
-
### Application Cookbooks
|
30
|
-
|
31
|
-
These describe a single application or a single piece of software, that share the same name as the
|
32
|
-
cookbook itself. If the application the cookbook manages contains multiple components then each one
|
33
|
-
is broken up into it's own recipe and the recipe is named after the component it will install.
|
34
|
-
Things are broken up in this way so you could install various components spread across a number of
|
35
|
-
nodes within an environment.
|
36
|
-
|
37
|
-
These cookbooks almost always contain a set of attributes which act as the runtime configuration for
|
38
|
-
the cookbook. These attributes can do something like setting a port number or even describing the
|
39
|
-
desired state of a service.
|
40
|
-
|
41
|
-
Application cookbooks may depend on Library Cookbooks and other Application Cookbooks. They never
|
42
|
-
depend on Node Cookbooks. They never depend on a Wrapper or Base Cookbook unless they are intended
|
43
|
-
to be internal to your organization and will never be distributed to the Chef Community Site.
|
44
|
-
|
45
|
-
These cookbooks are always named after the application they manage, and are usually name-spaced
|
46
|
-
with your organization name as a prefix `{organization}_{application_cookbook}`.
|
47
|
-
|
48
|
-
|
49
|
-
### Wrapper Cookbooks
|
50
|
-
|
51
|
-
This is the lightest Cookbook out of all the known Cookbook patterns. It does a very simple job of
|
52
|
-
depending on an Application Cookbook and then exposing a recipe for each recipe found in the
|
53
|
-
Application Cookbook that it is wrapping.
|
54
|
-
|
55
|
-
Wrapper cookbooks depend on Application Cookbooks only. They do not depend on other Wrapper
|
56
|
-
Cookbooks, Library Cookbooks, or Environment Cookbooks.
|
57
|
-
|
58
|
-
These cookbooks follow the naming convention `{organization}_{wrapped_cookbook}` or even sometimes
|
59
|
-
`{application}_{wrapped_cookbook}`. So the RabbitMQ cookbook for Codio would be called
|
60
|
-
`codio_rabbitmq`.
|
3
|
+
Each and every cookbook is either a Node or a Non-Node cookbook, and every cookbook should reside in
|
4
|
+
its very own Git repository. Additionally, there is a Base cookbook that must be the very first
|
5
|
+
dependency of each Node cookbook.
|
61
6
|
|
62
7
|
|
63
8
|
### Node Cookbooks
|
@@ -76,16 +21,37 @@ achieved using Chef Environments, where a Node cookbook directly corresponds to
|
|
76
21
|
of the same name. The Berkshelf lock file is converted into the environment's `cookbook_versions`
|
77
22
|
using the Berkshelf `apply` command.
|
78
23
|
|
24
|
+
Node cookbooks should never be a dependency for any other cookbook.
|
25
|
+
|
79
26
|
Node cookbook names are prefixed with `node_`. For example `node_webserver`
|
80
27
|
|
81
28
|
|
29
|
+
### Non-Node Cookbook
|
30
|
+
|
31
|
+
Anything that is not specific to a node, and is required to be reusable, should appear in a Non-Node
|
32
|
+
cookbook.
|
33
|
+
|
34
|
+
Non-Node cookbooks should be consumed and depended on by one or more Node cookbooks, and should
|
35
|
+
never be used directly. Easy peasy!
|
36
|
+
|
37
|
+
|
82
38
|
### Base Cookbook
|
83
39
|
|
84
|
-
All Node Cookbooks require at least one dependency, and that is the Base cookbook.
|
85
|
-
|
86
|
-
|
40
|
+
All Node Cookbooks require at least one dependency, and that is the Base cookbook.
|
41
|
+
|
42
|
+
This is the most basic building block of Cookbooks. These types of cookbooks are reusable and are
|
43
|
+
mixed into other Node cookbooks to enhance them by:
|
44
|
+
|
45
|
+
- Adding LWRPs that abstract common functionality
|
46
|
+
- Including Libraries that add Ruby modules/classes for any depending cookbooks
|
47
|
+
|
48
|
+
The goal of these cookbooks is to abstract common things into re-usable building blocks. It contains
|
49
|
+
several recipes that are common to all nodes. Examples include configuring NTP, creating system
|
50
|
+
users and SSH access.
|
51
|
+
|
52
|
+
The default recipe of your Node cookbooks should usually begin with your Base cookbook being
|
53
|
+
included first.
|
87
54
|
|
88
|
-
The default recipe of your Node cookbooks would be the best place to include your Base cookbook.
|
89
55
|
|
90
56
|
|
91
57
|
## Cookbook Development
|
@@ -103,12 +69,11 @@ made in that release.
|
|
103
69
|
[Berkshelf](http://berkshelf.com/) is used to manage Cookbook dependencies in all Cookbooks,
|
104
70
|
especially Node Cookbooks.
|
105
71
|
|
106
|
-
Every Cookbook, no matter what type should
|
72
|
+
Every Cookbook, no matter what type should always containa a Berksfile with at least the following
|
107
73
|
content:
|
108
74
|
|
109
75
|
```ruby
|
110
76
|
source "http://berkshelf-api.int.codio.com"
|
111
|
-
|
112
77
|
metadata
|
113
78
|
```
|
114
79
|
|
data/README.md
CHANGED
@@ -20,15 +20,57 @@ For the full details, read COOKBOOKS.md.
|
|
20
20
|
|
21
21
|
## Installation
|
22
22
|
|
23
|
-
Install Cheflow into the ChefDK
|
23
|
+
Install Cheflow into the ChefDK:
|
24
24
|
|
25
25
|
$ chef gem install cheflow
|
26
26
|
|
27
27
|
|
28
|
+
|
29
|
+
## Commands
|
30
|
+
|
31
|
+
### Info
|
32
|
+
|
33
|
+
cheflow info|i
|
34
|
+
|
35
|
+
Displays useful information about the current cookbook, including the environments this cookbook is
|
36
|
+
being used in, and the list of versions.
|
37
|
+
|
38
|
+
This is also the default command that will be executed if you run Cheflow without any command.
|
39
|
+
|
40
|
+
cheflow
|
41
|
+
|
42
|
+
### Bump
|
43
|
+
|
44
|
+
cheflow bump|b
|
45
|
+
|
46
|
+
Bumps the version of the current cookbook. By default, this will be the dev version (patch). To bump
|
47
|
+
the major or minor version, just pass that as the first argument:
|
48
|
+
|
49
|
+
cheflow bump minor
|
50
|
+
|
51
|
+
### Upload
|
52
|
+
|
53
|
+
cheflow upload|up
|
54
|
+
|
55
|
+
Upload the current cookbook - the current cookbook being that which is in the current working
|
56
|
+
directory. The current version of the cookbook will determine if this upload should be frozen or
|
57
|
+
not. If it is a dev version (ie. a patch release), then the uploaded cookbook is not frozen.
|
58
|
+
|
59
|
+
### Apply
|
60
|
+
|
61
|
+
cheflow apply|a
|
62
|
+
|
63
|
+
Apply the current Berksfile.lock file to the current Node cookbook's environment.
|
64
|
+
|
65
|
+
|
66
|
+
|
28
67
|
## Workflow
|
29
68
|
|
30
69
|
The Cheflow workflow is predominantly based on the current Cookbook version, which determines
|
31
70
|
whether to apply version locks from Berksfile.lock to the production environment or not.
|
71
|
+
Additionally, it will determine if the current cookbook is a node cookbook or not, and behave
|
72
|
+
accordingly.
|
73
|
+
|
32
74
|
|
33
75
|
### Development Releases
|
34
76
|
|
@@ -36,6 +78,17 @@ If the version's patch number is an odd one, ie. a dev release, then the environ
|
|
36
78
|
specified. If no environment is specified, then it will default to `development`. Cheflow will not
|
37
79
|
allow you to lock a development release to production, even if you specify it.
|
38
80
|
|
81
|
+
|
82
|
+
#### Publish a development version of a Non-Node cookbook
|
83
|
+
|
84
|
+
- Bump the dev version of the non-node cookbook. (eg. 1.0.0 to 1.0.1)
|
85
|
+
- Upload the cookbook without freezing: `berks up COOKBOOK --no-freeze`
|
86
|
+
|
87
|
+
Equivalent Cheflow command:
|
88
|
+
|
89
|
+
cheflow upload
|
90
|
+
|
91
|
+
|
39
92
|
#### Create a new development version of a Node cookbook
|
40
93
|
|
41
94
|
- Bump the dev version. (eg. 1.0.0 to 1.0.1)
|
@@ -49,6 +102,7 @@ Equivalent Cheflow command:
|
|
49
102
|
|
50
103
|
Default environment is `development`.
|
51
104
|
|
105
|
+
|
52
106
|
#### Update development version of a Node cookbook
|
53
107
|
|
54
108
|
- Upload new unfrozen version: `berks upload COOKBOOK --no-freeze`.
|
@@ -59,6 +113,7 @@ Cheflow command:
|
|
59
113
|
|
60
114
|
Default environment is `development`.
|
61
115
|
|
116
|
+
|
62
117
|
### Production Releases
|
63
118
|
|
64
119
|
If the version's patch number is an even one. ie. a production release, then the environment is
|
data/cheflow.gemspec
CHANGED
@@ -18,12 +18,12 @@ 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_dependency "semverse", "~> 1.
|
22
|
-
spec.add_dependency "berkshelf", "~> 3.
|
23
|
-
spec.add_dependency "ridley", "~> 4.
|
21
|
+
spec.add_dependency "semverse", "~> 1.2"
|
22
|
+
spec.add_dependency "berkshelf", "~> 3.3"
|
23
|
+
spec.add_dependency "ridley", "~> 4.2"
|
24
24
|
spec.add_dependency "ridley-connectors", "~> 2.3"
|
25
|
-
spec.add_dependency "thor", "~> 0.
|
25
|
+
spec.add_dependency "thor", "~> 0.19"
|
26
26
|
|
27
|
-
spec.add_development_dependency "bundler", "~> 1.
|
27
|
+
spec.add_development_dependency "bundler", "~> 1.10"
|
28
28
|
spec.add_development_dependency "rake"
|
29
29
|
end
|
data/lib/cheflow/cli.rb
CHANGED
@@ -21,20 +21,14 @@ module Cheflow
|
|
21
21
|
|
22
22
|
namespace 'cheflow'
|
23
23
|
|
24
|
-
map 'up' => :
|
24
|
+
map 'up' => :upload
|
25
|
+
map 'ud' => :update
|
26
|
+
map 'a' => :apply
|
27
|
+
map 'o' => :outdated
|
25
28
|
map 'i' => :info
|
29
|
+
map 'b' => :bump
|
26
30
|
map ["ver", "-v", "--version"] => :version
|
27
31
|
|
28
|
-
class_option :verbose,
|
29
|
-
type: :boolean,
|
30
|
-
desc: "Output verbose information",
|
31
|
-
aliases: "-v",
|
32
|
-
default: false
|
33
|
-
class_option :debug,
|
34
|
-
type: :boolean,
|
35
|
-
desc: "Output debug information",
|
36
|
-
aliases: "-d",
|
37
|
-
default: false
|
38
32
|
class_option :berksfile,
|
39
33
|
type: :string,
|
40
34
|
default: nil,
|
@@ -57,35 +51,131 @@ module Cheflow
|
|
57
51
|
aliases: "-P",
|
58
52
|
default: nil
|
59
53
|
|
60
|
-
|
61
|
-
|
62
|
-
|
54
|
+
desc 'upload', 'Upload the current cookbook'
|
55
|
+
long_desc <<-LONGDESC
|
56
|
+
Upload the current cookbook - the current cookbook being that which is in the current working
|
57
|
+
directory. The current version of the cookbook will determine if this upload should be frozen
|
58
|
+
or not. If it is a dev version (ie. a patch release), then the uploaded cookbook is not
|
59
|
+
frozen.
|
60
|
+
LONGDESC
|
61
|
+
def upload
|
62
|
+
say "Uploading #{cookbook.type} Cookbook: #{cookbook}"
|
63
|
+
begin
|
64
|
+
cookbook.upload
|
65
|
+
rescue Ridley::Errors::FrozenCookbook => e
|
66
|
+
say e, :red
|
67
|
+
exit(1)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
desc 'update [COOKBOOKS]', 'Update the cookbooks (and dependencies) specified in the Berksfile'
|
72
|
+
def update(*cookbook_names)
|
73
|
+
cookbook.berksfile.update *cookbook_names
|
74
|
+
end
|
75
|
+
|
76
|
+
desc 'outdated [COOKBOOKS]', 'List dependencies that have new versions available that satisfy their constraints'
|
77
|
+
def outdated(*names)
|
78
|
+
outdated = cookbook.berksfile.outdated(*names)
|
79
|
+
Berkshelf.formatter.outdated(outdated)
|
80
|
+
end
|
81
|
+
|
82
|
+
desc 'apply ENVIRONMENT', 'Apply version locks from Berksfile.lock to a Chef environment'
|
83
|
+
def apply(environment_name)
|
84
|
+
unless cookbook.node_cookbook?
|
85
|
+
say "Cannot apply Non-Node Cookbooks. Run this again for a Node Cookbook", :red
|
86
|
+
exit(1)
|
87
|
+
end
|
88
|
+
|
89
|
+
lockfile = File.join(cookbook.path, Berkshelf::Lockfile::DEFAULT_FILENAME)
|
90
|
+
unless File.exist?(lockfile)
|
91
|
+
say "No lockfile found at #{lockfile}", :red
|
92
|
+
exit(1)
|
93
|
+
end
|
94
|
+
|
95
|
+
full_environment_name = "node_#{cookbook.node_name}"
|
96
|
+
full_environment_name += "_#{environment_name}" if environment_name != 'production'
|
97
|
+
|
98
|
+
say "Applying Node Cookbook #{cookbook} and its dependencies to #{environment_name} (#{full_environment_name})", :bold
|
99
|
+
|
100
|
+
if environment_name == 'production'
|
101
|
+
exit(1) unless yes?('Are you sure you wish to apply locked versions to production?', :red)
|
102
|
+
end
|
103
|
+
|
104
|
+
lockfile = Berkshelf::Lockfile.from_file(lockfile)
|
105
|
+
begin
|
106
|
+
unless lockfile.apply(full_environment_name)
|
107
|
+
error "Failed to apply locked versions"
|
108
|
+
exit(1)
|
109
|
+
end
|
110
|
+
rescue Berkshelf::EnvironmentNotFound => e
|
111
|
+
say "Unable to apply locked versions. #{e}", :red
|
112
|
+
exit(1)
|
113
|
+
end
|
114
|
+
end
|
63
115
|
|
64
116
|
desc 'version', 'Display version information'
|
65
117
|
def version
|
66
118
|
say "Cheflow v#{Cheflow::VERSION}"
|
67
119
|
end
|
68
120
|
|
121
|
+
desc 'bump', 'Bump the version, which is by default the patch version.'
|
122
|
+
long_desc <<-LONGDESC
|
123
|
+
Pass in the Semver level as the first argument to specify which level to bump.
|
124
|
+
Available levels are `major`, `minor` or `patch`.
|
125
|
+
|
126
|
+
Bump the patch version:
|
127
|
+
\x5> $ cheflow bump
|
128
|
+
|
129
|
+
Bump the major version:
|
130
|
+
\x5> $ cheflow bump major
|
131
|
+
LONGDESC
|
132
|
+
def bump(level='patch')
|
133
|
+
from = cookbook.version
|
134
|
+
major, minor, patch = from.major, from.minor, from.patch
|
135
|
+
binding.eval("#{level} = #{from.send(level)+1}")
|
136
|
+
to = "#{major}.#{minor}.#{patch}"
|
137
|
+
|
138
|
+
version_file = File.join(cookbook.path, 'VERSION')
|
139
|
+
if File.exist? version_file
|
140
|
+
File.open(version_file, 'w') { |file| file.puts to }
|
141
|
+
say "Bumped #{level} version from #{from} to #{to}", :green
|
142
|
+
else
|
143
|
+
say "The 'VERSION' file does not exist, so cannot bump the #{level} version", :red
|
144
|
+
exit(1)
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
69
148
|
desc 'info', 'Display information about the cookbook'
|
70
149
|
def info
|
71
|
-
say "#{cookbook.type.capitalize} Cookbook: #{cookbook}"
|
150
|
+
say "#{cookbook.type.capitalize} Cookbook: #{cookbook}", :bold
|
72
151
|
say cookbook.path
|
73
152
|
say
|
74
|
-
say "Environments: #{cookbook.node_environments.join("\n ")}"
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
if
|
80
|
-
say
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
153
|
+
say "Environments: #{cookbook.node_environments(true).join("\n ")}"
|
154
|
+
|
155
|
+
pv = cookbook.prod_versions
|
156
|
+
dv = cookbook.dev_versions
|
157
|
+
|
158
|
+
if dv.count > 0 || pv.count > 0
|
159
|
+
say
|
160
|
+
say 'Versions: (most recent)'
|
161
|
+
|
162
|
+
if pv.count > 0
|
163
|
+
if pv.count > 10
|
164
|
+
say " Production: #{pv[0,10].join(', ')} (...)"
|
165
|
+
else
|
166
|
+
say " Production: #{pv.join(', ')}"
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
if dv.count > 0
|
171
|
+
if dv.count > 10
|
172
|
+
say " Development: #{dv[0,10].join(', ')} (...)"
|
173
|
+
else
|
174
|
+
say " Development: #{dv.join(', ')}"
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
say
|
89
179
|
end
|
90
180
|
end
|
91
181
|
|
data/lib/cheflow/cookbook.rb
CHANGED
@@ -24,6 +24,11 @@ module Cheflow
|
|
24
24
|
@name ||= metadata.name
|
25
25
|
end
|
26
26
|
|
27
|
+
# The name of the Node cookbook without the "node_" prefix.
|
28
|
+
def node_name
|
29
|
+
@node_name ||= node_cookbook? ? name.sub(/^node_/, '') : name
|
30
|
+
end
|
31
|
+
|
27
32
|
def path
|
28
33
|
@path ||= File.dirname(berksfile.filepath)
|
29
34
|
end
|
@@ -32,7 +37,7 @@ module Cheflow
|
|
32
37
|
@type ||= if name.start_with? 'node_'
|
33
38
|
:node
|
34
39
|
else
|
35
|
-
:
|
40
|
+
:non_node
|
36
41
|
end
|
37
42
|
end
|
38
43
|
|
@@ -40,10 +45,6 @@ module Cheflow
|
|
40
45
|
type == :node
|
41
46
|
end
|
42
47
|
|
43
|
-
def application_cookbook?
|
44
|
-
type == :application
|
45
|
-
end
|
46
|
-
|
47
48
|
def node_environment_objects
|
48
49
|
@node_environment_objects ||= begin
|
49
50
|
if node_cookbook?
|
@@ -54,12 +55,14 @@ module Cheflow
|
|
54
55
|
end
|
55
56
|
end
|
56
57
|
|
57
|
-
def node_environments
|
58
|
+
def node_environments(with_versions=false)
|
58
59
|
@node_environments ||= node_environment_objects.map do |e|
|
59
60
|
env = e.name.gsub /^#{name}_/, ''
|
60
61
|
env = env == name ? 'production' : env
|
61
|
-
|
62
|
-
|
62
|
+
out = with_versions ? env.ljust(12) : env
|
63
|
+
out += " (#{e.cookbook_versions[name]})" if with_versions
|
64
|
+
out
|
65
|
+
end.compact.sort
|
63
66
|
end
|
64
67
|
|
65
68
|
def versions
|
@@ -82,6 +85,10 @@ module Cheflow
|
|
82
85
|
ridley.cookbook.find(name, version).frozen?
|
83
86
|
end
|
84
87
|
|
88
|
+
def upload
|
89
|
+
ridley.cookbook.upload path, freeze: !version.patch.odd?
|
90
|
+
end
|
91
|
+
|
85
92
|
|
86
93
|
private
|
87
94
|
|
data/lib/cheflow/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cheflow
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joel Moss
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-07-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: semverse
|
@@ -16,42 +16,42 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1.
|
19
|
+
version: '1.2'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1.
|
26
|
+
version: '1.2'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: berkshelf
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '3.
|
33
|
+
version: '3.3'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '3.
|
40
|
+
version: '3.3'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: ridley
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '4.
|
47
|
+
version: '4.2'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '4.
|
54
|
+
version: '4.2'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: ridley-connectors
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,28 +72,28 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '0.
|
75
|
+
version: '0.19'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '0.
|
82
|
+
version: '0.19'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: bundler
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '1.
|
89
|
+
version: '1.10'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '1.
|
96
|
+
version: '1.10'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: rake
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -150,8 +150,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
150
150
|
version: '0'
|
151
151
|
requirements: []
|
152
152
|
rubyforge_project:
|
153
|
-
rubygems_version: 2.4.
|
153
|
+
rubygems_version: 2.4.4
|
154
154
|
signing_key:
|
155
155
|
specification_version: 4
|
156
156
|
summary: A Cookbook-Centric workflow tool
|
157
157
|
test_files: []
|
158
|
+
has_rdoc:
|