capsulecd 1.0.1 → 1.0.3
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/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
|
[](https://circleci.com/gh/AnalogJ/capsulecd)
|
4
4
|
[](https://coveralls.io/github/AnalogJ/capsulecd)
|
5
5
|
[](https://github.com/AnalogJ/capsulecd/blob/master/LICENSE)
|
6
|
-
[](https://rubygems.org/gems/capsulecd)
|
7
|
+
[](https://rubygems.org/gems/capsulecd)
|
8
|
+
[](https://hub.docker.com/r/analogj/capsulecd)
|
9
|
+
[](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
|
-
[]()
|
10
|
-
[]()
|
11
12
|
[]()
|
12
|
-
[]()
|
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
|