recap 0.1.0 → 0.2.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.
- data/.gitignore +3 -0
- data/.travis.yml +4 -0
- data/README.md +12 -3
- data/Rakefile +8 -0
- data/Vagrantfile +61 -0
- data/doc/index.html +45 -26
- data/doc/lib/recap/bootstrap.html +42 -0
- data/doc/lib/recap/bundler.html +36 -19
- data/doc/lib/recap/capistrano_extensions.html +28 -23
- data/doc/lib/recap/cli.html +3 -0
- data/doc/lib/recap/compatibility.html +6 -3
- data/doc/lib/recap/deploy.html +41 -86
- data/doc/lib/recap/env.html +6 -1
- data/doc/lib/recap/foreman.html +3 -0
- data/doc/lib/recap/namespace.html +42 -0
- data/doc/lib/recap/preflight.html +12 -7
- data/doc/lib/recap/rails.html +3 -0
- data/doc/lib/recap/version.html +3 -0
- data/doc/lib/recap.html +42 -0
- data/features/bundling-gems.feature +18 -0
- data/features/deploying-projects.feature +21 -0
- data/features/managing-processes.feature +17 -0
- data/features/setting-environment-variables.feature +21 -0
- data/features/steps/capistrano_steps.rb +98 -0
- data/features/support/project.rb +211 -0
- data/features/support/server.rb +53 -0
- data/features/templates/gem/binary.erb +43 -0
- data/features/templates/gem/gemspec.erb +11 -0
- data/features/templates/project/Capfile +21 -0
- data/features/templates/project/Capfile.erb +21 -0
- data/features/templates/project/Gemfile.erb +7 -0
- data/features/templates/project/Procfile.erb +1 -0
- data/index.rb +26 -17
- data/lib/recap/bootstrap.rb +47 -0
- data/lib/recap/bundler.rb +31 -21
- data/lib/recap/capistrano_extensions.rb +11 -9
- data/lib/recap/cli.rb +1 -1
- data/lib/recap/compatibility.rb +3 -3
- data/lib/recap/deploy.rb +45 -57
- data/lib/recap/env.rb +30 -26
- data/lib/recap/environment.rb +54 -0
- data/lib/recap/foreman.rb +28 -9
- data/lib/recap/namespace.rb +37 -0
- data/lib/recap/preflight.rb +10 -8
- data/lib/recap/rails.rb +6 -4
- data/lib/recap/ruby.rb +3 -0
- data/lib/recap/static.rb +1 -0
- data/lib/recap/version.rb +1 -1
- data/lib/recap.rb +12 -0
- data/recap.gemspec +8 -4
- data/spec/models/environment_spec.rb +143 -0
- data/spec/spec_helper.rb +7 -0
- data/spec/tasks/bootstrap_spec.rb +34 -0
- data/spec/tasks/bundler_spec.rb +126 -0
- data/spec/tasks/deploy_spec.rb +209 -0
- data/spec/tasks/env_spec.rb +38 -0
- data/spec/tasks/foreman_spec.rb +154 -0
- data/test-vm/manifests/base.pp +17 -0
- data/test-vm/share/.gitkeep +0 -0
- metadata +138 -19
- /data/bin/{tomafro-deploy → recap} +0 -0
@@ -0,0 +1,209 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Recap::Deploy do
|
4
|
+
let :config do
|
5
|
+
Capistrano::Configuration.new
|
6
|
+
end
|
7
|
+
|
8
|
+
let :namespace do
|
9
|
+
config.deploy
|
10
|
+
end
|
11
|
+
|
12
|
+
before do
|
13
|
+
Recap::Deploy.load_into(config)
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'configures capistrano to use ssh key forwarding' do
|
17
|
+
config.ssh_options[:forward_agent].should be_true
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'configures capistrano to use a pty session when running commands' do
|
21
|
+
config.default_run_options[:pty].should be_true
|
22
|
+
end
|
23
|
+
|
24
|
+
describe 'Settings' do
|
25
|
+
describe '#application' do
|
26
|
+
it 'exits if accessed before being set' do
|
27
|
+
lambda do
|
28
|
+
config.application
|
29
|
+
end.should raise_error(SystemExit)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe '#repository' do
|
34
|
+
it 'exits if accessed before being set' do
|
35
|
+
lambda do
|
36
|
+
config.repository
|
37
|
+
end.should raise_error(SystemExit)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe '#application_user' do
|
42
|
+
it 'defaults to the name of the application' do
|
43
|
+
config.set :application, 'rabbitfoot'
|
44
|
+
config.application_user.should eql('rabbitfoot')
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe '#application_group' do
|
49
|
+
it 'defaults to the name of the application user' do
|
50
|
+
config.set :application_user, 'rabbitfoot'
|
51
|
+
config.application_group.should eql('rabbitfoot')
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe '#branch' do
|
56
|
+
it 'defaults to master' do
|
57
|
+
config.branch.should eql('master')
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe '#deploy_to' do
|
62
|
+
it 'defaults to a folder within the application user home directory' do
|
63
|
+
config.set :application, 'hare'
|
64
|
+
config.set :application_user, 'rabbitfoot'
|
65
|
+
config.deploy_to.should eql('/home/rabbitfoot/apps/hare')
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe '#release_tag' do
|
70
|
+
it 'defaults to the current timestamp' do
|
71
|
+
now = Time.now
|
72
|
+
Time.stubs(:now).returns(now)
|
73
|
+
config.release_tag.should eql(Time.now.utc.strftime("%Y%m%d%H%M%S"))
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
describe '#latest_tag' do
|
78
|
+
it 'memoizes call to latest_tag_from_repository' do
|
79
|
+
namespace.stubs(:latest_tag_from_repository).returns('abc123').then.returns('something-else')
|
80
|
+
config.latest_tag.should eql('abc123')
|
81
|
+
config.latest_tag.should eql('abc123')
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
describe 'Tasks' do
|
87
|
+
let :application do
|
88
|
+
'romulus'
|
89
|
+
end
|
90
|
+
|
91
|
+
let :repository do
|
92
|
+
'git@github.com/example/romulus.git'
|
93
|
+
end
|
94
|
+
|
95
|
+
let :deploy_to do
|
96
|
+
'/path/to/deploy/romulus/into'
|
97
|
+
end
|
98
|
+
|
99
|
+
before do
|
100
|
+
config.set :application, application
|
101
|
+
config.set :repository, repository
|
102
|
+
config.set :deploy_to, deploy_to
|
103
|
+
end
|
104
|
+
|
105
|
+
describe 'deploy:setup' do
|
106
|
+
it 'runs deploy:clone_code task' do
|
107
|
+
namespace.expects(:clone_code)
|
108
|
+
config.find_and_execute_task('deploy:setup')
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'calls deploy:clone_code task within a transaction' do
|
112
|
+
namespace.stubs(:transaction)
|
113
|
+
namespace.expects(:clone_code).never
|
114
|
+
config.find_and_execute_task('deploy:setup')
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
describe 'deploy:clone_code' do
|
119
|
+
it 'creates deploy_to dir, ensures it\'s group writable, then clones the repository into it' do
|
120
|
+
namespace.expects(:as_app).with('mkdir -p ' + deploy_to, '~').in_sequence
|
121
|
+
namespace.expects(:as_app).with('chmod g+rw ' + deploy_to).in_sequence
|
122
|
+
namespace.expects(:git).with('clone ' + repository + ' .').in_sequence
|
123
|
+
config.find_and_execute_task('deploy:clone_code')
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
describe 'deploy' do
|
128
|
+
it 'runs deploy:update_code, deploy:tag and then deploy:restart tasks' do
|
129
|
+
namespace.expects(:update_code).in_sequence
|
130
|
+
namespace.expects(:tag).in_sequence
|
131
|
+
namespace.expects(:restart).in_sequence
|
132
|
+
config.find_and_execute_task('deploy')
|
133
|
+
end
|
134
|
+
|
135
|
+
it 'calls deploy:update_code task within a transaction' do
|
136
|
+
namespace.stubs(:transaction)
|
137
|
+
namespace.expects(:update_code).never
|
138
|
+
config.find_and_execute_task('deploy')
|
139
|
+
end
|
140
|
+
|
141
|
+
it 'calls deploy:tag task within a transaction' do
|
142
|
+
namespace.stubs(:transaction)
|
143
|
+
namespace.expects(:tag).never
|
144
|
+
config.find_and_execute_task('deploy')
|
145
|
+
end
|
146
|
+
|
147
|
+
it 'calls restart outside the transaction' do
|
148
|
+
namespace.stubs(:transaction)
|
149
|
+
namespace.expects(:restart)
|
150
|
+
config.find_and_execute_task('deploy')
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
describe 'deploy:update_code' do
|
155
|
+
it 'fetches latest changes, then resets to repository branch' do
|
156
|
+
config.set :branch, 'release-branch'
|
157
|
+
namespace.expects(:git).with('fetch').in_sequence
|
158
|
+
namespace.expects(:git).with('reset --hard origin/release-branch').in_sequence
|
159
|
+
namespace.find_and_execute_task('deploy:update_code')
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
describe 'deploy:tag' do
|
164
|
+
before do
|
165
|
+
config.set :release_tag, 'abcd1234'
|
166
|
+
config.set :release_message, 'Released into the wild'
|
167
|
+
end
|
168
|
+
|
169
|
+
it 'tags code with the release tag and release message' do
|
170
|
+
namespace.expects(:git).with('tag abcd1234 -m \'Released into the wild\'')
|
171
|
+
namespace.find_and_execute_task('deploy:tag')
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
describe 'deploy:rollback' do
|
176
|
+
it 'deletes latest tag, resets to previous tag and restarts' do
|
177
|
+
config.stubs(:latest_tag).returns('release-2')
|
178
|
+
config.stubs(:latest_tag_from_repository).returns('release-1')
|
179
|
+
namespace.expects(:git).with('tag -d release-2').in_sequence
|
180
|
+
namespace.expects(:git).with('reset --hard release-1').in_sequence
|
181
|
+
namespace.expects(:restart).in_sequence
|
182
|
+
namespace.find_and_execute_task('deploy:rollback')
|
183
|
+
end
|
184
|
+
|
185
|
+
it 'aborts if no tag has been deployed' do
|
186
|
+
config.stubs(:latest_tag).returns(nil)
|
187
|
+
lambda do
|
188
|
+
namespace.find_and_execute_task('deploy:rollback')
|
189
|
+
end.should raise_error(SystemExit, 'This app is not currently deployed')
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
describe 'deploy:restart' do
|
194
|
+
it 'does nothing (but can be overidden by other recipes)' do
|
195
|
+
namespace.expects(:run).never
|
196
|
+
namespace.expects(:sudo).never
|
197
|
+
namespace.find_and_execute_task('deploy:restart')
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
describe 'deploy:destroy' do
|
202
|
+
it 'removes all files from the deployment folder' do
|
203
|
+
config.set :deploy_to, 'path/to/deploy/app'
|
204
|
+
config.expects(:sudo).with('rm -rf path/to/deploy/app')
|
205
|
+
config.find_and_execute_task('deploy:destroy')
|
206
|
+
end
|
207
|
+
end
|
208
|
+
end
|
209
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Recap::Env do
|
4
|
+
let :config do
|
5
|
+
Capistrano::Configuration.new
|
6
|
+
end
|
7
|
+
|
8
|
+
let :namespace do
|
9
|
+
config.env
|
10
|
+
end
|
11
|
+
|
12
|
+
before do
|
13
|
+
Recap::Env.load_into(config)
|
14
|
+
end
|
15
|
+
|
16
|
+
describe 'Settings' do
|
17
|
+
describe '#environment_file' do
|
18
|
+
it 'defaults to /home/ + application_user + /.env' do
|
19
|
+
config.set :application_user, 'marigold'
|
20
|
+
config.environment_file.should eql('/home/marigold/.env')
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe 'Tasks' do
|
26
|
+
describe 'env' do
|
27
|
+
pending 'Tests not written'
|
28
|
+
end
|
29
|
+
|
30
|
+
describe 'env:set' do
|
31
|
+
pending 'Tests not written'
|
32
|
+
end
|
33
|
+
|
34
|
+
describe 'env:edit' do
|
35
|
+
pending 'Tests not written'
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,154 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Recap::Foreman do
|
4
|
+
let :config do
|
5
|
+
Capistrano::Configuration.new
|
6
|
+
end
|
7
|
+
|
8
|
+
let :namespace do
|
9
|
+
config.foreman
|
10
|
+
end
|
11
|
+
|
12
|
+
let :deploy_to do
|
13
|
+
'path/to/deploy/to'
|
14
|
+
end
|
15
|
+
|
16
|
+
before do
|
17
|
+
config.set :application, 'example-app'
|
18
|
+
config.set :application_user, 'example-app-user'
|
19
|
+
config.set :deploy_to, deploy_to
|
20
|
+
Recap::Foreman.load_into(config)
|
21
|
+
end
|
22
|
+
|
23
|
+
describe 'Settings' do
|
24
|
+
describe '#procfile' do
|
25
|
+
it 'defaults to deploy_to + /Procfile' do
|
26
|
+
config.procfile.should eql(deploy_to + '/Procfile')
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe '#foreman_export_format' do
|
31
|
+
it 'defaults to upstart' do
|
32
|
+
config.foreman_export_format.should eql('upstart')
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe '#foreman_export_location' do
|
37
|
+
it 'defaults to /etc/init' do
|
38
|
+
config.foreman_export_location.should eql('/etc/init')
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe '#foreman_tmp_location' do
|
43
|
+
it 'defaults to deploy_to + /tmp/foreman' do
|
44
|
+
config.foreman_tmp_location.should eql(deploy_to + '/tmp/foreman')
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe '#foreman_export_command' do
|
49
|
+
before :each do
|
50
|
+
config.set :foreman_export_format, '<export-format>'
|
51
|
+
config.set :foreman_tmp_location, '<tmp-location>'
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'starts by exporting to the tmp location in the export format' do
|
55
|
+
config.foreman_export_command.index('./bin/foreman export <export-format> <tmp-location>').should eql(0)
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'includes --procfile option pointing to procfile' do
|
59
|
+
config.set :procfile, '/custom/procfile/location'
|
60
|
+
config.foreman_export_command.index("--procfile /custom/procfile/location").should_not be_nil
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'includes --app option naming application' do
|
64
|
+
config.set :application, 'my-application'
|
65
|
+
config.foreman_export_command.index("--app my-application").should_not be_nil
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'includes --user option pointing to procfile' do
|
69
|
+
config.set :application_user, 'my-application-user'
|
70
|
+
config.foreman_export_command.index("--user my-application-user").should_not be_nil
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'includes --log option pointing to log location' do
|
74
|
+
config.set :deploy_to, '/custom/deploy/location'
|
75
|
+
config.foreman_export_command.index("--log /custom/deploy/location/log").should_not be_nil
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe 'Tasks' do
|
81
|
+
describe 'foreman:export:if_changed' do
|
82
|
+
it 'calls foreman:export if the Procfile has changed' do
|
83
|
+
namespace.stubs(:deployed_file_changed?).with(config.procfile).returns(true)
|
84
|
+
namespace.export.expects(:default)
|
85
|
+
config.find_and_execute_task('foreman:export:if_changed')
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'skips foreman:export if the Procfile has not changed' do
|
89
|
+
namespace.stubs(:deployed_file_changed?).with(config.procfile).returns(false)
|
90
|
+
namespace.export.expects(:default).never
|
91
|
+
config.find_and_execute_task('foreman:export:if_changed')
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
describe 'foreman:export' do
|
96
|
+
it 'runs the foreman export command, then moves the exported files to the export location' do
|
97
|
+
namespace.stubs(:deployed_file_exists?).with(config.procfile).returns(true)
|
98
|
+
namespace.expects(:as_app).with(config.foreman_export_command).in_sequence
|
99
|
+
namespace.expects(:sudo).with("rm -f #{config.foreman_export_location}/#{config.application}*").in_sequence
|
100
|
+
namespace.expects(:sudo).with("cp #{config.foreman_tmp_location}/* #{config.foreman_export_location}").in_sequence
|
101
|
+
config.find_and_execute_task('foreman:export')
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'does nothing if no Procfile exists' do
|
105
|
+
namespace.stubs(:deployed_file_exists?).with(config.procfile).returns(false)
|
106
|
+
namespace.expects(:as_app).never
|
107
|
+
namespace.expects(:sudo).never
|
108
|
+
config.find_and_execute_task('foreman:export')
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
describe 'foreman:start' do
|
113
|
+
it 'starts the application' do
|
114
|
+
namespace.stubs(:deployed_file_exists?).with(config.procfile).returns(true)
|
115
|
+
namespace.expects(:sudo).with('start example-app')
|
116
|
+
config.find_and_execute_task('foreman:start')
|
117
|
+
end
|
118
|
+
|
119
|
+
it 'does nothing if no Procfile exists' do
|
120
|
+
namespace.stubs(:deployed_file_exists?).with(config.procfile).returns(false)
|
121
|
+
namespace.expects(:sudo).never
|
122
|
+
config.find_and_execute_task('foreman:start')
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
describe 'foreman:stop' do
|
127
|
+
it 'starts the application' do
|
128
|
+
namespace.stubs(:deployed_file_exists?).with(config.procfile).returns(true)
|
129
|
+
namespace.expects(:sudo).with('stop example-app')
|
130
|
+
config.find_and_execute_task('foreman:stop')
|
131
|
+
end
|
132
|
+
|
133
|
+
it 'does nothing if no Procfile exists' do
|
134
|
+
namespace.stubs(:deployed_file_exists?).with(config.procfile).returns(false)
|
135
|
+
namespace.expects(:sudo).never
|
136
|
+
config.find_and_execute_task('foreman:stop')
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
describe 'foreman:restart' do
|
141
|
+
it 'restart or starts the application' do
|
142
|
+
namespace.stubs(:deployed_file_exists?).with(config.procfile).returns(true)
|
143
|
+
namespace.expects(:sudo).with('restart example-app || sudo start example-app')
|
144
|
+
config.find_and_execute_task('foreman:restart')
|
145
|
+
end
|
146
|
+
|
147
|
+
it 'does nothing if no Procfile exists' do
|
148
|
+
namespace.stubs(:deployed_file_exists?).with(config.procfile).returns(false)
|
149
|
+
namespace.expects(:sudo).never
|
150
|
+
config.find_and_execute_task('foreman:restart')
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
group { 'puppet':
|
2
|
+
ensure => 'present'
|
3
|
+
}
|
4
|
+
|
5
|
+
package { ['git-core', 'curl']:
|
6
|
+
ensure => present
|
7
|
+
}
|
8
|
+
|
9
|
+
package { 'bundler':
|
10
|
+
provider => gem,
|
11
|
+
ensure => '1.1.rc.7'
|
12
|
+
}
|
13
|
+
|
14
|
+
package { 'foreman':
|
15
|
+
provider => gem,
|
16
|
+
ensure => present
|
17
|
+
}
|
File without changes
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: recap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,22 +9,22 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2012-03-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: capistrano
|
16
|
-
requirement: &
|
16
|
+
requirement: &70142953253620 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 2.
|
21
|
+
version: 2.9.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70142953253620
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: thor
|
27
|
-
requirement: &
|
27
|
+
requirement: &70142953251580 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70142953251580
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rake
|
38
|
-
requirement: &
|
38
|
+
requirement: &70142953246460 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 0.9.2
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70142953246460
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rocco
|
49
|
-
requirement: &
|
49
|
+
requirement: &70142953244940 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,22 +54,92 @@ dependencies:
|
|
54
54
|
version: 0.8.1
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70142953244940
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: rspec
|
60
|
+
requirement: &70142953242500 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ~>
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: 2.7.0
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *70142953242500
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: mocha
|
71
|
+
requirement: &70142953241400 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ~>
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 0.10.0
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *70142953241400
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: vagrant
|
82
|
+
requirement: &70142953239580 !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
84
|
+
requirements:
|
85
|
+
- - ~>
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: 0.9.7
|
88
|
+
type: :development
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: *70142953239580
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: sahara
|
93
|
+
requirement: &70142953235920 !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ~>
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: 0.0.10
|
99
|
+
type: :development
|
100
|
+
prerelease: false
|
101
|
+
version_requirements: *70142953235920
|
102
|
+
- !ruby/object:Gem::Dependency
|
103
|
+
name: cucumber
|
104
|
+
requirement: &70142953235380 !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ~>
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 1.1.4
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: *70142953235380
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: faker
|
115
|
+
requirement: &70142953234480 !ruby/object:Gem::Requirement
|
116
|
+
none: false
|
117
|
+
requirements:
|
118
|
+
- - ~>
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: 1.0.1
|
121
|
+
type: :development
|
122
|
+
prerelease: false
|
123
|
+
version_requirements: *70142953234480
|
58
124
|
description: GIT based deployment recipes for Capistrano
|
59
125
|
email:
|
60
126
|
- tom@popdog.net
|
61
127
|
executables:
|
62
|
-
-
|
128
|
+
- recap
|
63
129
|
extensions: []
|
64
130
|
extra_rdoc_files: []
|
65
131
|
files:
|
66
132
|
- .gitignore
|
133
|
+
- .travis.yml
|
67
134
|
- Gemfile
|
68
135
|
- LICENSE
|
69
136
|
- README.md
|
70
137
|
- Rakefile
|
71
|
-
-
|
138
|
+
- Vagrantfile
|
139
|
+
- bin/recap
|
72
140
|
- doc/index.html
|
141
|
+
- doc/lib/recap.html
|
142
|
+
- doc/lib/recap/bootstrap.html
|
73
143
|
- doc/lib/recap/bundler.html
|
74
144
|
- doc/lib/recap/capistrano_extensions.html
|
75
145
|
- doc/lib/recap/cli.html
|
@@ -77,10 +147,26 @@ files:
|
|
77
147
|
- doc/lib/recap/deploy.html
|
78
148
|
- doc/lib/recap/env.html
|
79
149
|
- doc/lib/recap/foreman.html
|
150
|
+
- doc/lib/recap/namespace.html
|
80
151
|
- doc/lib/recap/preflight.html
|
81
152
|
- doc/lib/recap/rails.html
|
82
153
|
- doc/lib/recap/version.html
|
154
|
+
- features/bundling-gems.feature
|
155
|
+
- features/deploying-projects.feature
|
156
|
+
- features/managing-processes.feature
|
157
|
+
- features/setting-environment-variables.feature
|
158
|
+
- features/steps/capistrano_steps.rb
|
159
|
+
- features/support/project.rb
|
160
|
+
- features/support/server.rb
|
161
|
+
- features/templates/gem/binary.erb
|
162
|
+
- features/templates/gem/gemspec.erb
|
163
|
+
- features/templates/project/Capfile
|
164
|
+
- features/templates/project/Capfile.erb
|
165
|
+
- features/templates/project/Gemfile.erb
|
166
|
+
- features/templates/project/Procfile.erb
|
83
167
|
- index.rb
|
168
|
+
- lib/recap.rb
|
169
|
+
- lib/recap/bootstrap.rb
|
84
170
|
- lib/recap/bundler.rb
|
85
171
|
- lib/recap/capistrano_extensions.rb
|
86
172
|
- lib/recap/cli.rb
|
@@ -88,12 +174,25 @@ files:
|
|
88
174
|
- lib/recap/deploy.rb
|
89
175
|
- lib/recap/deploy/templates/Capfile.erb
|
90
176
|
- lib/recap/env.rb
|
177
|
+
- lib/recap/environment.rb
|
91
178
|
- lib/recap/foreman.rb
|
179
|
+
- lib/recap/namespace.rb
|
92
180
|
- lib/recap/preflight.rb
|
93
181
|
- lib/recap/rails.rb
|
182
|
+
- lib/recap/ruby.rb
|
183
|
+
- lib/recap/static.rb
|
94
184
|
- lib/recap/version.rb
|
95
185
|
- recap.gemspec
|
96
|
-
|
186
|
+
- spec/models/environment_spec.rb
|
187
|
+
- spec/spec_helper.rb
|
188
|
+
- spec/tasks/bootstrap_spec.rb
|
189
|
+
- spec/tasks/bundler_spec.rb
|
190
|
+
- spec/tasks/deploy_spec.rb
|
191
|
+
- spec/tasks/env_spec.rb
|
192
|
+
- spec/tasks/foreman_spec.rb
|
193
|
+
- test-vm/manifests/base.pp
|
194
|
+
- test-vm/share/.gitkeep
|
195
|
+
homepage: http://code.gofreerange.com/recap
|
97
196
|
licenses: []
|
98
197
|
post_install_message:
|
99
198
|
rdoc_options: []
|
@@ -107,7 +206,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
107
206
|
version: '0'
|
108
207
|
segments:
|
109
208
|
- 0
|
110
|
-
hash:
|
209
|
+
hash: 52580034852729211
|
111
210
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
112
211
|
none: false
|
113
212
|
requirements:
|
@@ -116,11 +215,31 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
116
215
|
version: '0'
|
117
216
|
segments:
|
118
217
|
- 0
|
119
|
-
hash:
|
218
|
+
hash: 52580034852729211
|
120
219
|
requirements: []
|
121
|
-
rubyforge_project:
|
122
|
-
rubygems_version: 1.8.
|
220
|
+
rubyforge_project:
|
221
|
+
rubygems_version: 1.8.11
|
123
222
|
signing_key:
|
124
223
|
specification_version: 3
|
125
224
|
summary: GIT based deployment recipes for Capistrano
|
126
|
-
test_files:
|
225
|
+
test_files:
|
226
|
+
- features/bundling-gems.feature
|
227
|
+
- features/deploying-projects.feature
|
228
|
+
- features/managing-processes.feature
|
229
|
+
- features/setting-environment-variables.feature
|
230
|
+
- features/steps/capistrano_steps.rb
|
231
|
+
- features/support/project.rb
|
232
|
+
- features/support/server.rb
|
233
|
+
- features/templates/gem/binary.erb
|
234
|
+
- features/templates/gem/gemspec.erb
|
235
|
+
- features/templates/project/Capfile
|
236
|
+
- features/templates/project/Capfile.erb
|
237
|
+
- features/templates/project/Gemfile.erb
|
238
|
+
- features/templates/project/Procfile.erb
|
239
|
+
- spec/models/environment_spec.rb
|
240
|
+
- spec/spec_helper.rb
|
241
|
+
- spec/tasks/bootstrap_spec.rb
|
242
|
+
- spec/tasks/bundler_spec.rb
|
243
|
+
- spec/tasks/deploy_spec.rb
|
244
|
+
- spec/tasks/env_spec.rb
|
245
|
+
- spec/tasks/foreman_spec.rb
|
File without changes
|