engineyard-serverside 2.8.0.pre4 → 2.8.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 (261) hide show
  1. checksums.yaml +4 -4
  2. data/features/enable_maintenance/step_definitions/enable_maintenance_steps.rb +43 -0
  3. data/features/hook/running-a-deploy-hook.feature +277 -0
  4. data/features/hook/step_definitions/running-a-deploy-hook-steps.rb +200 -0
  5. data/features/step_definitions/app_steps.rb +10 -0
  6. data/features/step_definitions/command_steps.rb +8 -0
  7. data/features/step_definitions/server_steps.rb +14 -0
  8. data/features/step_definitions/version_steps.rb +5 -0
  9. data/features/support/env.rb +63 -0
  10. data/features/support/error_codes.rb +17 -0
  11. data/features/support/fs_helpers.rb +82 -0
  12. data/features/support/output_helpers.rb +7 -0
  13. data/features/support/runner.rb +41 -0
  14. data/features/version.feature +7 -0
  15. data/lib/engineyard-serverside/cli/app.rb +6 -0
  16. data/lib/engineyard-serverside/shell.rb +38 -10
  17. data/lib/engineyard-serverside/version.rb +1 -1
  18. data/spec/engineyard-serverside/callbacks/collection/combined_spec.rb +232 -0
  19. data/spec/engineyard-serverside/callbacks/collection/deploy_hooks_spec.rb +170 -0
  20. data/spec/engineyard-serverside/callbacks/collection/service_hooks/collection_spec.rb +171 -0
  21. data/spec/engineyard-serverside/callbacks/collection/service_hooks/combined_spec.rb +174 -0
  22. data/spec/engineyard-serverside/callbacks/collection/service_hooks_spec.rb +31 -0
  23. data/spec/engineyard-serverside/callbacks/collection_spec.rb +49 -0
  24. data/spec/engineyard-serverside/callbacks/distributor/remote_spec.rb +135 -0
  25. data/spec/engineyard-serverside/callbacks/distributor/viability_filter_spec.rb +208 -0
  26. data/spec/engineyard-serverside/callbacks/distributor_spec.rb +43 -0
  27. data/spec/engineyard-serverside/callbacks/executor/executable_spec.rb +386 -0
  28. data/spec/engineyard-serverside/callbacks/executor/ruby/context_spec.rb +538 -0
  29. data/spec/engineyard-serverside/callbacks/executor/ruby/executor_spec.rb +313 -0
  30. data/spec/engineyard-serverside/callbacks/executor/ruby_spec.rb +35 -0
  31. data/spec/engineyard-serverside/callbacks/executor_spec.rb +45 -0
  32. data/spec/engineyard-serverside/callbacks_spec.rb +31 -0
  33. data/spec/engineyard-serverside/cli/workflows/base_spec.rb +237 -0
  34. data/spec/engineyard-serverside/cli/workflows/calling_deploy_hooks_spec.rb +65 -0
  35. data/spec/engineyard-serverside/cli/workflows/deploying_applications_spec.rb +61 -0
  36. data/spec/engineyard-serverside/cli/workflows/disabling_maintenance_spec.rb +61 -0
  37. data/spec/engineyard-serverside/cli/workflows/enabling_maintenance_spec.rb +61 -0
  38. data/spec/engineyard-serverside/cli/workflows/helpers_spec.rb +64 -0
  39. data/spec/engineyard-serverside/cli/workflows/rolling_back_applications_spec.rb +61 -0
  40. data/spec/engineyard-serverside/cli/workflows/showing_maintenance_status_spec.rb +60 -0
  41. data/spec/engineyard-serverside/cli/workflows_spec.rb +87 -0
  42. data/spec/engineyard-serverside/dependency_manager/base_spec.rb +139 -0
  43. data/spec/engineyard-serverside/paths_spec.rb +820 -0
  44. data/spec/engineyard-serverside/propagator_spec.rb +56 -0
  45. data/spec/engineyard-serverside/server_spec.rb +390 -0
  46. data/spec/engineyard-serverside/shell/helpers_spec.rb +98 -0
  47. data/spec/engineyard-serverside/shell/yieldio_spec.rb +33 -0
  48. data/spec/engineyard-serverside/shell_spec.rb +543 -0
  49. data/spec/engineyard-serverside/slug/distributor_spec.rb +199 -0
  50. data/spec/engineyard-serverside/slug/enabler_spec.rb +191 -0
  51. data/spec/engineyard-serverside/slug/failure_handler_spec.rb +114 -0
  52. data/spec/engineyard-serverside/slug/finalizer_spec.rb +191 -0
  53. data/spec/engineyard-serverside/slug/generator_spec.rb +82 -0
  54. data/spec/engineyard-serverside/slug/migrator_spec.rb +137 -0
  55. data/spec/engineyard-serverside/slug/restarter_spec.rb +226 -0
  56. data/spec/engineyard-serverside/slug/source/updater_spec.rb +710 -0
  57. data/spec/engineyard-serverside/slug/source_spec.rb +40 -0
  58. data/spec/engineyard-serverside/source_spec.rb +171 -0
  59. data/spec/railway_spec.rb +130 -0
  60. data/spec/result/failure_spec.rb +113 -0
  61. data/spec/result/success_spec.rb +109 -0
  62. data/spec/result_spec.rb +23 -0
  63. data/spec/spec_helper.rb +3 -349
  64. metadata +182 -404
  65. data/spec/archive_deploy_spec.rb +0 -53
  66. data/spec/basic_deploy_spec.rb +0 -26
  67. data/spec/bundler_deploy_spec.rb +0 -160
  68. data/spec/configuration_spec.rb +0 -206
  69. data/spec/custom_deploy_spec.rb +0 -128
  70. data/spec/deploy_hook_spec.rb +0 -378
  71. data/spec/deprecation_spec.rb +0 -23
  72. data/spec/ey_yml_customized_deploy_spec.rb +0 -99
  73. data/spec/fixtures/gitrepo.tar.gz +0 -0
  74. data/spec/fixtures/invalid_hook.rb +0 -1
  75. data/spec/fixtures/lockfiles/0.9-no-bundler +0 -111
  76. data/spec/fixtures/lockfiles/0.9-with-bundler +0 -117
  77. data/spec/fixtures/lockfiles/1.0-no-bundler +0 -54
  78. data/spec/fixtures/lockfiles/1.0.0.rc.1-with-bundler +0 -162
  79. data/spec/fixtures/lockfiles/1.0.18-do_mysql +0 -88
  80. data/spec/fixtures/lockfiles/1.0.18-do_postgres +0 -79
  81. data/spec/fixtures/lockfiles/1.0.18-mysql +0 -43
  82. data/spec/fixtures/lockfiles/1.0.18-mysql2 +0 -43
  83. data/spec/fixtures/lockfiles/1.0.18-pg +0 -43
  84. data/spec/fixtures/lockfiles/1.0.6-no-bundler +0 -51
  85. data/spec/fixtures/lockfiles/1.0.6-with-any-bundler +0 -52
  86. data/spec/fixtures/lockfiles/1.0.6-with-bundler +0 -52
  87. data/spec/fixtures/lockfiles/1.15.1-no-bundler +0 -51
  88. data/spec/fixtures/lockfiles/1.3.1-rails-3.2.13 +0 -112
  89. data/spec/fixtures/lockfiles/not-a-lockfile +0 -1
  90. data/spec/fixtures/repos/assets_detected/Gemfile +0 -5
  91. data/spec/fixtures/repos/assets_detected/Gemfile.lock +0 -88
  92. data/spec/fixtures/repos/assets_detected/README +0 -1
  93. data/spec/fixtures/repos/assets_detected/Rakefile +0 -5
  94. data/spec/fixtures/repos/assets_detected/app/assets/empty +0 -0
  95. data/spec/fixtures/repos/assets_detected/config/application.rb +0 -5
  96. data/spec/fixtures/repos/assets_detected/config/ey.yml +0 -3
  97. data/spec/fixtures/repos/assets_disabled/Gemfile +0 -5
  98. data/spec/fixtures/repos/assets_disabled/Gemfile.lock +0 -88
  99. data/spec/fixtures/repos/assets_disabled/README +0 -1
  100. data/spec/fixtures/repos/assets_disabled/Rakefile +0 -6
  101. data/spec/fixtures/repos/assets_disabled/app/assets/empty +0 -0
  102. data/spec/fixtures/repos/assets_disabled/config/application.rb +0 -5
  103. data/spec/fixtures/repos/assets_disabled/config/ey.yml +0 -3
  104. data/spec/fixtures/repos/assets_disabled_in_ey_yml/Gemfile +0 -5
  105. data/spec/fixtures/repos/assets_disabled_in_ey_yml/Gemfile.lock +0 -88
  106. data/spec/fixtures/repos/assets_disabled_in_ey_yml/README +0 -1
  107. data/spec/fixtures/repos/assets_disabled_in_ey_yml/Rakefile +0 -6
  108. data/spec/fixtures/repos/assets_disabled_in_ey_yml/app/assets/empty +0 -0
  109. data/spec/fixtures/repos/assets_disabled_in_ey_yml/config/application.rb +0 -5
  110. data/spec/fixtures/repos/assets_disabled_in_ey_yml/config/ey.yml +0 -5
  111. data/spec/fixtures/repos/assets_disabled_utf8/Gemfile +0 -5
  112. data/spec/fixtures/repos/assets_disabled_utf8/Gemfile.lock +0 -88
  113. data/spec/fixtures/repos/assets_disabled_utf8/README +0 -3
  114. data/spec/fixtures/repos/assets_disabled_utf8/Rakefile +0 -5
  115. data/spec/fixtures/repos/assets_disabled_utf8/app/assets/empty +0 -0
  116. data/spec/fixtures/repos/assets_disabled_utf8/config/application.rb +0 -7
  117. data/spec/fixtures/repos/assets_disabled_utf8/config/ey.yml +0 -3
  118. data/spec/fixtures/repos/assets_enabled_all/Gemfile +0 -5
  119. data/spec/fixtures/repos/assets_enabled_all/Gemfile.lock +0 -88
  120. data/spec/fixtures/repos/assets_enabled_all/README +0 -1
  121. data/spec/fixtures/repos/assets_enabled_all/app/assets/empty +0 -0
  122. data/spec/fixtures/repos/assets_enabled_all/config/application.rb +0 -5
  123. data/spec/fixtures/repos/assets_enabled_all/config/ey.yml +0 -6
  124. data/spec/fixtures/repos/assets_enabled_all/script/assets +0 -5
  125. data/spec/fixtures/repos/assets_enabled_all/tmp/obstruction +0 -1
  126. data/spec/fixtures/repos/assets_enabled_in_ey_yml/Gemfile +0 -3
  127. data/spec/fixtures/repos/assets_enabled_in_ey_yml/Gemfile.lock +0 -10
  128. data/spec/fixtures/repos/assets_enabled_in_ey_yml/README +0 -1
  129. data/spec/fixtures/repos/assets_enabled_in_ey_yml/Rakefile +0 -8
  130. data/spec/fixtures/repos/assets_enabled_in_ey_yml/config/ey.yml +0 -4
  131. data/spec/fixtures/repos/assets_enabled_util_only/Gemfile +0 -5
  132. data/spec/fixtures/repos/assets_enabled_util_only/Gemfile.lock +0 -88
  133. data/spec/fixtures/repos/assets_enabled_util_only/README +0 -1
  134. data/spec/fixtures/repos/assets_enabled_util_only/Rakefile +0 -6
  135. data/spec/fixtures/repos/assets_enabled_util_only/app/assets/empty +0 -0
  136. data/spec/fixtures/repos/assets_enabled_util_only/config/application.rb +0 -5
  137. data/spec/fixtures/repos/assets_enabled_util_only/config/ey.yml +0 -6
  138. data/spec/fixtures/repos/assets_error/Gemfile +0 -5
  139. data/spec/fixtures/repos/assets_error/Gemfile.lock +0 -88
  140. data/spec/fixtures/repos/assets_error/README +0 -1
  141. data/spec/fixtures/repos/assets_error/Rakefile +0 -4
  142. data/spec/fixtures/repos/assets_error/app/assets/empty +0 -0
  143. data/spec/fixtures/repos/assets_error/config/application.rb +0 -5
  144. data/spec/fixtures/repos/assets_error/config/ey.yml +0 -4
  145. data/spec/fixtures/repos/assets_in_hook/Gemfile +0 -5
  146. data/spec/fixtures/repos/assets_in_hook/Gemfile.lock +0 -88
  147. data/spec/fixtures/repos/assets_in_hook/README +0 -2
  148. data/spec/fixtures/repos/assets_in_hook/Rakefile +0 -5
  149. data/spec/fixtures/repos/assets_in_hook/app/assets/empty +0 -0
  150. data/spec/fixtures/repos/assets_in_hook/config/application.rb +0 -5
  151. data/spec/fixtures/repos/assets_in_hook/config/ey.yml +0 -3
  152. data/spec/fixtures/repos/assets_in_hook/deploy/before_compile_assets.rb +0 -2
  153. data/spec/fixtures/repos/bundle_fails/Gemfile +0 -1
  154. data/spec/fixtures/repos/bundle_fails/README +0 -1
  155. data/spec/fixtures/repos/bundle_fails/deploy/after_bundle.rb +0 -1
  156. data/spec/fixtures/repos/bundler_disabled/Gemfile +0 -4
  157. data/spec/fixtures/repos/bundler_disabled/Gemfile.lock +0 -12
  158. data/spec/fixtures/repos/bundler_disabled/README +0 -1
  159. data/spec/fixtures/repos/bundler_disabled/config/ey.yml +0 -2
  160. data/spec/fixtures/repos/bundler_disabled/deploy/after_bundle.rb +0 -1
  161. data/spec/fixtures/repos/bundler_disabled/deploy/before_bundle.rb +0 -1
  162. data/spec/fixtures/repos/bundler_old/Gemfile +0 -5
  163. data/spec/fixtures/repos/bundler_old/Gemfile.lock +0 -15
  164. data/spec/fixtures/repos/bundler_old/README +0 -1
  165. data/spec/fixtures/repos/default/Gemfile +0 -4
  166. data/spec/fixtures/repos/default/Gemfile.lock +0 -12
  167. data/spec/fixtures/repos/default/README +0 -5
  168. data/spec/fixtures/repos/default/ey.yml +0 -3
  169. data/spec/fixtures/repos/executable_hooks/README +0 -1
  170. data/spec/fixtures/repos/executable_hooks/deploy/before_restart +0 -72
  171. data/spec/fixtures/repos/executable_hooks_not_executable/README +0 -3
  172. data/spec/fixtures/repos/executable_hooks_not_executable/deploy/before_restart +0 -3
  173. data/spec/fixtures/repos/ey_yml/Gemfile +0 -4
  174. data/spec/fixtures/repos/ey_yml/Gemfile.lock +0 -12
  175. data/spec/fixtures/repos/ey_yml/README +0 -1
  176. data/spec/fixtures/repos/ey_yml/config/ey.yml +0 -18
  177. data/spec/fixtures/repos/ey_yml/deploy/before_migrate.rb +0 -6
  178. data/spec/fixtures/repos/ey_yml_alt/Gemfile +0 -4
  179. data/spec/fixtures/repos/ey_yml_alt/Gemfile.lock +0 -12
  180. data/spec/fixtures/repos/ey_yml_alt/README +0 -1
  181. data/spec/fixtures/repos/ey_yml_alt/deploy/before_migrate.rb +0 -6
  182. data/spec/fixtures/repos/ey_yml_alt/ey.yml +0 -12
  183. data/spec/fixtures/repos/hook_fails/README +0 -1
  184. data/spec/fixtures/repos/hook_fails/deploy/before_deploy.rb +0 -1
  185. data/spec/fixtures/repos/hooks/README +0 -1
  186. data/spec/fixtures/repos/hooks/deploy/after_bundle.rb +0 -1
  187. data/spec/fixtures/repos/hooks/deploy/after_compile_assets.rb +0 -1
  188. data/spec/fixtures/repos/hooks/deploy/after_deploy.rb +0 -1
  189. data/spec/fixtures/repos/hooks/deploy/after_migrate.rb +0 -1
  190. data/spec/fixtures/repos/hooks/deploy/after_restart.rb +0 -1
  191. data/spec/fixtures/repos/hooks/deploy/after_symlink.rb +0 -1
  192. data/spec/fixtures/repos/hooks/deploy/before_bundle.rb +0 -1
  193. data/spec/fixtures/repos/hooks/deploy/before_compile_assets.rb +0 -1
  194. data/spec/fixtures/repos/hooks/deploy/before_deploy.rb +0 -1
  195. data/spec/fixtures/repos/hooks/deploy/before_migrate.rb +0 -1
  196. data/spec/fixtures/repos/hooks/deploy/before_restart.rb +0 -1
  197. data/spec/fixtures/repos/hooks/deploy/before_symlink.rb +0 -1
  198. data/spec/fixtures/repos/multi_dep_manager/README +0 -1
  199. data/spec/fixtures/repos/multi_dep_manager/composer.json +0 -5
  200. data/spec/fixtures/repos/multi_dep_manager/composer.lock +0 -462
  201. data/spec/fixtures/repos/multi_dep_manager/package.json +0 -7
  202. data/spec/fixtures/repos/multi_dep_manager/public/index.php +0 -4
  203. data/spec/fixtures/repos/no_ey_config/Gemfile +0 -3
  204. data/spec/fixtures/repos/no_ey_config/Gemfile.lock +0 -10
  205. data/spec/fixtures/repos/no_ey_config/README +0 -1
  206. data/spec/fixtures/repos/no_ey_config/ey.yml +0 -3
  207. data/spec/fixtures/repos/no_ey_config_no_warning/Gemfile +0 -3
  208. data/spec/fixtures/repos/no_ey_config_no_warning/Gemfile.lock +0 -10
  209. data/spec/fixtures/repos/no_ey_config_no_warning/README +0 -1
  210. data/spec/fixtures/repos/no_ey_config_no_warning/ey.yml +0 -5
  211. data/spec/fixtures/repos/no_gemfile_lock/Gemfile +0 -4
  212. data/spec/fixtures/repos/no_gemfile_lock/README +0 -1
  213. data/spec/fixtures/repos/no_gemfile_lock/ey.yml +0 -3
  214. data/spec/fixtures/repos/nodejs/README +0 -1
  215. data/spec/fixtures/repos/nodejs/package.json +0 -7
  216. data/spec/fixtures/repos/not_bundled/README +0 -1
  217. data/spec/fixtures/repos/npm_disabled/README +0 -1
  218. data/spec/fixtures/repos/npm_disabled/config/ey.yml +0 -2
  219. data/spec/fixtures/repos/npm_disabled/package.json +0 -7
  220. data/spec/fixtures/repos/php_composer_disabled/README +0 -1
  221. data/spec/fixtures/repos/php_composer_disabled/composer.json +0 -5
  222. data/spec/fixtures/repos/php_composer_disabled/composer.lock +0 -462
  223. data/spec/fixtures/repos/php_composer_disabled/config/ey.yml +0 -2
  224. data/spec/fixtures/repos/php_composer_disabled/public/index.php +0 -4
  225. data/spec/fixtures/repos/php_composer_lock/README +0 -1
  226. data/spec/fixtures/repos/php_composer_lock/composer.json +0 -5
  227. data/spec/fixtures/repos/php_composer_lock/composer.lock +0 -462
  228. data/spec/fixtures/repos/php_composer_lock/public/index.php +0 -4
  229. data/spec/fixtures/repos/php_no_composer_lock/README +0 -1
  230. data/spec/fixtures/repos/php_no_composer_lock/composer.json +0 -21
  231. data/spec/fixtures/repos/php_no_composer_lock/public/index.php +0 -4
  232. data/spec/fixtures/repos/public_system/Gemfile +0 -4
  233. data/spec/fixtures/repos/public_system/Gemfile.lock +0 -12
  234. data/spec/fixtures/repos/public_system/README +0 -5
  235. data/spec/fixtures/repos/public_system/ey.yml +0 -3
  236. data/spec/fixtures/repos/public_system/public/system/cant_touch_this.txt +0 -3
  237. data/spec/fixtures/repos/sqlite3/Gemfile +0 -4
  238. data/spec/fixtures/repos/sqlite3/Gemfile.lock +0 -89
  239. data/spec/fixtures/repos/sqlite3/README +0 -1
  240. data/spec/fixtures/retwisj.war +0 -0
  241. data/spec/fixtures/valid_hook.rb +0 -1
  242. data/spec/git_strategy_spec.rb +0 -34
  243. data/spec/lockfile_parser_spec.rb +0 -126
  244. data/spec/maintenance_spec.rb +0 -44
  245. data/spec/multi_dependency_manager_spec.rb +0 -25
  246. data/spec/nodejs_deploy_spec.rb +0 -30
  247. data/spec/php_deploy_spec.rb +0 -81
  248. data/spec/platform_configure_spec.rb +0 -61
  249. data/spec/rails31_deploy_spec.rb +0 -172
  250. data/spec/restart_spec.rb +0 -43
  251. data/spec/rollback_spec.rb +0 -87
  252. data/spec/server_spec.rb +0 -70
  253. data/spec/services_deploy_spec.rb +0 -165
  254. data/spec/shell_spec.rb +0 -57
  255. data/spec/source/archive_spec.rb +0 -33
  256. data/spec/source/git_spec.rb +0 -44
  257. data/spec/sqlite3_deploy_spec.rb +0 -38
  258. data/spec/support/integration.rb +0 -103
  259. data/spec/support/source_doubles.rb +0 -28
  260. data/spec/support/timecop.rb +0 -5
  261. data/spec/symlink_spec.rb +0 -15
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ae5f22352514fece09ff9eb57f642aa6d3cd5b8503c397aef41ffd45e11de6c0
4
- data.tar.gz: 9e2732d61febae63336b3ea57805a8ab8736cfa332e52a7bf666e738d766e95e
3
+ metadata.gz: 3fbdbd466a22b707283bf47395220f0a81b77ac9ec926ffcaef805f0d9a2448c
4
+ data.tar.gz: 7289debb0ab4af4df33dec2ae0e6f8464a8e3b883479cafd24fe18423703cf48
5
5
  SHA512:
