recap 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. data/.gitignore +3 -0
  2. data/.travis.yml +4 -0
  3. data/README.md +12 -3
  4. data/Rakefile +8 -0
  5. data/Vagrantfile +61 -0
  6. data/doc/index.html +45 -26
  7. data/doc/lib/recap/bootstrap.html +42 -0
  8. data/doc/lib/recap/bundler.html +36 -19
  9. data/doc/lib/recap/capistrano_extensions.html +28 -23
  10. data/doc/lib/recap/cli.html +3 -0
  11. data/doc/lib/recap/compatibility.html +6 -3
  12. data/doc/lib/recap/deploy.html +41 -86
  13. data/doc/lib/recap/env.html +6 -1
  14. data/doc/lib/recap/foreman.html +3 -0
  15. data/doc/lib/recap/namespace.html +42 -0
  16. data/doc/lib/recap/preflight.html +12 -7
  17. data/doc/lib/recap/rails.html +3 -0
  18. data/doc/lib/recap/version.html +3 -0
  19. data/doc/lib/recap.html +42 -0
  20. data/features/bundling-gems.feature +18 -0
  21. data/features/deploying-projects.feature +21 -0
  22. data/features/managing-processes.feature +17 -0
  23. data/features/setting-environment-variables.feature +21 -0
  24. data/features/steps/capistrano_steps.rb +98 -0
  25. data/features/support/project.rb +211 -0
  26. data/features/support/server.rb +53 -0
  27. data/features/templates/gem/binary.erb +43 -0
  28. data/features/templates/gem/gemspec.erb +11 -0
  29. data/features/templates/project/Capfile +21 -0
  30. data/features/templates/project/Capfile.erb +21 -0
  31. data/features/templates/project/Gemfile.erb +7 -0
  32. data/features/templates/project/Procfile.erb +1 -0
  33. data/index.rb +26 -17
  34. data/lib/recap/bootstrap.rb +47 -0
  35. data/lib/recap/bundler.rb +31 -21
  36. data/lib/recap/capistrano_extensions.rb +11 -9
  37. data/lib/recap/cli.rb +1 -1
  38. data/lib/recap/compatibility.rb +3 -3
  39. data/lib/recap/deploy.rb +45 -57
  40. data/lib/recap/env.rb +30 -26
  41. data/lib/recap/environment.rb +54 -0
  42. data/lib/recap/foreman.rb +28 -9
  43. data/lib/recap/namespace.rb +37 -0
  44. data/lib/recap/preflight.rb +10 -8
  45. data/lib/recap/rails.rb +6 -4
  46. data/lib/recap/ruby.rb +3 -0
  47. data/lib/recap/static.rb +1 -0
  48. data/lib/recap/version.rb +1 -1
  49. data/lib/recap.rb +12 -0
  50. data/recap.gemspec +8 -4
  51. data/spec/models/environment_spec.rb +143 -0
  52. data/spec/spec_helper.rb +7 -0
  53. data/spec/tasks/bootstrap_spec.rb +34 -0
  54. data/spec/tasks/bundler_spec.rb +126 -0
  55. data/spec/tasks/deploy_spec.rb +209 -0
  56. data/spec/tasks/env_spec.rb +38 -0
  57. data/spec/tasks/foreman_spec.rb +154 -0
  58. data/test-vm/manifests/base.pp +17 -0
  59. data/test-vm/share/.gitkeep +0 -0
  60. metadata +138 -19
  61. /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.1.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: 2011-09-24 00:00:00.000000000Z
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: &70207555688740 !ruby/object:Gem::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.6.0
21
+ version: 2.9.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70207555688740
24
+ version_requirements: *70142953253620
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: thor
27
- requirement: &70207555688320 !ruby/object:Gem::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: *70207555688320
35
+ version_requirements: *70142953251580
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
- requirement: &70207555687780 !ruby/object:Gem::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: *70207555687780
46
+ version_requirements: *70142953246460
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rocco
49
- requirement: &70207555687280 !ruby/object:Gem::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: *70207555687280
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
- - tomafro-deploy
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
- - bin/tomafro-deploy
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
- homepage: https://github.com/freerange/recap
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: -3210950917994093421
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: -3210950917994093421
218
+ hash: 52580034852729211
120
219
  requirements: []
121
- rubyforge_project: recap
122
- rubygems_version: 1.8.7
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