capsulecd 1.0.1 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +42 -14
- data/lib/capsulecd/base/common/validation_utils.rb +3 -1
- data/lib/capsulecd/chef/chef_engine.rb +0 -1
- data/lib/capsulecd/javascript/javascript_engine.rb +0 -1
- data/lib/capsulecd/node/node_engine.rb +0 -1
- data/lib/capsulecd/python/python_engine.rb +0 -1
- data/lib/capsulecd/version.rb +1 -1
- data/spec/lib/capsulecd/base/common/validation_utils_spec.rb +43 -0
- data/spec/lib/capsulecd/base/runner/default_spec.rb +62 -0
- data/spec/lib/capsulecd/chef/chef_engine_spec.rb +5 -0
- data/spec/lib/capsulecd/python/python_engine_spec.rb +3 -0
- data/spec/lib/capsulecd/ruby/ruby_engine_spec.rb +5 -1
- data/spec/lib/capsulecd/ruby/ruby_helper_spec.rb +40 -0
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 857e2ca315fe61eebf22039ea107b16caffa8888
|
4
|
+
data.tar.gz: 6638d4eaa9868fcbb61640d9c3f4bb099c02bac2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8e21df43463a02d533ac8d442437ec83dffe036536b288990d9d4911dcd12a6b302a4c59b0cead71a0b4fb9482587c5ce1b13cd7bf91d04f945e382f2d8037b8
|
7
|
+
data.tar.gz: a523f9636a72970f6f83e92590f2f7c1c3274e91280c64c769a746604d0355a78589a40ed8cb974bc303e52e0fe4b2c60eaebba4a13235599060dd11aa9a1af3
|
data/README.md
CHANGED
@@ -3,13 +3,13 @@
|
|
3
3
|
[![Circle CI](https://circleci.com/gh/AnalogJ/capsulecd.svg?style=shield)](https://circleci.com/gh/AnalogJ/capsulecd)
|
4
4
|
[![Coverage Status](https://coveralls.io/repos/github/AnalogJ/capsulecd/badge.svg)](https://coveralls.io/github/AnalogJ/capsulecd)
|
5
5
|
[![GitHub license](https://img.shields.io/github/license/AnalogJ/capsulecd.svg)](https://github.com/AnalogJ/capsulecd/blob/master/LICENSE)
|
6
|
-
[![
|
6
|
+
[![Gem](https://img.shields.io/gem/dt/capsulecd.svg)](https://rubygems.org/gems/capsulecd)
|
7
|
+
[![Gem](https://img.shields.io/gem/v/capsulecd.svg)](https://rubygems.org/gems/capsulecd)
|
8
|
+
[![Docker Pulls](https://img.shields.io/docker/pulls/analogj/capsulecd.svg)](https://hub.docker.com/r/analogj/capsulecd)
|
9
|
+
[![Flattr this git repo](https://button.flattr.com/flattr-badge-large.png)](https://flattr.com/submit/auto?fid=jexon1&url=https%3A%2F%2Fgithub.com%2FAnalogJ%2Fcapsulecd&title=CapsuleCD&language=Ruby&tags=github&category=software)
|
7
10
|
|
8
11
|
<!--
|
9
|
-
[![Gem](https://img.shields.io/gem/dt/capsulecd.svg)]()
|
10
|
-
[![Gem](https://img.shields.io/gem/v/capsulecd.svg)]()
|
11
12
|
[![Gemnasium](https://img.shields.io/gemnasium/analogj/capsulecd.svg)]()
|
12
|
-
[![Docker Pulls](https://img.shields.io/docker/pulls/analogj/capsulecd.svg)]()
|
13
13
|
-->
|
14
14
|
|
15
15
|
CapsuleCD is a generic Continuous Delivery pipeline for versioned artifacts and libraries written in any language.
|
@@ -57,16 +57,16 @@ It automates away all the common steps required when creating a new version of y
|
|
57
57
|
At first glance, it seems simple to publish a new library version. Just bump the version number and publish, right?
|
58
58
|
Well, not always:
|
59
59
|
|
60
|
-
- If you're library includes a Gemfile.lock, Berksfile.lock or other
|
61
|
-
- Everyone runs their library unit tests before creating a new release, but
|
60
|
+
- If you're library includes a Gemfile.lock, Berksfile.lock or other common lock files, you'll need to regenerate them as the old version number is embedded inside.
|
61
|
+
- Everyone runs their library unit tests before creating a new release (right?!), but what about validating that your [library dependencies exist](http://www.theregister.co.uk/2016/03/23/npm_left_pad_chaos/) (maybe in your Company's private repo)?
|
62
62
|
- How about linting your source, to ensure that it follows common/team conventions?
|
63
|
-
- Who owns the gem? Is there one developer who has the credentials to push to RubyGems.org? Are they still on your team?
|
63
|
+
- Who owns the gem? Is there one developer who has the credentials to push to RubyGems.org? Are they still on your team/on vacation?
|
64
64
|
- Did you remember to tag your source when the new version was created (making it easy to determine what's changed between versions?)
|
65
65
|
- Did you update your changelog?
|
66
66
|
|
67
67
|
CapsuleCD handles all of that (and more!) for you. It pretty much guarantees that your library will have proper and consistent releases every time.
|
68
|
-
CapsuleCD is well structured and fully tested, unlike the release scripts you've manually cobbled together for each library. It can be customized as needed without rewriting from scratch.
|
69
|
-
The best part is that CapsuleCD uses CapsuleCD to automate its releases. We dogfood it so we're the first ones to find any issues with a new release.
|
68
|
+
CapsuleCD is well structured and fully tested, unlike the release scripts you've manually cobbled together for each library and language. It can be customized as needed without rewriting from scratch.
|
69
|
+
The best part is that CapsuleCD uses CapsuleCD to automate its releases. We [dogfood](https://en.wikipedia.org/wiki/Eating_your_own_dog_food) it so we're the first ones to find any issues with a new release.
|
70
70
|
|
71
71
|
## How do I start?
|
72
72
|
You can use CapsuleCD to automate creating a new release from a pull request __or__ from the latest code on your default branch.
|
@@ -81,7 +81,7 @@ Here's how to use __docker__ to merge a pull request to your Ruby library
|
|
81
81
|
CAPSULE_RUBYGEMS_API_KEY=ASDF12345F \
|
82
82
|
docker run AnalogJ/capsulecd:ruby capsulecd start --source github --package_type ruby
|
83
83
|
|
84
|
-
Or you could
|
84
|
+
Or you could __install__ and call CapsuleCD directly to merge a pull request to your Python library:
|
85
85
|
|
86
86
|
gem install capsulecd
|
87
87
|
CAPSULE_SOURCE_GITHUB_ACCESS_TOKEN=123456789ABCDEF \
|
@@ -96,7 +96,7 @@ Or you could install and call CapsuleCD directly to merge a pull request to your
|
|
96
96
|
TODO: add documentation on how to create a release from the master branch without a pull request. Specify the env variables required.
|
97
97
|
|
98
98
|
# Engine
|
99
|
-
Every package type is mapped to an engine class which inherits from a `BaseEngine`
|
99
|
+
Every package type is mapped to an engine class which inherits from a `BaseEngine` class, ie `PythonEngine`, `NodeEngine`, `RubyEngine` etc.
|
100
100
|
Every source type is mapped to a source module, ie `GithubSource`. When CapsuleCD starts, it initializes the specified Engine, and loads the correct Source module.
|
101
101
|
Then it begins processing your source code step by step.
|
102
102
|
|
@@ -131,7 +131,7 @@ Setting | System Config | Repo Config | Notes
|
|
131
131
|
package_type | No | No | Must be set by `--package-type` flag
|
132
132
|
source | No | No | Must be set by `--source` flag
|
133
133
|
runner | No | No | Must be set by `--runner` flag
|
134
|
-
dry_run |
|
134
|
+
dry_run | No | No | Must be set by `--[no]-dry-run` flag
|
135
135
|
source_git_parent_path | Yes | No | Specifies the location where the git repo will be cloned, defaults to tmp directory
|
136
136
|
source_github_api_endpoint | Yes | No | Specifies the Github api endpoint to use (for use with Enterprise Github)
|
137
137
|
source_github_web_endpoint | Yes | No | Specifies the Github web endpoint to use (for use with Enterprise Github)
|
@@ -169,7 +169,35 @@ source_github_web_endpoint: https://git.mycorpsubnet.example.com/v2
|
|
169
169
|
|
170
170
|
## Stage pre/post hooks and overrides
|
171
171
|
|
172
|
-
|
172
|
+
CapsuleCD is completely customizable, to the extent that you can run your own Ruby code as `pre` and `post` hooks before every step.
|
173
|
+
If that's not enough, you can also completely override the step itself, allowing you to use your own business logic.
|
174
|
+
To add a `pre`/`post` hook or override a step, just modify your config `yml` file by adding the step you want to modify, and
|
175
|
+
specify `pre`, `post` or `override` as a subkey. Then specify your multiline ruby script:
|
176
|
+
|
177
|
+
---
|
178
|
+
source_configure:
|
179
|
+
pre: |
|
180
|
+
# this is my multiline ruby script
|
181
|
+
# the pre hook script runs before the actual step (source_configure) executes
|
182
|
+
# we have access to any of the specified instance variables here.
|
183
|
+
# check the documentation for more information.
|
184
|
+
puts "override pre_source_configure"
|
185
|
+
`git clone ...`
|
186
|
+
override: |
|
187
|
+
# override scripts can be used to completely replace the built-in step script.
|
188
|
+
# to ensure that you are compatible with the capsulecd runner, please ensure that you
|
189
|
+
# populate all the correct instance variables.
|
190
|
+
# see the documentation for more information
|
191
|
+
puts "override source_configure"
|
192
|
+
post: |
|
193
|
+
# post scripts run after the step (source_configure) executes
|
194
|
+
# you can override any instance variables here, do additional cleanup or anything else you want.
|
195
|
+
puts "override post_source_configure"
|
196
|
+
build_step:
|
197
|
+
post: |
|
198
|
+
# post build step runs after the build_step runs
|
199
|
+
# within the script you have access to all instance variables and other methods defined in the engine.
|
200
|
+
puts "override post_build_step" + @source_git_local_path
|
173
201
|
|
174
202
|
# Testing
|
175
203
|
|
@@ -222,6 +250,6 @@ We use SemVer for versioning. For the versions available, see the tags on this r
|
|
222
250
|
|
223
251
|
Jason Kulatunga - Initial Development - [@AnalogJ](https://github.com/AnalogJ)
|
224
252
|
|
225
|
-
#License
|
253
|
+
# License
|
226
254
|
|
227
255
|
CapsuleCD is licensed under the MIT License - see the [LICENSE.md](https://github.com/AnalogJ/capsulecd/blob/master/LICENSE.md) file for details
|
@@ -1,9 +1,11 @@
|
|
1
1
|
require 'capsulecd'
|
2
2
|
module CapsuleCD
|
3
3
|
class ValidationUtils
|
4
|
+
# TODO: validation almost needs to be source specific (or inherit from this base function), because source methods
|
5
|
+
# may require additional attributes, while these base payload keys are required for general step functions.
|
4
6
|
def self.validate_repo_payload(repo_payload)
|
5
7
|
unless repo_payload['sha']
|
6
|
-
fail CapsuleCD::Error::SourcePayloadFormatError, 'Incorrectly formatted payload, missing "
|
8
|
+
fail CapsuleCD::Error::SourcePayloadFormatError, 'Incorrectly formatted payload, missing "sha" key'
|
7
9
|
end
|
8
10
|
unless repo_payload['ref']
|
9
11
|
fail CapsuleCD::Error::SourcePayloadFormatError, 'Incorrectly formatted payload, missing "ref" key'
|
@@ -121,7 +121,6 @@ module CapsuleCD
|
|
121
121
|
|
122
122
|
unless @config.chef_supermarket_username || @config.chef_supermarket_key
|
123
123
|
fail CapsuleCD::Error::ReleaseCredentialsMissing, 'cannot deploy cookbook to supermarket, credentials missing'
|
124
|
-
return
|
125
124
|
end
|
126
125
|
|
127
126
|
# knife is really sensitive to folder names. The cookbook name MUST match the folder name otherwise knife throws up
|
data/lib/capsulecd/version.rb
CHANGED
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'CapsuleCD::ValidationUtils' do
|
4
|
+
subject{
|
5
|
+
CapsuleCD::ValidationUtils
|
6
|
+
}
|
7
|
+
describe '#validate_repo_payload' do
|
8
|
+
let(:payload){
|
9
|
+
{
|
10
|
+
'sha' => '0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c',
|
11
|
+
'ref' => 'mybranch',
|
12
|
+
'repo' => {
|
13
|
+
'clone_url' => 'https://github.com/analogj/capsulecd.git',
|
14
|
+
'name' => 'capsulecd'
|
15
|
+
}
|
16
|
+
}
|
17
|
+
}
|
18
|
+
it 'should run successfully when parsing correctly structured payload' do
|
19
|
+
expect(subject.validate_repo_payload(payload)).to eql(nil)
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'should raise an error when payload is missing sha' do
|
23
|
+
payload.delete('sha')
|
24
|
+
expect{subject.validate_repo_payload(payload)}.to raise_error(CapsuleCD::Error::SourcePayloadFormatError)
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should raise an error when payload is missing ref' do
|
28
|
+
payload.delete('ref')
|
29
|
+
expect{subject.validate_repo_payload(payload)}.to raise_error(CapsuleCD::Error::SourcePayloadFormatError)
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'should raise an error when payload is missing clone_url' do
|
33
|
+
payload['repo'].delete('clone_url')
|
34
|
+
expect{subject.validate_repo_payload(payload)}.to raise_error(CapsuleCD::Error::SourcePayloadFormatError)
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'should raise an error when payload is missing name' do
|
38
|
+
payload['repo'].delete('name')
|
39
|
+
expect{subject.validate_repo_payload(payload)}.to raise_error(CapsuleCD::Error::SourcePayloadFormatError)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'capsulecd/base/runner/default'
|
3
|
+
|
4
|
+
describe CapsuleCD::Runner::Default do
|
5
|
+
describe '#runner_retrieve_payload' do
|
6
|
+
let(:default_runner) {
|
7
|
+
Class.new { include CapsuleCD::Runner::Default }
|
8
|
+
}
|
9
|
+
describe 'when no config.runner_pull_request is set' do
|
10
|
+
let(:config) { CapsuleCD::Configuration.new({
|
11
|
+
:runner_sha => '0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c',
|
12
|
+
:runner_branch => 'master',
|
13
|
+
:runner_clone_url => 'https://github.com/analogj/capsulecd.git',
|
14
|
+
:runner_repo_name => 'capsulecd',
|
15
|
+
:runner_repo_full_name => 'AnalogJ/capsulecd'
|
16
|
+
})
|
17
|
+
}
|
18
|
+
it 'should populate a branch release payload' do
|
19
|
+
runner = default_runner.new
|
20
|
+
runner.instance_variable_set(:@config, config)
|
21
|
+
|
22
|
+
payload = runner.runner_retrieve_payload({})
|
23
|
+
|
24
|
+
expect(runner.instance_variable_get(:@runner_is_pullrequest)).to eql(false)
|
25
|
+
expect(payload).to eql({
|
26
|
+
'head' => {
|
27
|
+
'sha' => '0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c',
|
28
|
+
'ref' => 'master',
|
29
|
+
'repo' => {
|
30
|
+
'clone_url' => 'https://github.com/analogj/capsulecd.git',
|
31
|
+
'name' => 'capsulecd',
|
32
|
+
'full_name' => 'AnalogJ/capsulecd'
|
33
|
+
}
|
34
|
+
}
|
35
|
+
})
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe 'when config.runner_pull_request is set' do
|
40
|
+
let(:config) { CapsuleCD::Configuration.new({
|
41
|
+
:runner_pull_request => '4',
|
42
|
+
})
|
43
|
+
}
|
44
|
+
let(:source_client_double) { instance_double(Octokit::Client) }
|
45
|
+
|
46
|
+
it 'should retrieve the payload from source' do
|
47
|
+
allow(source_client_double).to receive(:pull_request).and_return({:test => :payload})
|
48
|
+
|
49
|
+
runner = default_runner.new
|
50
|
+
runner.instance_variable_set(:@config, config)
|
51
|
+
runner.instance_variable_set(:@source_client, source_client_double)
|
52
|
+
|
53
|
+
payload = runner.runner_retrieve_payload({})
|
54
|
+
|
55
|
+
expect(runner.instance_variable_get(:@runner_is_pullrequest)).to eql(true)
|
56
|
+
expect(payload).to eql({:test => :payload})
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
@@ -23,6 +23,9 @@ describe 'CapsuleCD::Chef::ChefEngine', :chef do
|
|
23
23
|
end
|
24
24
|
it 'should create a Rakefile, Berksfile, .gitignore file, file and tests folder' do
|
25
25
|
FileUtils.copy_entry('spec/fixtures/chef/cookbook_analogj_test', test_directory)
|
26
|
+
FileUtils.rm(test_directory + '/Rakefile')
|
27
|
+
FileUtils.rm(test_directory + '/Gemfile')
|
28
|
+
|
26
29
|
engine.instance_variable_set(:@source_git_local_path, test_directory )
|
27
30
|
|
28
31
|
VCR.use_cassette('chef_build_step',:tag => :chef) do
|
@@ -34,6 +37,8 @@ describe 'CapsuleCD::Chef::ChefEngine', :chef do
|
|
34
37
|
File.exist?(test_directory+'/Gemfile')
|
35
38
|
|
36
39
|
end
|
40
|
+
|
41
|
+
|
37
42
|
end
|
38
43
|
end
|
39
44
|
|
@@ -23,6 +23,8 @@ describe 'CapsuleCD::Python::PythonEngine', :python do
|
|
23
23
|
end
|
24
24
|
it 'should create a VERSION file, requirements.txt file and tests folder' do
|
25
25
|
FileUtils.copy_entry('spec/fixtures/python/pip_analogj_test', test_directory)
|
26
|
+
FileUtils.rm(test_directory + '/VERSION')
|
27
|
+
FileUtils.rm(test_directory + '/tox.ini')
|
26
28
|
engine.instance_variable_set(:@source_git_local_path, test_directory)
|
27
29
|
|
28
30
|
VCR.use_cassette('pip_build_step',:tag => :ruby) do
|
@@ -30,6 +32,7 @@ describe 'CapsuleCD::Python::PythonEngine', :python do
|
|
30
32
|
end
|
31
33
|
|
32
34
|
File.exist?(test_directory+'/VERSION')
|
35
|
+
File.exist?(test_directory+'/tox.ini')
|
33
36
|
File.exist?(test_directory+'/requirements.txt')
|
34
37
|
File.exist?(test_directory+'/.gitignore')
|
35
38
|
end
|
@@ -21,8 +21,10 @@ describe 'CapsuleCD::Ruby::RubyEngine', :ruby do
|
|
21
21
|
CapsuleCD::Ruby::RubyEngine.new(source: :github,
|
22
22
|
package_type: :ruby)
|
23
23
|
end
|
24
|
-
it 'should create a .gitignore file and spec folder' do
|
24
|
+
it 'should create a Gemfile, Rakefile, .gitignore file and spec folder' do
|
25
25
|
FileUtils.copy_entry('spec/fixtures/ruby/gem_analogj_test', test_directory)
|
26
|
+
FileUtils.rm(test_directory + '/Gemfile')
|
27
|
+
FileUtils.rm(test_directory + '/Rakefile')
|
26
28
|
|
27
29
|
engine.instance_variable_set(:@source_git_local_path, test_directory)
|
28
30
|
|
@@ -31,6 +33,8 @@ describe 'CapsuleCD::Ruby::RubyEngine', :ruby do
|
|
31
33
|
end
|
32
34
|
|
33
35
|
expect(File.exist?(test_directory+'/.gitignore')).to eql(true)
|
36
|
+
expect(File.exist?(test_directory+'/Gemfile')).to eql(true)
|
37
|
+
expect(File.exist?(test_directory+'/Rakefile')).to eql(true)
|
34
38
|
end
|
35
39
|
|
36
40
|
it 'should raise an error if version.rb is missing' do
|
@@ -46,6 +46,46 @@ describe 'CapsuleCD::Ruby::RubyHelper', :ruby do
|
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
|
+
describe 'when modifying gemspec file' do
|
50
|
+
it 'should not keep old constant from version.rb file in memory' do
|
51
|
+
FileUtils.copy_entry('spec/fixtures/ruby/gem_analogj_test', test_directory)
|
52
|
+
|
53
|
+
gemspec_data = CapsuleCD::Ruby::RubyHelper.get_gemspec_data(test_directory)
|
54
|
+
expect(gemspec_data.version.to_s).to eql('0.1.3')
|
55
|
+
|
56
|
+
version_str = CapsuleCD::Ruby::RubyHelper.read_version_file(test_directory, gemspec_data.name)
|
57
|
+
next_version = CapsuleCD::Engine.new(:source => :github).send(:bump_version, SemVer.parse(gemspec_data.version.to_s))
|
58
|
+
expect(next_version.to_s).to eql('0.1.4')
|
59
|
+
|
60
|
+
new_version_str = version_str.gsub(/(VERSION\s*=\s*['"])[0-9\.]+(['"])/, "\\1#{next_version}\\2")
|
61
|
+
CapsuleCD::Ruby::RubyHelper.write_version_file(test_directory, gemspec_data.name, new_version_str)
|
62
|
+
|
63
|
+
Open3.popen3('gem build gem_analogj_test.gemspec', chdir: test_directory) do |_stdin, stdout, stderr, external|
|
64
|
+
{ stdout: stdout, stderr: stderr }. each do |name, stream_buffer|
|
65
|
+
Thread.new do
|
66
|
+
until (line = stream_buffer.gets).nil?
|
67
|
+
puts "#{name} -> #{line}"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
# wait for process
|
72
|
+
external.join
|
73
|
+
unless external.value.success?
|
74
|
+
fail CapsuleCD::Error::BuildPackageFailed, 'gem build failed. Check gemspec file and dependencies'
|
75
|
+
end
|
76
|
+
unless File.exist?(test_directory + "/#{gemspec_data.name}-#{next_version.to_s}.gem")
|
77
|
+
fail CapsuleCD::Error::BuildPackageFailed, "gem build failed. #{gemspec_data.name}-#{next_version.to_s}.gem not found"
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
updated_gemspec_data = CapsuleCD::Ruby::RubyHelper.get_gemspec_data(test_directory)
|
82
|
+
expect(updated_gemspec_data.version.to_s).to eql('0.1.4')
|
83
|
+
|
84
|
+
|
85
|
+
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
49
89
|
end
|
50
90
|
|
51
91
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capsulecd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jason Kulatunga (AnalogJ)
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-04-
|
11
|
+
date: 2016-04-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -178,8 +178,10 @@ files:
|
|
178
178
|
- spec/fixtures/vcr_cassettes/integration_ruby.yml
|
179
179
|
- spec/fixtures/vcr_cassettes/node_build_step.yml
|
180
180
|
- spec/fixtures/vcr_cassettes/pip_build_step.yml
|
181
|
+
- spec/lib/capsulecd/base/common/validation_utils_spec.rb
|
181
182
|
- spec/lib/capsulecd/base/configuration_spec.rb
|
182
183
|
- spec/lib/capsulecd/base/engine_spec.rb
|
184
|
+
- spec/lib/capsulecd/base/runner/default_spec.rb
|
183
185
|
- spec/lib/capsulecd/base/source/github_spec.rb
|
184
186
|
- spec/lib/capsulecd/base/transform_engine_spec.rb
|
185
187
|
- spec/lib/capsulecd/chef/chef_engine_spec.rb
|
@@ -211,7 +213,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
211
213
|
version: '0'
|
212
214
|
requirements: []
|
213
215
|
rubyforge_project:
|
214
|
-
rubygems_version: 2.6.
|
216
|
+
rubygems_version: 2.6.1
|
215
217
|
signing_key:
|
216
218
|
specification_version: 4
|
217
219
|
summary: CapsuleCD is a library for automating package releases (npm, cookbooks, gems,
|
@@ -268,8 +270,10 @@ test_files:
|
|
268
270
|
- spec/fixtures/vcr_cassettes/integration_ruby.yml
|
269
271
|
- spec/fixtures/vcr_cassettes/node_build_step.yml
|
270
272
|
- spec/fixtures/vcr_cassettes/pip_build_step.yml
|
273
|
+
- spec/lib/capsulecd/base/common/validation_utils_spec.rb
|
271
274
|
- spec/lib/capsulecd/base/configuration_spec.rb
|
272
275
|
- spec/lib/capsulecd/base/engine_spec.rb
|
276
|
+
- spec/lib/capsulecd/base/runner/default_spec.rb
|
273
277
|
- spec/lib/capsulecd/base/source/github_spec.rb
|
274
278
|
- spec/lib/capsulecd/base/transform_engine_spec.rb
|
275
279
|
- spec/lib/capsulecd/chef/chef_engine_spec.rb
|