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.
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