whisk_deploy 0.6.26

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 (177) hide show
  1. data/CHANGELOG +292 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.integration_specs +24 -0
  4. data/README.markdown +832 -0
  5. data/Rakefile +105 -0
  6. data/VERSION +1 -0
  7. data/WHY.txt +45 -0
  8. data/bin/wd +61 -0
  9. data/bin/wd_role +42 -0
  10. data/examples/deploy-configs.yml +13 -0
  11. data/examples/deploy-local.yml +4 -0
  12. data/examples/deploy-multiple-remotes.yml +26 -0
  13. data/examples/deploy-staging.yml +8 -0
  14. data/examples/deploy.rake +11 -0
  15. data/examples/deploy.yml +16 -0
  16. data/init.rb +1 -0
  17. data/install.rb +5 -0
  18. data/lib/whiskey_disk.rb +327 -0
  19. data/lib/whiskey_disk/config.rb +127 -0
  20. data/lib/whiskey_disk/config/abstract_filter.rb +19 -0
  21. data/lib/whiskey_disk/config/filter.rb +48 -0
  22. data/lib/whiskey_disk/config/filters/add_environment_name_filter.rb +11 -0
  23. data/lib/whiskey_disk/config/filters/add_project_name_filter.rb +11 -0
  24. data/lib/whiskey_disk/config/filters/check_for_duplicate_domains_filter.rb +21 -0
  25. data/lib/whiskey_disk/config/filters/convert_role_strings_to_list_filter.rb +20 -0
  26. data/lib/whiskey_disk/config/filters/default_config_target_filter.rb +12 -0
  27. data/lib/whiskey_disk/config/filters/default_domain_filter.rb +12 -0
  28. data/lib/whiskey_disk/config/filters/drop_empty_domain_roles_filter.rb +32 -0
  29. data/lib/whiskey_disk/config/filters/environment_scope_filter.rb +20 -0
  30. data/lib/whiskey_disk/config/filters/hashify_domain_entries_filter.rb +29 -0
  31. data/lib/whiskey_disk/config/filters/localize_domains_filter.rb +24 -0
  32. data/lib/whiskey_disk/config/filters/modules/scope_helper.rb +11 -0
  33. data/lib/whiskey_disk/config/filters/normalize_ssh_options_filter.rb +29 -0
  34. data/lib/whiskey_disk/config/filters/project_scope_filter.rb +34 -0
  35. data/lib/whiskey_disk/config/filters/select_project_and_environment_filter.rb +12 -0
  36. data/lib/whiskey_disk/config/filters/stringify_hash_keys_filter.rb +25 -0
  37. data/lib/whiskey_disk/helpers.rb +50 -0
  38. data/lib/whiskey_disk/rake.rb +47 -0
  39. data/scenarios/git_repositories/config.git/HEAD +1 -0
  40. data/scenarios/git_repositories/config.git/config +5 -0
  41. data/scenarios/git_repositories/config.git/description +1 -0
  42. data/scenarios/git_repositories/config.git/git-daemon-export-ok +0 -0
  43. data/scenarios/git_repositories/config.git/hooks/applypatch-msg.sample +15 -0
  44. data/scenarios/git_repositories/config.git/hooks/commit-msg.sample +24 -0
  45. data/scenarios/git_repositories/config.git/hooks/post-commit.sample +8 -0
  46. data/scenarios/git_repositories/config.git/hooks/post-receive.sample +15 -0
  47. data/scenarios/git_repositories/config.git/hooks/post-update.sample +8 -0
  48. data/scenarios/git_repositories/config.git/hooks/pre-applypatch.sample +14 -0
  49. data/scenarios/git_repositories/config.git/hooks/pre-commit.sample +46 -0
  50. data/scenarios/git_repositories/config.git/hooks/pre-rebase.sample +169 -0
  51. data/scenarios/git_repositories/config.git/hooks/prepare-commit-msg.sample +36 -0
  52. data/scenarios/git_repositories/config.git/hooks/update.sample +128 -0
  53. data/scenarios/git_repositories/config.git/info/exclude +6 -0
  54. data/scenarios/git_repositories/config.git/objects/0d/b14dd6ddc54017c0a11960dcda82ed802cde69 +0 -0
  55. data/scenarios/git_repositories/config.git/objects/0e/e781f5ce80d64db32a74a7aae7b5248dafe112 +3 -0
  56. data/scenarios/git_repositories/config.git/objects/17/6bf54cf17d1d1c24556dc059c4144a5df230e8 +0 -0
  57. data/scenarios/git_repositories/config.git/objects/20/e9ff3feaa8ede30f707e5f1b4356e3c02bb7ec +0 -0
  58. data/scenarios/git_repositories/config.git/objects/45/117b1c775f0de415478dbf08ed9d667ab17d13 +0 -0
  59. data/scenarios/git_repositories/config.git/objects/51/3954c9aca090e6ce40359f0e9fde30ea78eb8c +0 -0
  60. data/scenarios/git_repositories/config.git/objects/66/947a7a11a6f5d3d561fe95de284ced3010819a +0 -0
  61. data/scenarios/git_repositories/config.git/objects/6b/bc79311bfac47d3ed724aa82a4814e0dda4c67 +0 -0
  62. data/scenarios/git_repositories/config.git/objects/71/eb5df52676e8e6efba471050b46978173af110 +1 -0
  63. data/scenarios/git_repositories/config.git/objects/84/17d2fe3e8fcc0825249c517b29b0f9ea8b8b31 +2 -0
  64. data/scenarios/git_repositories/config.git/objects/8b/384fcfcf7c0dee7c3c1d5636bee9e645d9cf38 +0 -0
  65. data/scenarios/git_repositories/config.git/objects/bb/59da633ba74296b0c2f9ff70784ac155ddb599 +0 -0
  66. data/scenarios/git_repositories/config.git/objects/cc/b86b26189afbf45d8eb9165812ab86dbdfca63 +0 -0
  67. data/scenarios/git_repositories/config.git/objects/d1/0bcd51fec41f854001e4d61f99d9e282a695d3 +0 -0
  68. data/scenarios/git_repositories/config.git/objects/d8/a8b0f5b1fd66844efb141d9544965ea0065f2d +0 -0
  69. data/scenarios/git_repositories/config.git/objects/e6/b02c66ad632e6b8535c4630cb8fe07732a72fc +0 -0
  70. data/scenarios/git_repositories/config.git/objects/e8/b8bfeeba735c0a1a873082554cb4d7256ac125 +0 -0
  71. data/scenarios/git_repositories/config.git/objects/f9/0181466a1a60b793ca9cc9abd584c18d4e3887 +0 -0
  72. data/scenarios/git_repositories/config.git/objects/f9/49d5d8a4f12c91471e34d4e277239c35ebd10d +0 -0
  73. data/scenarios/git_repositories/config.git/refs/heads/master +1 -0
  74. data/scenarios/git_repositories/project.git/HEAD +1 -0
  75. data/scenarios/git_repositories/project.git/config +5 -0
  76. data/scenarios/git_repositories/project.git/description +1 -0
  77. data/scenarios/git_repositories/project.git/git-daemon-export-ok +0 -0
  78. data/scenarios/git_repositories/project.git/hooks/applypatch-msg.sample +15 -0
  79. data/scenarios/git_repositories/project.git/hooks/commit-msg.sample +24 -0
  80. data/scenarios/git_repositories/project.git/hooks/post-commit.sample +8 -0
  81. data/scenarios/git_repositories/project.git/hooks/post-receive.sample +15 -0
  82. data/scenarios/git_repositories/project.git/hooks/post-update.sample +8 -0
  83. data/scenarios/git_repositories/project.git/hooks/pre-applypatch.sample +14 -0
  84. data/scenarios/git_repositories/project.git/hooks/pre-commit.sample +46 -0
  85. data/scenarios/git_repositories/project.git/hooks/pre-rebase.sample +169 -0
  86. data/scenarios/git_repositories/project.git/hooks/prepare-commit-msg.sample +36 -0
  87. data/scenarios/git_repositories/project.git/hooks/update.sample +128 -0
  88. data/scenarios/git_repositories/project.git/info/exclude +6 -0
  89. data/scenarios/git_repositories/project.git/objects/04/26e152e66c8cd42974279bdcae09be9839c172 +0 -0
  90. data/scenarios/git_repositories/project.git/objects/04/f4de85eaf72ef1631dc6d7424045c0a749b757 +1 -0
  91. data/scenarios/git_repositories/project.git/objects/06/13fe277280cbcdb2856e1eefc70bdaff011b20 +0 -0
  92. data/scenarios/git_repositories/project.git/objects/06/7aca89b86265eee211387434c3e50f37ccf009 +0 -0
  93. data/scenarios/git_repositories/project.git/objects/09/445dacc4822722612d60833c9948219ecdd8f5 +0 -0
  94. data/scenarios/git_repositories/project.git/objects/11/c4ec64326de35462f4e79d0f4229bf8e26e0c5 +0 -0
  95. data/scenarios/git_repositories/project.git/objects/20/1c7641c2e42b0b904e5c1f793489d8b858e4da +2 -0
  96. data/scenarios/git_repositories/project.git/objects/23/979639da60d2d31e9744468df1c1221b101e64 +0 -0
  97. data/scenarios/git_repositories/project.git/objects/27/a3fff2c4c45ab5513a405f694c0a042cb5d417 +1 -0
  98. data/scenarios/git_repositories/project.git/objects/2c/0c33cfba8e1af15df88522c0db2b10a6a94138 +2 -0
  99. data/scenarios/git_repositories/project.git/objects/38/b574660305ecb5fec6b2daa7ee1e0dbf1b6003 +0 -0
  100. data/scenarios/git_repositories/project.git/objects/4a/57abb5e4e426cfc9101b3af22ac83ccbd8e2ad +0 -0
  101. data/scenarios/git_repositories/project.git/objects/4c/77ebdd985e57afe7988480720c5dc77ec525c9 +0 -0
  102. data/scenarios/git_repositories/project.git/objects/51/c94da6f1b8aa9d2346088d3d362475b60c7f32 +0 -0
  103. data/scenarios/git_repositories/project.git/objects/5b/a96acf9cc9b87babe37c032676f53bf1ba9ae7 +2 -0
  104. data/scenarios/git_repositories/project.git/objects/5d/f555601d60f1c2a84d2364af0ad640612c3ba5 +0 -0
  105. data/scenarios/git_repositories/project.git/objects/71/03b5ac94940d596c2160a5cfcd55ca4ccac41f +0 -0
  106. data/scenarios/git_repositories/project.git/objects/73/3fc331098b03523f414f3509b9ae6e637c6866 +0 -0
  107. data/scenarios/git_repositories/project.git/objects/80/26076649ceccbe96a6292f2432652f08483035 +0 -0
  108. data/scenarios/git_repositories/project.git/objects/86/d1ef0976be4567de562224e1b51fbf9820c53a +1 -0
  109. data/scenarios/git_repositories/project.git/objects/87/a9d8b09b3401d21b23d90253332d6b28b47db2 +0 -0
  110. data/scenarios/git_repositories/project.git/objects/8b/030ba688255c917d189ae3f87d7c5ccd226bc2 +0 -0
  111. data/scenarios/git_repositories/project.git/objects/95/c9d5ad9b1c90e4c805516783105fc2037dedeb +2 -0
  112. data/scenarios/git_repositories/project.git/objects/95/d82d043af35a80eabfd56c0d705abfa3488787 +2 -0
  113. data/scenarios/git_repositories/project.git/objects/96/0bf34bb0b46d0aeb0be87f688f4ef06a4b35e1 +0 -0
  114. data/scenarios/git_repositories/project.git/objects/a3/860106dc1d148c7831cd45ae38829b4ed47702 +2 -0
  115. data/scenarios/git_repositories/project.git/objects/a8/506d6439b71784a72ac72d284b2ad53088f573 +0 -0
  116. data/scenarios/git_repositories/project.git/objects/ad/22ea6c7563777936ecfbe50d8e2cf8120fd525 +0 -0
  117. data/scenarios/git_repositories/project.git/objects/ae/3900de54aff557c61c81146d00f9d38e55a265 +1 -0
  118. data/scenarios/git_repositories/project.git/objects/bf/5e3740d52b80abb0378b3f85f93a53b1294521 +1 -0
  119. data/scenarios/git_repositories/project.git/objects/bf/b59811cdbc069418dee14b171e6e7e979784b7 +0 -0
  120. data/scenarios/git_repositories/project.git/objects/cc/5ac0afb24e727d5de344cc26a425f4fb7fd17d +3 -0
  121. data/scenarios/git_repositories/project.git/objects/d1/091aa2dd76885108461110c639e6b33a297fce +0 -0
  122. data/scenarios/git_repositories/project.git/objects/d8/913f6650eb2b7bf2a633732d8452008ca23dcb +0 -0
  123. data/scenarios/git_repositories/project.git/objects/db/d1b9667f1b26b13331ac0c321dced8be1aeab0 +3 -0
  124. data/scenarios/git_repositories/project.git/objects/e4/3b9107e9b1908ce415025e64eb83a493d329b7 +0 -0
  125. data/scenarios/git_repositories/project.git/objects/ef/2a88894d5421920b9dfe67a9a4d8043830e62e +0 -0
  126. data/scenarios/git_repositories/project.git/objects/f4/0123a1ff20c65d8dc15a38a83222647908e6f7 +0 -0
  127. data/scenarios/git_repositories/project.git/objects/f5/0af315b75ca0b12c720dec6d916b76b968c319 +0 -0
  128. data/scenarios/git_repositories/project.git/objects/f6/0215709b7b23f3738e9cbaf634b1c86bbd376a +0 -0
  129. data/scenarios/git_repositories/project.git/refs/heads/bad_rakefile +1 -0
  130. data/scenarios/git_repositories/project.git/refs/heads/hook_with_changed +1 -0
  131. data/scenarios/git_repositories/project.git/refs/heads/master +1 -0
  132. data/scenarios/git_repositories/project.git/refs/heads/no_rake_hooks +1 -0
  133. data/scenarios/git_repositories/project.git/refs/heads/post_rake_tasks +1 -0
  134. data/scenarios/invalid/deploy.yml +1 -0
  135. data/scenarios/local/deploy.yml.erb +17 -0
  136. data/scenarios/remote/deploy.yml +119 -0
  137. data/scenarios/setup/vagrant/.gitignore +3 -0
  138. data/scenarios/setup/vagrant/Vagrantfile +10 -0
  139. data/scenarios/setup/vagrant/manifests/integration.pp +32 -0
  140. data/scenarios/setup/vagrant/pids/.gitignore +1 -0
  141. data/spec/.bacon +0 -0
  142. data/spec/init_spec.rb +9 -0
  143. data/spec/install_spec.rb +43 -0
  144. data/spec/integration/branch_switching_spec.rb +41 -0
  145. data/spec/integration/deployment_failures_spec.rb +106 -0
  146. data/spec/integration/helper_spec.rb +90 -0
  147. data/spec/integration/invalid_configuration_spec.rb +39 -0
  148. data/spec/integration/local_deployments_spec.rb +230 -0
  149. data/spec/integration/post_rake_tasks_spec.rb +226 -0
  150. data/spec/integration/post_scripts_spec.rb +246 -0
  151. data/spec/integration/remote_deployments_spec.rb +166 -0
  152. data/spec/integration/staleness_checks_spec.rb +72 -0
  153. data/spec/spec_helper.rb +117 -0
  154. data/spec/wd_command_spec.rb +986 -0
  155. data/spec/wd_role_command_spec.rb +49 -0
  156. data/spec/whiskey_disk/config/filter_spec.rb +77 -0
  157. data/spec/whiskey_disk/config/filters/add_environment_name_filter_spec.rb +20 -0
  158. data/spec/whiskey_disk/config/filters/add_project_name_filter_spec.rb +19 -0
  159. data/spec/whiskey_disk/config/filters/check_for_duplicate_domains_filter_spec.rb +29 -0
  160. data/spec/whiskey_disk/config/filters/convert_role_strings_to_list_filter_spec.rb +48 -0
  161. data/spec/whiskey_disk/config/filters/default_config_target_filter_spec.rb +19 -0
  162. data/spec/whiskey_disk/config/filters/default_domain_filter_spec.rb +18 -0
  163. data/spec/whiskey_disk/config/filters/drop_empty_domain_roles_filter_spec.rb +60 -0
  164. data/spec/whiskey_disk/config/filters/environment_scope_filter_spec.rb +32 -0
  165. data/spec/whiskey_disk/config/filters/hashify_domain_entries_filter_spec.rb +41 -0
  166. data/spec/whiskey_disk/config/filters/localize_domains_filter_spec.rb +30 -0
  167. data/spec/whiskey_disk/config/filters/normalize_ssh_options_filter_spec.rb +56 -0
  168. data/spec/whiskey_disk/config/filters/project_scope_filter_spec.rb +75 -0
  169. data/spec/whiskey_disk/config/filters/select_project_and_environment_filter_spec.rb +30 -0
  170. data/spec/whiskey_disk/config/filters/stringify_hash_keys_filter_spec.rb +40 -0
  171. data/spec/whiskey_disk/config_spec.rb +754 -0
  172. data/spec/whiskey_disk/helpers_spec.rb +443 -0
  173. data/spec/whiskey_disk/rake_spec.rb +261 -0
  174. data/spec/whiskey_disk_spec.rb +1224 -0
  175. data/tasks/deploy.rake +2 -0
  176. data/whisk_deploy.gemspec +215 -0
  177. metadata +241 -0