6
- metadata.gz: 160b8f26f18d7aa68badd7e5bd55883c0630f77a8f3b62eb9e643e69ca639d4a55d983806b85b3495d37d8fcfc9aaf801b587a6314ef6c74222e9a5f5ca21f96
7
- data.tar.gz: e2e81cbef5a4ed51780c9c7ade4d39598bd2eabbc9e0ae6afe81539484c9c8a598807b07180589e9af8a884ffc50fa1e122b4c7187c579ea70fb8f0c0a8d6651
6
+ metadata.gz: 832ef48fc2a640afbf443e680353bb5e77d2c1d05517ef00c06be0c6668117a65da3acdffbb46cecce8e768d29bf5f2656886b070e3109fa91c0378a9f642308
7
+ data.tar.gz: 9f7fb645f31ece040e792ebfacb5a40bf6d74ffd1abf56a1b538fa2b4efab315cddee784c4dc833100c954de4e71ca5e1a5d3b5f653fa53d98cfa7f9a064013d
@@ -0,0 +1,43 @@
1
+ def servers
2
+ recall_fact(:servers)
3
+ end
4
+
5
+ Then %{I see output indicating the enable_maintenance workflow was performed} do
6
+ expect(output_text).to include('maintenance page')
7
+ end
8
+
9
+ Given %{public/system is a symlink to the shared system} do
10
+ system_path.rmtree if system_path.exist?
11
+
12
+ setup_system_link
13
+ end
14
+
15
+ def instances
16
+ servers.map {|server| server[:hostname]}
17
+ end
18
+
19
+ def instance_names
20
+ servers.map {|server| "#{server[:hostname]}:#{server[:name]}"}
21
+ end
22
+
23
+ def instance_roles
24
+ servers.map {|server| "#{server[:hostname]}:#{server[:roles].join(',')}"}
25
+ end
26
+
27
+ When %{I run the enable_maintenance command} do
28
+ instances_flag = (['--instances'] + instances).join(' ')
29
+ instance_names_flag = (['--instance-names'] + instance_names).join(' ')
30
+ instance_roles_flag = (['--instance-roles'] + instance_roles).join(' ')
31
+
32
+ step %{I run `engineyard-serverside enable_maintenance --account-name #{account_name} --app #{app_name} --environment-name #{env_name} #{instances_flag} #{instance_names_flag} #{instance_roles_flag}`}
33
+ end
34
+
35
+ Then %{maintenance is enabled remotely on the solo server} do
36
+ servers.select {|x| x[:roles].include?('solo')}.each do |server|
37
+ expect(ExecutedCommands.maintenance_enabled?(server[:hostname])).to eql(true)
38
+ end
39
+ end
40
+
41
+ Then %{I see a notice that maintenance has been enabled} do
42
+ expect(output_text).to include('Maintenance page enabled')
43
+ end
@@ -0,0 +1,277 @@
1
+ Feature: Running A Deploy Hook
2
+ In order to inject needed extra steps into the deploy process, I want to be able
3
+ to provide hooks for various pre-defined callbacks. Meanwhile, serverside needs
4
+ to know how to execute such hooks.
5
+
6
+ Background:
7
+ Given my account name is TestAccount
8
+ And my app's name is george
9
+ And my app lives in an environment named george_fliggerbop
10
+ And the framework env for my environment is staging
11
+
12
+ Scenario Outline: Running a callback
13
+ When I run `engineyard-serverside hook <Callback Name> --app=george --environment-name=george_fliggerbop --account-name=TestAccount --framework-env=staging`
14
+ Then I see output indicating that the <Callback Name> hooks were processed
15
+
16
+ Examples:
17
+ | Callback Name |
18
+ | before_deploy |
19
+ | before_bundle |
20
+ | after_bundle |
21
+ | before_compile_assets |
22
+ | after_compile_assets |
23
+ | before_migrate |
24
+ | after_migrate |
25
+ | before_symlink |
26
+ | after_symlink |
27
+ | before_restart |
28
+ | after_restart |
29
+ | after_deploy |
30
+
31
+ Scenario Outline: Running a callback with no hooks present
32
+ Given my app has no deploy hooks
33
+ And my app has no service hooks
34
+ When I run the <Callback Name> callback
35
+ Then I see a notice that the <Callback Name> callback was skipped
36
+
37
+ Examples:
38
+ | Callback Name |
39
+ | before_deploy |
40
+ | before_bundle |
41
+ | after_bundle |
42
+ | before_compile_assets |
43
+ | after_compile_assets |
44
+ | before_migrate |
45
+ | after_migrate |
46
+ | before_symlink |
47
+ | after_symlink |
48
+ | before_restart |
49
+ | after_restart |
50
+ | after_deploy |
51
+
52
+ Scenario Outline: Running a callback with a Ruby deploy hook
53
+ Given my app has a <Callback Name> ruby deploy hook
54
+ When I run the <Callback Name> callback
55
+ Then the <Callback Name> ruby deploy hook is executed
56
+
57
+ Examples:
58
+ | Callback Name |
59
+ | before_deploy |
60
+ | before_bundle |
61
+ | after_bundle |
62
+ | before_compile_assets |
63
+ | after_compile_assets |
64
+ | before_migrate |
65
+ | after_migrate |
66
+ | before_symlink |
67
+ | after_symlink |
68
+ | before_restart |
69
+ | after_restart |
70
+ | after_deploy |
71
+
72
+ Scenario Outline: Running a callback with an Executable deploy hook
73
+ Given my app has a <Callback Name> executable deploy hook
74
+ When I run the <Callback Name> callback
75
+ Then the <Callback Name> executable deploy hook is executed
76
+
77
+ Examples:
78
+ | Callback Name |
79
+ | before_deploy |
80
+ | before_bundle |
81
+ | after_bundle |
82
+ | before_compile_assets |
83
+ | after_compile_assets |
84
+ | before_migrate |
85
+ | after_migrate |
86
+ | before_symlink |
87
+ | after_symlink |
88
+ | before_restart |
89
+ | after_restart |
90
+ | after_deploy |
91
+
92
+ Scenario Outline: Running a callback with both Ruby and Executable deploy hooks
93
+ Given my app has a <Callback Name> executable deploy hook
94
+ Given my app has a <Callback Name> ruby deploy hook
95
+ When I run the <Callback Name> callback
96
+ Then the <Callback Name> ruby deploy hook is executed
97
+ But the <Callback Name> executable deploy hook is not executed
98
+
99
+ Examples:
100
+ | Callback Name |
101
+ | before_deploy |
102
+ | before_bundle |
103
+ | after_bundle |
104
+ | before_compile_assets |
105
+ | after_compile_assets |
106
+ | before_migrate |
107
+ | after_migrate |
108
+ | before_symlink |
109
+ | after_symlink |
110
+ | before_restart |
111
+ | after_restart |
112
+ | after_deploy |
113
+
114
+ Scenario Outline: Running a callback with a Ruby service hook
115
+ Given I have a service named selective
116
+ And my service has a <Callback Name> ruby hook
117
+ When I run the <Callback Name> callback
118
+ Then the <Callback Name> ruby hook for my service is executed
119
+
120
+ Examples:
121
+ | Callback Name |
122
+ | before_deploy |
123
+ | before_bundle |
124
+ | after_bundle |
125
+ | before_compile_assets |
126
+ | after_compile_assets |
127
+ | before_migrate |
128
+ | after_migrate |
129
+ | before_symlink |
130
+ | after_symlink |
131
+ | before_restart |
132
+ | after_restart |
133
+ | after_deploy |
134
+
135
+ Scenario Outline: Running a callback with an executable service hook
136
+ Given I have a service named selective
137
+ And my service has a <Callback Name> executable hook
138
+ When I run the <Callback Name> callback
139
+ Then the <Callback Name> executable hook for my service is executed
140
+
141
+ Examples:
142
+ | Callback Name |
143
+ | before_deploy |
144
+ | before_bundle |
145
+ | after_bundle |
146
+ | before_compile_assets |
147
+ | after_compile_assets |
148
+ | before_migrate |
149
+ | after_migrate |
150
+ | before_symlink |
151
+ | after_symlink |
152
+ | before_restart |
153
+ | after_restart |
154
+ | after_deploy |
155
+
156
+ Scenario Outline: Running a callback with both Ruby and Executable service hooks
157
+ Given I have a service named selective
158
+ Given my service has a <Callback Name> executable hook
159
+ Given my service has a <Callback Name> ruby hook
160
+ When I run the <Callback Name> callback
161
+ Then the <Callback Name> ruby hook for my service is executed
162
+ But the <Callback Name> executable hook for my service is not executed
163
+
164
+ Examples:
165
+ | Callback Name |
166
+ | before_deploy |
167
+ | before_bundle |
168
+ | after_bundle |
169
+ | before_compile_assets |
170
+ | after_compile_assets |
171
+ | before_migrate |
172
+ | after_migrate |
173
+ | before_symlink |
174
+ | after_symlink |
175
+ | before_restart |
176
+ | after_restart |
177
+ | after_deploy |
178
+
179
+ Scenario Outline: Running a callback with botth service hooks and deploy hooks
180
+ Given my app has a <Callback Name> executable deploy hook
181
+ And I have a service named selective
182
+ Given my service has a <Callback Name> ruby hook
183
+ When I run the <Callback Name> callback
184
+ Then the <Callback Name> ruby hook for my service is executed
185
+ And the <Callback Name> executable deploy hook is executed
186
+
187
+ Examples:
188
+ | Callback Name |
189
+ | before_deploy |
190
+ | before_bundle |
191
+ | after_bundle |
192
+ | before_compile_assets |
193
+ | after_compile_assets |
194
+ | before_migrate |
195
+ | after_migrate |
196
+ | before_symlink |
197
+ | after_symlink |
198
+ | before_restart |
199
+ | after_restart |
200
+ | after_deploy |
201
+
202
+
203
+ Scenario Outline: Executable hooks without the executable bit get skipped
204
+ Given my app has a <Callback Name> executable deploy hook
205
+ But my app's <Callback Name> executable deploy hook is not actually executable
206
+ And I have a service named selective
207
+ Given my service has a <Callback Name> executable hook
208
+ When I run the <Callback Name> callback
209
+ Then the <Callback Name> executable hook for my service is executed
210
+ But the <Callback Name> executable deploy hook is not executed
211
+
212
+ Examples:
213
+ | Callback Name |
214
+ | before_deploy |
215
+ | before_bundle |
216
+ | after_bundle |
217
+ | before_compile_assets |
218
+ | after_compile_assets |
219
+ | before_migrate |
220
+ | after_migrate |
221
+ | before_symlink |
222
+ | after_symlink |
223
+ | before_restart |
224
+ | after_restart |
225
+ | after_deploy |
226
+
227
+ @error
228
+ Scenario Outline: Ruby hooks with syntax errors cause an error
229
+ Given my app has a <Callback Name> ruby deploy hook
230
+ And I have a service named selective
231
+ And my service has a <Callback Name> ruby hook
232
+ But my service's <Callback Name> ruby hook contains syntax errors
233
+ When I run the <Callback Name> callback
234
+ Then I see a notice about the <Callback Name> syntax error
235
+ But my service's <Callback Name> ruby hook is not executed
236
+ And the <Callback Name> ruby deploy hook is not executed
237
+
238
+ Examples:
239
+ | Callback Name |
240
+ | before_deploy |
241
+ | before_bundle |
242
+ | after_bundle |
243
+ | before_compile_assets |
244
+ | after_compile_assets |
245
+ | before_migrate |
246
+ | after_migrate |
247
+ | before_symlink |
248
+ | after_symlink |
249
+ | before_restart |
250
+ | after_restart |
251
+ | after_deploy |
252
+
253
+ @failure
254
+ Scenario Outline: Ruby hooks with syntax errors cause an error
255
+ Given my app has a <Callback Name> ruby deploy hook
256
+ And I have a service named selective
257
+ And my service has a <Callback Name> ruby hook
258
+ But my service's <Callback Name> ruby hook is prone to errors
259
+ When I run the <Callback Name> callback
260
+ Then the <Callback Name> ruby hook for my service is executed
261
+ But I see a notice about the <Callback Name> exception
262
+ And the <Callback Name> ruby deploy hook is not executed
263
+
264
+ Examples:
265
+ | Callback Name |
266
+ | before_deploy |
267
+ | before_bundle |
268
+ | after_bundle |
269
+ | before_compile_assets |
270
+ | after_compile_assets |
271
+ | before_migrate |
272
+ | after_migrate |
273
+ | before_symlink |
274
+ | after_symlink |
275
+ | before_restart |
276
+ | after_restart |
277
+ | after_deploy |
@@ -0,0 +1,200 @@
1
+ require 'fileutils'
2
+
3
+ def account_name
4
+ recall_fact(:account_name)
5
+ end
6
+
7
+ def app_name
8
+ recall_fact(:app_name)
9
+ end
10
+
11
+ def env_name
12
+ recall_fact(:env_name)
13
+ end
14
+
15
+ def framework_env
16
+ recall_fact(:framework_env)
17
+ end
18
+
19
+ def service_name
20
+ recall_fact(:service_name)
21
+ end
22
+
23
+ Given %r{^my account name is (.+)$} do |account_name|
24
+ memorize_fact(:account_name, account_name)
25
+ end
26
+
27
+ Given %r{^my app's name is (.+)$} do |app_name|
28
+ memorize_fact(:app_name, app_name)
29
+ setup_release_path
30
+ end
31
+
32
+ Given %r{^my app lives in an environment named (.+)$} do |env_name|
33
+ memorize_fact(:env_name, env_name)
34
+ end
35
+
36
+ Given %r{^the framework env for my environment is (.+)$} do |framework_env|
37
+ memorize_fact(:framework_env, framework_env)
38
+ end
39
+
40
+ Then %r{^I see output indicating that the (.+) hooks were processed$} do |hook_name|
41
+ expect(output_text).to include(hook_name)
42
+ end
43
+
44
+ Given %{my app has no deploy hooks} do
45
+ cleanup_deploy_hooks_path
46
+ true
47
+ end
48
+
49
+ Given %{my app has no service hooks} do
50
+ cleanup_shared_hooks_path
51
+ true
52
+ end
53
+
54
+ When %r{^I run the (.+) callback$} do |callback_name|
55
+ #puts "Data: '#{Dir["#{data_path}/**/*"]}'"
56
+
57
+ config = {:deploy_to => app_path.to_s}
58
+
59
+ command = [
60
+ 'engineyard-serverside',
61
+ 'hook',
62
+ callback_name,
63
+ "--app=#{app_name}",
64
+ "--environment-name=#{env_name}",
65
+ "--account-name=#{account_name}",
66
+ "--framework-env=#{framework_env}",
67
+ "--release-path=#{release_path}",
68
+ "--config='#{config.to_json}'"
69
+ ].join(' ')
70
+
71
+ step %(I run `#{command}`)
72
+ end
73
+
74
+ Then %r{^I see a notice that the (.+) callback was skipped$} do |callback_name|
75
+ expect(output_text).to include("#{callback_name}. Skipping.")
76
+ end
77
+
78
+ def write_ruby_deploy_hook(callback_name, content)
79
+ setup_deploy_hooks_path
80
+
81
+ hook = deploy_hooks_path.join("#{callback_name}.rb")
82
+
83
+ f = File.open(hook.to_s, 'w')
84
+ f.write(content.to_s)
85
+ f.close
86
+ end
87
+
88
+ def write_ruby_service_hook(callback_name, content)
89
+ setup_service_path(service_name)
90
+
91
+ hook = service_path(service_name).join("#{callback_name}.rb")
92
+
93
+ f = File.open(hook.to_s, 'w')
94
+ f.write(content.to_s)
95
+ f.close
96
+ end
97
+
98
+ Given %r{^my app has a (.+) ruby deploy hook$} do |callback_name|
99
+ write_ruby_deploy_hook(callback_name, 'true')
100
+ end
101
+
102
+ Then %r{^the (.+) ruby deploy hook is executed$} do |callback_name|
103
+ expect(output_text).
104
+ to include("Executing #{deploy_hooks_path.join("#{callback_name}.rb")}")
105
+ end
106
+
107
+ Given %r{^my app has a (.+) executable deploy hook$} do |callback_name|
108
+ setup_deploy_hooks_path
109
+
110
+ hook = deploy_hooks_path.join(callback_name)
111
+ f = File.open(hook.to_s, 'w')
112
+ f.write("#!/bin/bash\n\necho #{hook.to_s}")
113
+ f.close
114
+
115
+ hook.chmod(0755)
116
+ end
117
+
118
+ Then %r{^the (.+) executable deploy hook is executed$} do |callback_name|
119
+ expect(ExecutedCommands.deploy_hook_executed?(callback_name)).to eql(true)
120
+ end
121
+
122
+ Then %r{^the (.+) executable deploy hook is not executed$} do |callback_name|
123
+ expect(ExecutedCommands.deploy_hook_executed?(callback_name)).to eql(false)
124
+ end
125
+
126
+ Given %r{^I have a service named (.+)$} do |service_name|
127
+ memorize_fact(:service_name, service_name)
128
+ end
129
+
130
+ Given %r{^my service has a (.+) ruby hook$} do |callback_name|
131
+ write_ruby_service_hook(callback_name, 'true')
132
+ end
133
+
134
+ Then %r{^the (.+) ruby hook for my service is executed$} do |callback_name|
135
+ hook = service_path(service_name).join("#{callback_name}.rb")
136
+
137
+ expect(output_text).to include("Executing #{hook}")
138
+ end
139
+
140
+ Given %r{^my service has a (.+) executable hook$} do |callback_name|
141
+ setup_service_path(service_name)
142
+
143
+ hook = service_path(service_name).join(callback_name)
144
+ f = File.open(hook.to_s, 'w')
145
+ f.write("#!/bin/bash\n\necho #{hook.to_s}")
146
+ f.close
147
+
148
+ hook.chmod(0755)
149
+ end
150
+
151
+ Then %r{^the (.+) executable hook for my service is executed$} do |callback_name|
152
+ expect(ExecutedCommands.service_hook_executed?(service_name, callback_name)).
153
+ to eql(true)
154
+ end
155
+
156
+ Then %r{^the (.+) executable hook for my service is not executed$} do |callback_name|
157
+ expect(ExecutedCommands.service_hook_executed?(service_name, callback_name)).
158
+ to eql(false)
159
+ end
160
+
161
+ Given %r{^my app's (.+) executable deploy hook is not actually executable$} do |callback_name|
162
+ hook = deploy_hooks_path.join(callback_name)
163
+
164
+ hook.chmod(0644)
165
+ end
166
+
167
+ Given %r{^my service's (.+) ruby hook contains syntax errors$} do |callback_name|
168
+ write_ruby_service_hook(callback_name, "# encoding: UTF-8\n\n)")
169
+ end
170
+
171
+ Then %r{^I see a notice about the (.+) syntax error$} do |callback_name|
172
+ hook = service_path(service_name).join("#{callback_name}.rb")
173
+ expect(output_text).to include("*** [Error] Invalid Ruby syntax in hook: #{hook}")
174
+ end
175
+
176
+ Then %r(^my service's (.+) ruby hook is not executed$) do |callback_name|
177
+ hook = service_path(service_name).join("#{callback_name}.rb")
178
+
179
+ expect(output_text).not_to include("Executing #{hook}")
180
+ end
181
+
182
+ Given %r{^my service's (.+) ruby hook is prone to errors$} do |callback_name|
183
+ write_ruby_service_hook(callback_name, "raise 'a ruckus'")
184
+ end
185
+
186
+ Then %r{^I see a notice about the (.+) exception$} do |callback_name|
187
+ hook = service_path(service_name).join("#{callback_name}.rb")
188
+
189
+ expect(output_text).
190
+ to include("Exception raised in hook #{hook.to_s}")
191
+ end
192
+
193
+ Then %r{^the (.+) ruby deploy hook is not executed$} do |callback_name|
194
+ expect(output_text).
195
+ not_to include("Executing #{deploy_hooks_path.join("#{callback_name}.rb")}")
196
+ end
197
+
198
+ Then %{I see the output} do
199
+ puts "OUTPUT START\n\n#{output_text}\n\nOUTPUT END"
200
+ end