@@ -0,0 +1,226 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper.rb'))
2
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'lib', 'whiskey_disk'))
3
+
4
+ integration_spec do
5
+ describe 'when configured for a remote deployment' do
6
+ before do
7
+ setup_deployment_area
8
+ end
9
+
10
+ describe 'with no Rakefile in the project' do
11
+ before do
12
+ @config = scenario_config('remote/deploy.yml')
13
+ @args = "--path=#{@config} --to=project:no_rakefile"
14
+ end
15
+
16
+ describe 'performing a setup' do
17
+ it 'performs a checkout of the repository to the target path' do
18
+ run_setup(@args)
19
+ File.exists?(deployed_file('project/README')).should == true
20
+ end
21
+
22
+ it 'does not run a deploy:post_setup rake task' do
23
+ run_setup(@args)
24
+ File.read(integration_log).should.not =~ /Running a post_setup task/
25
+ end
26
+
27
+ it 'reports the remote setup as successful' do
28
+ run_setup(@args)
29
+ File.read(integration_log).should =~ /vagrant => succeeded/
30
+ end
31
+
32
+ it 'exits with a true status' do
33
+ run_setup(@args).should == true
34
+ end
35
+ end
36
+
37
+ describe 'performing a deployment' do
38
+ before do
39
+ checkout_repo('project')
40
+ File.unlink(deployed_file('project/README')) # modify the deployed checkout
41
+ end
42
+
43
+ it 'updates the checkout of the repository on the target path' do
44
+ run_deploy(@args)
45
+ File.exists?(deployed_file('project/README')).should == true
46
+ end
47
+
48
+ it 'does not run a deploy:post_deploy rake task' do
49
+ run_deploy(@args)
50
+ File.read(integration_log).should.not =~ /Running a post_deploy task/
51
+ end
52
+
53
+ it 'reports the remote deployment as successful' do
54
+ run_deploy(@args)
55
+ File.read(integration_log).should =~ /vagrant => succeeded/
56
+ end
57
+
58
+ it 'exits with a true status' do
59
+ run_deploy(@args).should == true
60
+ end
61
+ end
62
+ end
63
+
64
+ describe 'with an unparseable Rakefile in the project' do
65
+ before do
66
+ @config = scenario_config('remote/deploy.yml')
67
+ @args = "--path=#{@config} --to=project:bad_rakefile"
68
+ end
69
+
70
+ describe 'performing a setup' do
71
+ it 'performs a checkout of the repository to the target path' do
72
+ run_setup(@args)
73
+ File.exists?(deployed_file('project/README')).should == true
74
+ end
75
+
76
+ it 'does not run a deploy:post_setup rake task' do
77
+ run_setup(@args)
78
+ File.read(integration_log).should.not =~ /Running a post_setup task/
79
+ end
80
+
81
+ it 'reports the remote setup as a failure' do
82
+ run_setup(@args)
83
+ File.read(integration_log).should =~ /vagrant => failed/
84
+ end
85
+
86
+ it 'exits with a false status' do
87
+ run_setup(@args).should == false
88
+ end
89
+ end
90
+
91
+ describe 'performing a deployment' do
92
+ before do
93
+ checkout_repo('project', 'bad_rakefile')
94
+ File.unlink(deployed_file('project/README')) # modify the deployed checkout
95
+ end
96
+
97
+ it 'updates the checkout of the repository on the target path' do
98
+ run_deploy(@args)
99
+ File.exists?(deployed_file('project/README')).should == true
100
+ end
101
+
102
+ it 'does not run a deploy:post_deploy rake task' do
103
+ run_deploy(@args)
104
+ File.read(integration_log).should.not =~ /Running a post_deploy task/
105
+ end
106
+
107
+ it 'reports the remote deployment as a failure' do
108
+ run_deploy(@args)
109
+ File.read(integration_log).should =~ /vagrant => failed/
110
+ end
111
+
112
+ it 'exits with a false status' do
113
+ run_deploy(@args).should == false
114
+ end
115
+ end
116
+ end
117
+
118
+ describe 'with a valid Rakefile in the project with no post_setup or post_deploy hooks' do
119
+ before do
120
+ @config = scenario_config('remote/deploy.yml')
121
+ @args = "--path=#{@config} --to=project:no_rake_hooks"
122
+ end
123
+
124
+ describe 'and doing a setup' do
125
+ it 'performs a checkout of the repository to the target path' do
126
+ run_setup(@args)
127
+ File.exists?(deployed_file('project/README')).should == true
128
+ end
129
+
130
+ it 'does not run a deploy:post_setup rake task' do
131
+ run_setup(@args)
132
+ File.read(integration_log).should.not =~ /Running a post_setup task/
133
+ end
134
+
135
+ it 'reports the remote setup as successful' do
136
+ run_setup(@args)
137
+ File.read(integration_log).should =~ /vagrant => succeeded/
138
+ end
139
+
140
+ it 'exits with a true status' do
141
+ run_setup(@args).should == true
142
+ end
143
+ end
144
+
145
+ describe 'and doing a deploy' do
146
+ before do
147
+ checkout_repo('project', 'no_rake_hooks')
148
+ File.unlink(deployed_file('project/README')) # modify the deployed checkout
149
+ end
150
+
151
+ it 'updates the checkout of the repository on the target path' do
152
+ run_deploy(@args)
153
+ File.exists?(deployed_file('project/README')).should == true
154
+ end
155
+
156
+ it 'does not run a deploy:post_deploy rake task' do
157
+ run_deploy(@args)
158
+ File.read(integration_log).should.not =~ /Running a post_deploy task/
159
+ end
160
+
161
+ it 'reports the remote deployment as successful' do
162
+ run_deploy(@args)
163
+ File.read(integration_log).should =~ /vagrant => succeeded/
164
+ end
165
+
166
+ it 'exits with a true status' do
167
+ run_deploy(@args).should == true
168
+ end
169
+ end
170
+ end
171
+
172
+ describe 'with a valid Rakefile in the project with post_setup and post_deploy hooks' do
173
+ before do
174
+ @config = scenario_config('remote/deploy.yml')
175
+ @args = "--path=#{@config} --to=project:with_rake_hooks"
176
+ end
177
+
178
+ describe 'and doing a setup' do
179
+ it 'performs a checkout of the repository to the target path' do
180
+ run_setup(@args)
181
+ File.exists?(deployed_file('project/README')).should == true
182
+ end
183
+
184
+ it 'runs a deploy:post_setup rake task' do
185
+ run_setup(@args)
186
+ File.read(integration_log).should =~ /Running a post_setup task/
187
+ end
188
+
189
+ it 'reports the remote setup as successful' do
190
+ run_setup(@args)
191
+ File.read(integration_log).should =~ /vagrant => succeeded/
192
+ end
193
+
194
+ it 'exits with a true status' do
195
+ run_setup(@args).should == true
196
+ end
197
+ end
198
+
199
+ describe 'and doing a deploy' do
200
+ before do
201
+ checkout_repo('project', 'post_rake_tasks')
202
+ File.unlink(deployed_file('project/README')) # modify the deployed checkout
203
+ end
204
+
205
+ it 'updates the checkout of the repository on the target path' do
206
+ run_deploy(@args)
207
+ File.exists?(deployed_file('project/README')).should == true
208
+ end
209
+
210
+ it 'runs a deploy:post_deploy rake task' do
211
+ run_deploy(@args)
212
+ File.read(integration_log).should =~ /Running a post_deploy task/
213
+ end
214
+
215
+ it 'reports the remote deployment as successful' do
216
+ run_deploy(@args)
217
+ File.read(integration_log).should =~ /vagrant => succeeded/
218
+ end
219
+
220
+ it 'exits with a true status' do
221
+ run_deploy(@args).should == true
222
+ end
223
+ end
224
+ end
225
+ end
226
+ end
@@ -0,0 +1,246 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper.rb'))
2
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'lib', 'whiskey_disk'))
3
+
4
+ integration_spec do
5
+ describe 'when configured for a remote deployment' do
6
+ before do
7
+ setup_deployment_area
8
+ end
9
+
10
+ describe 'with no post_* scripts defined' do
11
+ before do
12
+ @config = scenario_config('remote/deploy.yml')
13
+ @args = "--path=#{@config} --to=project:no_post_scripts"
14
+ end
15
+
16
+ describe 'performing a setup' do
17
+ it 'performs a checkout of the repository to the target path' do
18
+ run_setup(@args)
19
+ File.exists?(deployed_file('project/README')).should == true
20
+ end
21
+
22
+ it 'does not run a post_setup script' do
23
+ run_setup(@args)
24
+ File.read(integration_log).should.not =~ /^Running post script/
25
+ end
26
+
27
+ it 'reports the remote setup as successful' do
28
+ run_setup(@args)
29
+ File.read(integration_log).should =~ /vagrant => succeeded/
30
+ end
31
+
32
+ it 'exits with a true status' do
33
+ run_setup(@args).should == true
34
+ end
35
+ end
36
+
37
+ describe 'performing a deployment' do
38
+ before do
39
+ checkout_repo('project')
40
+ File.unlink(deployed_file('project/README')) # modify the deployed checkout
41
+ end
42
+
43
+ it 'updates the checkout of the repository on the target path' do
44
+ run_deploy(@args)
45
+ File.exists?(deployed_file('project/README')).should == true
46
+ end
47
+
48
+ it 'does not run a post_deploy script' do
49
+ run_deploy(@args)
50
+ File.read(integration_log).should.not =~ /^Running post script/
51
+ end
52
+
53
+ it 'reports the remote deployment as successful' do
54
+ run_deploy(@args)
55
+ File.read(integration_log).should =~ /vagrant => succeeded/
56
+ end
57
+
58
+ it 'exits with a true status' do
59
+ run_deploy(@args).should == true
60
+ end
61
+ end
62
+ end
63
+
64
+ describe 'with missing post_* scripts defined' do
65
+ before do
66
+ @config = scenario_config('remote/deploy.yml')
67
+ @args = "--path=#{@config} --to=project:missing_post_scripts"
68
+ end
69
+
70
+ describe 'performing a setup' do
71
+ it 'performs a checkout of the repository to the target path' do
72
+ run_setup(@args)
73
+ File.exists?(deployed_file('project/README')).should == true
74
+ end
75
+
76
+ it 'attempts to run a post_setup script' do
77
+ run_setup(@args)
78
+ File.read(integration_log).should =~ /^Running post script/
79
+ end
80
+
81
+ it 'passes environment variable settings to the post_setup script' do
82
+ run_setup(@args)
83
+ File.read(integration_log).should =~ /FOO=BAR/
84
+ end
85
+
86
+ it 'reports the remote setup as a failure' do
87
+ run_setup(@args)
88
+ File.read(integration_log).should =~ /vagrant => failed/
89
+ end
90
+
91
+ it 'exits with a false status' do
92
+ run_setup(@args).should == false
93
+ end
94
+ end
95
+
96
+ describe 'performing a deployment' do
97
+ before do
98
+ checkout_repo('project')
99
+ File.unlink(deployed_file('project/README')) # modify the deployed checkout
100
+ end
101
+
102
+ it 'updates the checkout of the repository on the target path' do
103
+ run_deploy(@args)
104
+ File.exists?(deployed_file('project/README')).should == true
105
+ end
106
+
107
+ it 'attempts to run a post_deploy script' do
108
+ run_deploy(@args)
109
+ File.read(integration_log).should =~ /^Running post script/
110
+ end
111
+
112
+ it 'passes environment variable settings to the post_deploy script' do
113
+ run_deploy(@args)
114
+ File.read(integration_log).should =~ /FOO='BAR'/
115
+ end
116
+
117
+ it 'reports the remote deployment as a failure' do
118
+ run_deploy(@args)
119
+ File.read(integration_log).should =~ /vagrant => failed/
120
+ end
121
+
122
+ it 'exits with a false status' do
123
+ run_deploy(@args).should == false
124
+ end
125
+ end
126
+ end
127
+
128
+ describe 'with post_* scripts specified and present' do
129
+ before do
130
+ @config = scenario_config('remote/deploy.yml')
131
+ @args = "--path=#{@config} --to=project:with_post_scripts"
132
+ end
133
+
134
+ describe 'and doing a setup' do
135
+ it 'performs a checkout of the repository to the target path' do
136
+ run_setup(@args)
137
+ File.exists?(deployed_file('project/README')).should == true
138
+ end
139
+
140
+ describe 'and the post_setup script is successful' do
141
+ it 'runs the post_setup script' do
142
+ run_setup(@args)
143
+ File.read(integration_log).should =~ /^Running the post_setup script/
144
+ end
145
+
146
+ it 'passes environment variable settings to the post_setup script' do
147
+ run_setup(@args)
148
+ File.read(integration_log).should =~ /FOO=BAR/
149
+ end
150
+
151
+ it 'reports the remote setup as successful' do
152
+ run_setup(@args)
153
+ File.read(integration_log).should =~ /vagrant => succeeded/
154
+ end
155
+
156
+ it 'exits with a true status' do
157
+ run_setup(@args).should == true
158
+ end
159
+ end
160
+
161
+ describe 'and the post_setup script fails' do
162
+ before do
163
+ @args = "--path=#{@config} --to=project:with_failing_post_scripts"
164
+ end
165
+
166
+ it 'runs the post_setup script' do
167
+ run_setup(@args)
168
+ File.read(integration_log).should =~ /^Running the post_setup script/
169
+ end
170
+
171
+ it 'passes environment variable settings to the post_setup script' do
172
+ run_setup(@args)
173
+ File.read(integration_log).should =~ /FOO=BAR/
174
+ end
175
+
176
+ it 'reports the remote setup as a failure' do
177
+ run_setup(@args)
178
+ File.read(integration_log).should =~ /vagrant => failed/
179
+ end
180
+
181
+ it 'exits with a false status' do
182
+ run_setup(@args).should == false
183
+ end
184
+ end
185
+ end
186
+
187
+ describe 'and doing a deploy' do
188
+ before do
189
+ checkout_repo('project')
190
+ File.unlink(deployed_file('project/README')) # modify the deployed checkout
191
+ end
192
+
193
+ it 'updates the checkout of the repository on the target path' do
194
+ run_deploy(@args)
195
+ File.exists?(deployed_file('project/README')).should == true
196
+ end
197
+
198
+ describe 'and the post_deploy script is successful' do
199
+ it 'runs the post_deploy script' do
200
+ run_deploy(@args)
201
+ File.read(integration_log).should =~ /^Running the post_deploy script/
202
+ end
203
+
204
+ it 'passes environment variable settings to the post_deploy script' do
205
+ run_deploy(@args)
206
+ File.read(integration_log).should =~ /FOO='BAR'/
207
+ end
208
+
209
+ it 'reports the remote deployment as successful' do
210
+ run_deploy(@args)
211
+ File.read(integration_log).should =~ /vagrant => succeeded/
212
+ end
213
+
214
+ it 'exits with a true status' do
215
+ run_deploy(@args).should == true
216
+ end
217
+ end
218
+
219
+ describe 'and the post_deploy script fails' do
220
+ before do
221
+ @args = "--path=#{@config} --to=project:with_failing_post_scripts"
222
+ end
223
+
224
+ it 'runs the post_deploy script' do
225
+ run_deploy(@args)
226
+ File.read(integration_log).should =~ /^Running the post_deploy script/
227
+ end
228
+
229
+ it 'passes environment variable settings to the post_deploy script' do
230
+ run_deploy(@args)
231
+ File.read(integration_log).should =~ /FOO='BAR'/
232
+ end
233
+
234
+ it 'reports the remote deployment as a failure' do
235
+ run_deploy(@args)
236
+ File.read(integration_log).should =~ /vagrant => failed/
237
+ end
238
+
239
+ it 'exits with a false status' do
240
+ run_deploy(@args).should == false
241
+ end
242
+ end
243
+ end
244
+ end
245
+ end
246
+ end