engineyard-serverside 2.8.0.pre4 → 3.0.4

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 (308) hide show
  1. checksums.yaml +13 -5
  2. data/features/hook/running-a-deploy-hook.feature +277 -0
  3. data/features/hook/step_definitions/running-a-deploy-hook-steps.rb +200 -0
  4. data/features/step_definitions/command_steps.rb +8 -0
  5. data/features/step_definitions/version_steps.rb +5 -0
  6. data/features/support/env.rb +63 -0
  7. data/features/support/error_codes.rb +17 -0
  8. data/features/support/fs_helpers.rb +82 -0
  9. data/features/support/output_helpers.rb +7 -0
  10. data/features/support/runner.rb +41 -0
  11. data/features/version.feature +7 -0
  12. data/lib/engineyard-serverside/cli/app.rb +6 -0
  13. data/lib/engineyard-serverside/configuration.rb +3 -3
  14. data/lib/engineyard-serverside/deploy.rb +2 -1
  15. data/lib/engineyard-serverside/propagator.rb +1 -1
  16. data/lib/engineyard-serverside/shell.rb +38 -10
  17. data/lib/engineyard-serverside/version.rb +1 -1
  18. data/lib/engineyard-serverside.rb +2 -5
  19. data/spec/engineyard-serverside/callbacks/collection/combined_spec.rb +232 -0
  20. data/spec/engineyard-serverside/callbacks/collection/deploy_hooks_spec.rb +170 -0
  21. data/spec/engineyard-serverside/callbacks/collection/service_hooks/collection_spec.rb +171 -0
  22. data/spec/engineyard-serverside/callbacks/collection/service_hooks/combined_spec.rb +174 -0
  23. data/spec/engineyard-serverside/callbacks/collection/service_hooks_spec.rb +31 -0
  24. data/spec/engineyard-serverside/callbacks/collection_spec.rb +49 -0
  25. data/spec/engineyard-serverside/callbacks/distributor/remote_spec.rb +135 -0
  26. data/spec/engineyard-serverside/callbacks/distributor/viability_filter_spec.rb +208 -0
  27. data/spec/engineyard-serverside/callbacks/distributor_spec.rb +43 -0
  28. data/spec/engineyard-serverside/callbacks/executor/executable_spec.rb +386 -0
  29. data/spec/engineyard-serverside/callbacks/executor/ruby/context_spec.rb +538 -0
  30. data/spec/engineyard-serverside/callbacks/executor/ruby/executor_spec.rb +313 -0
  31. data/spec/engineyard-serverside/callbacks/executor/ruby_spec.rb +35 -0
  32. data/spec/engineyard-serverside/callbacks/executor_spec.rb +45 -0
  33. data/spec/engineyard-serverside/callbacks_spec.rb +31 -0
  34. data/spec/engineyard-serverside/cli/workflows/base_spec.rb +237 -0
  35. data/spec/engineyard-serverside/cli/workflows/calling_deploy_hooks_spec.rb +65 -0
  36. data/spec/engineyard-serverside/cli/workflows/deploying_applications_spec.rb +61 -0
  37. data/spec/engineyard-serverside/cli/workflows/disabling_maintenance_spec.rb +61 -0
  38. data/spec/engineyard-serverside/cli/workflows/enabling_maintenance_spec.rb +61 -0
  39. data/spec/engineyard-serverside/cli/workflows/helpers_spec.rb +64 -0
  40. data/spec/engineyard-serverside/cli/workflows/rolling_back_applications_spec.rb +61 -0
  41. data/spec/engineyard-serverside/cli/workflows/showing_maintenance_status_spec.rb +60 -0
  42. data/spec/engineyard-serverside/cli/workflows_spec.rb +87 -0
  43. data/spec/engineyard-serverside/dependency_manager/base_spec.rb +139 -0
  44. data/spec/engineyard-serverside/paths_spec.rb +820 -0
  45. data/spec/engineyard-serverside/propagator_spec.rb +56 -0
  46. data/spec/engineyard-serverside/server_spec.rb +390 -0
  47. data/spec/engineyard-serverside/shell/helpers_spec.rb +98 -0
  48. data/spec/engineyard-serverside/shell/yieldio_spec.rb +33 -0
  49. data/spec/engineyard-serverside/shell_spec.rb +543 -0
  50. data/spec/engineyard-serverside/slug/distributor_spec.rb +199 -0
  51. data/spec/engineyard-serverside/slug/enabler_spec.rb +191 -0
  52. data/spec/engineyard-serverside/slug/failure_handler_spec.rb +114 -0
  53. data/spec/engineyard-serverside/slug/finalizer_spec.rb +191 -0
  54. data/spec/engineyard-serverside/slug/generator_spec.rb +82 -0
  55. data/spec/engineyard-serverside/slug/migrator_spec.rb +137 -0
  56. data/spec/engineyard-serverside/slug/restarter_spec.rb +226 -0
  57. data/spec/engineyard-serverside/slug/source/updater_spec.rb +710 -0
  58. data/spec/engineyard-serverside/slug/source_spec.rb +40 -0
  59. data/spec/engineyard-serverside/source_spec.rb +171 -0
  60. data/spec/railway_spec.rb +130 -0
  61. data/spec/result/failure_spec.rb +113 -0
  62. data/spec/result/success_spec.rb +109 -0
  63. data/spec/result_spec.rb +23 -0
  64. data/spec/spec_helper.rb +3 -349
  65. metadata +189 -490
  66. data/lib/vendor/json_pure/COPYING +0 -57
  67. data/lib/vendor/json_pure/GPL +0 -340
  68. data/lib/vendor/json_pure/README.rdoc +0 -358
  69. data/lib/vendor/json_pure/VERSION +0 -1
  70. data/lib/vendor/json_pure/lib/json/add/bigdecimal.rb +0 -28
  71. data/lib/vendor/json_pure/lib/json/add/complex.rb +0 -22
  72. data/lib/vendor/json_pure/lib/json/add/core.rb +0 -11
  73. data/lib/vendor/json_pure/lib/json/add/date.rb +0 -34
  74. data/lib/vendor/json_pure/lib/json/add/date_time.rb +0 -48
  75. data/lib/vendor/json_pure/lib/json/add/exception.rb +0 -31
  76. data/lib/vendor/json_pure/lib/json/add/ostruct.rb +0 -31
  77. data/lib/vendor/json_pure/lib/json/add/range.rb +0 -29
  78. data/lib/vendor/json_pure/lib/json/add/rational.rb +0 -22
  79. data/lib/vendor/json_pure/lib/json/add/regexp.rb +0 -30
  80. data/lib/vendor/json_pure/lib/json/add/struct.rb +0 -30
  81. data/lib/vendor/json_pure/lib/json/add/symbol.rb +0 -25
  82. data/lib/vendor/json_pure/lib/json/add/time.rb +0 -38
  83. data/lib/vendor/json_pure/lib/json/common.rb +0 -484
  84. data/lib/vendor/json_pure/lib/json/ext.rb +0 -21
  85. data/lib/vendor/json_pure/lib/json/generic_object.rb +0 -70
  86. data/lib/vendor/json_pure/lib/json/pure/generator.rb +0 -522
  87. data/lib/vendor/json_pure/lib/json/pure/parser.rb +0 -359
  88. data/lib/vendor/json_pure/lib/json/pure.rb +0 -21
  89. data/lib/vendor/json_pure/lib/json/version.rb +0 -8
  90. data/lib/vendor/json_pure/lib/json.rb +0 -62
  91. data/lib/vendor/multi_json/CHANGELOG.md +0 -121
  92. data/lib/vendor/multi_json/CONTRIBUTING.md +0 -46
  93. data/lib/vendor/multi_json/Gemfile +0 -31
  94. data/lib/vendor/multi_json/LICENSE.md +0 -20
  95. data/lib/vendor/multi_json/README.md +0 -105
  96. data/lib/vendor/multi_json/Rakefile +0 -12
  97. data/lib/vendor/multi_json/lib/multi_json/adapters/gson.rb +0 -20
  98. data/lib/vendor/multi_json/lib/multi_json/adapters/json_common.rb +0 -35
  99. data/lib/vendor/multi_json/lib/multi_json/adapters/json_gem.rb +0 -12
  100. data/lib/vendor/multi_json/lib/multi_json/adapters/json_pure.rb +0 -12
  101. data/lib/vendor/multi_json/lib/multi_json/adapters/nsjsonserialization.rb +0 -35
  102. data/lib/vendor/multi_json/lib/multi_json/adapters/oj.rb +0 -29
  103. data/lib/vendor/multi_json/lib/multi_json/adapters/ok_json.rb +0 -58
  104. data/lib/vendor/multi_json/lib/multi_json/adapters/yajl.rb +0 -20
  105. data/lib/vendor/multi_json/lib/multi_json/vendor/okjson.rb +0 -602
  106. data/lib/vendor/multi_json/lib/multi_json/version.rb +0 -3
  107. data/lib/vendor/multi_json/lib/multi_json.rb +0 -137
  108. data/lib/vendor/multi_json/spec/adapter_shared_example.rb +0 -162
  109. data/lib/vendor/multi_json/spec/helper.rb +0 -45
  110. data/lib/vendor/multi_json/spec/json_common_shared_example.rb +0 -36
  111. data/lib/vendor/multi_json/spec/multi_json_spec.rb +0 -151
  112. data/spec/archive_deploy_spec.rb +0 -53
  113. data/spec/basic_deploy_spec.rb +0 -26
  114. data/spec/bundler_deploy_spec.rb +0 -160
  115. data/spec/configuration_spec.rb +0 -206
  116. data/spec/custom_deploy_spec.rb +0 -128
  117. data/spec/deploy_hook_spec.rb +0 -378
  118. data/spec/deprecation_spec.rb +0 -23
  119. data/spec/ey_yml_customized_deploy_spec.rb +0 -99
  120. data/spec/fixtures/gitrepo.tar.gz +0 -0
  121. data/spec/fixtures/invalid_hook.rb +0 -1
  122. data/spec/fixtures/lockfiles/0.9-no-bundler +0 -111
  123. data/spec/fixtures/lockfiles/0.9-with-bundler +0 -117
  124. data/spec/fixtures/lockfiles/1.0-no-bundler +0 -54
  125. data/spec/fixtures/lockfiles/1.0.0.rc.1-with-bundler +0 -162
  126. data/spec/fixtures/lockfiles/1.0.18-do_mysql +0 -88
  127. data/spec/fixtures/lockfiles/1.0.18-do_postgres +0 -79
  128. data/spec/fixtures/lockfiles/1.0.18-mysql +0 -43
  129. data/spec/fixtures/lockfiles/1.0.18-mysql2 +0 -43
  130. data/spec/fixtures/lockfiles/1.0.18-pg +0 -43
  131. data/spec/fixtures/lockfiles/1.0.6-no-bundler +0 -51
  132. data/spec/fixtures/lockfiles/1.0.6-with-any-bundler +0 -52
  133. data/spec/fixtures/lockfiles/1.0.6-with-bundler +0 -52
  134. data/spec/fixtures/lockfiles/1.15.1-no-bundler +0 -51
  135. data/spec/fixtures/lockfiles/1.3.1-rails-3.2.13 +0 -112
  136. data/spec/fixtures/lockfiles/not-a-lockfile +0 -1
  137. data/spec/fixtures/repos/assets_detected/Gemfile +0 -5
  138. data/spec/fixtures/repos/assets_detected/Gemfile.lock +0 -88
  139. data/spec/fixtures/repos/assets_detected/README +0 -1
  140. data/spec/fixtures/repos/assets_detected/Rakefile +0 -5
  141. data/spec/fixtures/repos/assets_detected/app/assets/empty +0 -0
  142. data/spec/fixtures/repos/assets_detected/config/application.rb +0 -5
  143. data/spec/fixtures/repos/assets_detected/config/ey.yml +0 -3
  144. data/spec/fixtures/repos/assets_disabled/Gemfile +0 -5
  145. data/spec/fixtures/repos/assets_disabled/Gemfile.lock +0 -88
  146. data/spec/fixtures/repos/assets_disabled/README +0 -1
  147. data/spec/fixtures/repos/assets_disabled/Rakefile +0 -6
  148. data/spec/fixtures/repos/assets_disabled/app/assets/empty +0 -0
  149. data/spec/fixtures/repos/assets_disabled/config/application.rb +0 -5
  150. data/spec/fixtures/repos/assets_disabled/config/ey.yml +0 -3
  151. data/spec/fixtures/repos/assets_disabled_in_ey_yml/Gemfile +0 -5
  152. data/spec/fixtures/repos/assets_disabled_in_ey_yml/Gemfile.lock +0 -88
  153. data/spec/fixtures/repos/assets_disabled_in_ey_yml/README +0 -1
  154. data/spec/fixtures/repos/assets_disabled_in_ey_yml/Rakefile +0 -6
  155. data/spec/fixtures/repos/assets_disabled_in_ey_yml/app/assets/empty +0 -0
  156. data/spec/fixtures/repos/assets_disabled_in_ey_yml/config/application.rb +0 -5
  157. data/spec/fixtures/repos/assets_disabled_in_ey_yml/config/ey.yml +0 -5
  158. data/spec/fixtures/repos/assets_disabled_utf8/Gemfile +0 -5
  159. data/spec/fixtures/repos/assets_disabled_utf8/Gemfile.lock +0 -88
  160. data/spec/fixtures/repos/assets_disabled_utf8/README +0 -3
  161. data/spec/fixtures/repos/assets_disabled_utf8/Rakefile +0 -5
  162. data/spec/fixtures/repos/assets_disabled_utf8/app/assets/empty +0 -0
  163. data/spec/fixtures/repos/assets_disabled_utf8/config/application.rb +0 -7
  164. data/spec/fixtures/repos/assets_disabled_utf8/config/ey.yml +0 -3
  165. data/spec/fixtures/repos/assets_enabled_all/Gemfile +0 -5
  166. data/spec/fixtures/repos/assets_enabled_all/Gemfile.lock +0 -88
  167. data/spec/fixtures/repos/assets_enabled_all/README +0 -1
  168. data/spec/fixtures/repos/assets_enabled_all/app/assets/empty +0 -0
  169. data/spec/fixtures/repos/assets_enabled_all/config/application.rb +0 -5
  170. data/spec/fixtures/repos/assets_enabled_all/config/ey.yml +0 -6
  171. data/spec/fixtures/repos/assets_enabled_all/script/assets +0 -5
  172. data/spec/fixtures/repos/assets_enabled_all/tmp/obstruction +0 -1
  173. data/spec/fixtures/repos/assets_enabled_in_ey_yml/Gemfile +0 -3
  174. data/spec/fixtures/repos/assets_enabled_in_ey_yml/Gemfile.lock +0 -10
  175. data/spec/fixtures/repos/assets_enabled_in_ey_yml/README +0 -1
  176. data/spec/fixtures/repos/assets_enabled_in_ey_yml/Rakefile +0 -8
  177. data/spec/fixtures/repos/assets_enabled_in_ey_yml/config/ey.yml +0 -4
  178. data/spec/fixtures/repos/assets_enabled_util_only/Gemfile +0 -5
  179. data/spec/fixtures/repos/assets_enabled_util_only/Gemfile.lock +0 -88
  180. data/spec/fixtures/repos/assets_enabled_util_only/README +0 -1
  181. data/spec/fixtures/repos/assets_enabled_util_only/Rakefile +0 -6
  182. data/spec/fixtures/repos/assets_enabled_util_only/app/assets/empty +0 -0
  183. data/spec/fixtures/repos/assets_enabled_util_only/config/application.rb +0 -5
  184. data/spec/fixtures/repos/assets_enabled_util_only/config/ey.yml +0 -6
  185. data/spec/fixtures/repos/assets_error/Gemfile +0 -5
  186. data/spec/fixtures/repos/assets_error/Gemfile.lock +0 -88
  187. data/spec/fixtures/repos/assets_error/README +0 -1
  188. data/spec/fixtures/repos/assets_error/Rakefile +0 -4
  189. data/spec/fixtures/repos/assets_error/app/assets/empty +0 -0
  190. data/spec/fixtures/repos/assets_error/config/application.rb +0 -5
  191. data/spec/fixtures/repos/assets_error/config/ey.yml +0 -4
  192. data/spec/fixtures/repos/assets_in_hook/Gemfile +0 -5
  193. data/spec/fixtures/repos/assets_in_hook/Gemfile.lock +0 -88
  194. data/spec/fixtures/repos/assets_in_hook/README +0 -2
  195. data/spec/fixtures/repos/assets_in_hook/Rakefile +0 -5
  196. data/spec/fixtures/repos/assets_in_hook/app/assets/empty +0 -0
  197. data/spec/fixtures/repos/assets_in_hook/config/application.rb +0 -5
  198. data/spec/fixtures/repos/assets_in_hook/config/ey.yml +0 -3
  199. data/spec/fixtures/repos/assets_in_hook/deploy/before_compile_assets.rb +0 -2
  200. data/spec/fixtures/repos/bundle_fails/Gemfile +0 -1
  201. data/spec/fixtures/repos/bundle_fails/README +0 -1
  202. data/spec/fixtures/repos/bundle_fails/deploy/after_bundle.rb +0 -1
  203. data/spec/fixtures/repos/bundler_disabled/Gemfile +0 -4
  204. data/spec/fixtures/repos/bundler_disabled/Gemfile.lock +0 -12
  205. data/spec/fixtures/repos/bundler_disabled/README +0 -1
  206. data/spec/fixtures/repos/bundler_disabled/config/ey.yml +0 -2
  207. data/spec/fixtures/repos/bundler_disabled/deploy/after_bundle.rb +0 -1
  208. data/spec/fixtures/repos/bundler_disabled/deploy/before_bundle.rb +0 -1
  209. data/spec/fixtures/repos/bundler_old/Gemfile +0 -5
  210. data/spec/fixtures/repos/bundler_old/Gemfile.lock +0 -15
  211. data/spec/fixtures/repos/bundler_old/README +0 -1
  212. data/spec/fixtures/repos/default/Gemfile +0 -4
  213. data/spec/fixtures/repos/default/Gemfile.lock +0 -12
  214. data/spec/fixtures/repos/default/README +0 -5
  215. data/spec/fixtures/repos/default/ey.yml +0 -3
  216. data/spec/fixtures/repos/executable_hooks/README +0 -1
  217. data/spec/fixtures/repos/executable_hooks/deploy/before_restart +0 -72
  218. data/spec/fixtures/repos/executable_hooks_not_executable/README +0 -3
  219. data/spec/fixtures/repos/executable_hooks_not_executable/deploy/before_restart +0 -3
  220. data/spec/fixtures/repos/ey_yml/Gemfile +0 -4
  221. data/spec/fixtures/repos/ey_yml/Gemfile.lock +0 -12
  222. data/spec/fixtures/repos/ey_yml/README +0 -1
  223. data/spec/fixtures/repos/ey_yml/config/ey.yml +0 -18
  224. data/spec/fixtures/repos/ey_yml/deploy/before_migrate.rb +0 -6
  225. data/spec/fixtures/repos/ey_yml_alt/Gemfile +0 -4
  226. data/spec/fixtures/repos/ey_yml_alt/Gemfile.lock +0 -12
  227. data/spec/fixtures/repos/ey_yml_alt/README +0 -1
  228. data/spec/fixtures/repos/ey_yml_alt/deploy/before_migrate.rb +0 -6
  229. data/spec/fixtures/repos/ey_yml_alt/ey.yml +0 -12
  230. data/spec/fixtures/repos/hook_fails/README +0 -1
  231. data/spec/fixtures/repos/hook_fails/deploy/before_deploy.rb +0 -1
  232. data/spec/fixtures/repos/hooks/README +0 -1
  233. data/spec/fixtures/repos/hooks/deploy/after_bundle.rb +0 -1
  234. data/spec/fixtures/repos/hooks/deploy/after_compile_assets.rb +0 -1
  235. data/spec/fixtures/repos/hooks/deploy/after_deploy.rb +0 -1
  236. data/spec/fixtures/repos/hooks/deploy/after_migrate.rb +0 -1
  237. data/spec/fixtures/repos/hooks/deploy/after_restart.rb +0 -1
  238. data/spec/fixtures/repos/hooks/deploy/after_symlink.rb +0 -1
  239. data/spec/fixtures/repos/hooks/deploy/before_bundle.rb +0 -1
  240. data/spec/fixtures/repos/hooks/deploy/before_compile_assets.rb +0 -1
  241. data/spec/fixtures/repos/hooks/deploy/before_deploy.rb +0 -1
  242. data/spec/fixtures/repos/hooks/deploy/before_migrate.rb +0 -1
  243. data/spec/fixtures/repos/hooks/deploy/before_restart.rb +0 -1
  244. data/spec/fixtures/repos/hooks/deploy/before_symlink.rb +0 -1
  245. data/spec/fixtures/repos/multi_dep_manager/README +0 -1
  246. data/spec/fixtures/repos/multi_dep_manager/composer.json +0 -5
  247. data/spec/fixtures/repos/multi_dep_manager/composer.lock +0 -462
  248. data/spec/fixtures/repos/multi_dep_manager/package.json +0 -7
  249. data/spec/fixtures/repos/multi_dep_manager/public/index.php +0 -4
  250. data/spec/fixtures/repos/no_ey_config/Gemfile +0 -3
  251. data/spec/fixtures/repos/no_ey_config/Gemfile.lock +0 -10
  252. data/spec/fixtures/repos/no_ey_config/README +0 -1
  253. data/spec/fixtures/repos/no_ey_config/ey.yml +0 -3
  254. data/spec/fixtures/repos/no_ey_config_no_warning/Gemfile +0 -3
  255. data/spec/fixtures/repos/no_ey_config_no_warning/Gemfile.lock +0 -10
  256. data/spec/fixtures/repos/no_ey_config_no_warning/README +0 -1
  257. data/spec/fixtures/repos/no_ey_config_no_warning/ey.yml +0 -5
  258. data/spec/fixtures/repos/no_gemfile_lock/Gemfile +0 -4
  259. data/spec/fixtures/repos/no_gemfile_lock/README +0 -1
  260. data/spec/fixtures/repos/no_gemfile_lock/ey.yml +0 -3
  261. data/spec/fixtures/repos/nodejs/README +0 -1
  262. data/spec/fixtures/repos/nodejs/package.json +0 -7
  263. data/spec/fixtures/repos/not_bundled/README +0 -1
  264. data/spec/fixtures/repos/npm_disabled/README +0 -1
  265. data/spec/fixtures/repos/npm_disabled/config/ey.yml +0 -2
  266. data/spec/fixtures/repos/npm_disabled/package.json +0 -7
  267. data/spec/fixtures/repos/php_composer_disabled/README +0 -1
  268. data/spec/fixtures/repos/php_composer_disabled/composer.json +0 -5
  269. data/spec/fixtures/repos/php_composer_disabled/composer.lock +0 -462
  270. data/spec/fixtures/repos/php_composer_disabled/config/ey.yml +0 -2
  271. data/spec/fixtures/repos/php_composer_disabled/public/index.php +0 -4
  272. data/spec/fixtures/repos/php_composer_lock/README +0 -1
  273. data/spec/fixtures/repos/php_composer_lock/composer.json +0 -5
  274. data/spec/fixtures/repos/php_composer_lock/composer.lock +0 -462
  275. data/spec/fixtures/repos/php_composer_lock/public/index.php +0 -4
  276. data/spec/fixtures/repos/php_no_composer_lock/README +0 -1
  277. data/spec/fixtures/repos/php_no_composer_lock/composer.json +0 -21
  278. data/spec/fixtures/repos/php_no_composer_lock/public/index.php +0 -4
  279. data/spec/fixtures/repos/public_system/Gemfile +0 -4
  280. data/spec/fixtures/repos/public_system/Gemfile.lock +0 -12
  281. data/spec/fixtures/repos/public_system/README +0 -5
  282. data/spec/fixtures/repos/public_system/ey.yml +0 -3
  283. data/spec/fixtures/repos/public_system/public/system/cant_touch_this.txt +0 -3
  284. data/spec/fixtures/repos/sqlite3/Gemfile +0 -4
  285. data/spec/fixtures/repos/sqlite3/Gemfile.lock +0 -89
  286. data/spec/fixtures/repos/sqlite3/README +0 -1
  287. data/spec/fixtures/retwisj.war +0 -0
  288. data/spec/fixtures/valid_hook.rb +0 -1
  289. data/spec/git_strategy_spec.rb +0 -34
  290. data/spec/lockfile_parser_spec.rb +0 -126
  291. data/spec/maintenance_spec.rb +0 -44
  292. data/spec/multi_dependency_manager_spec.rb +0 -25
  293. data/spec/nodejs_deploy_spec.rb +0 -30
  294. data/spec/php_deploy_spec.rb +0 -81
  295. data/spec/platform_configure_spec.rb +0 -61
  296. data/spec/rails31_deploy_spec.rb +0 -172
  297. data/spec/restart_spec.rb +0 -43
  298. data/spec/rollback_spec.rb +0 -87
  299. data/spec/server_spec.rb +0 -70
  300. data/spec/services_deploy_spec.rb +0 -165
  301. data/spec/shell_spec.rb +0 -57
  302. data/spec/source/archive_spec.rb +0 -33
  303. data/spec/source/git_spec.rb +0 -44
  304. data/spec/sqlite3_deploy_spec.rb +0 -38
  305. data/spec/support/integration.rb +0 -103
  306. data/spec/support/source_doubles.rb +0 -28
  307. data/spec/support/timecop.rb +0 -5
  308. data/spec/symlink_spec.rb +0 -15
checksums.yaml CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: ae5f22352514fece09ff9eb57f642aa6d3cd5b8503c397aef41ffd45e11de6c0
4
- data.tar.gz: 9e2732d61febae63336b3ea57805a8ab8736cfa332e52a7bf666e738d766e95e
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ YjVjNTU5ZjVkOGJmODg2ZmQxOTlkNWJmNTMzNDczZTMzYmU1ZGQwZg==
5
+ data.tar.gz: !binary |-
6
+ NWNmNmU2YTFjNWM3OTZhM2IzYzFmOWMwNWQzZGY2YTZmOTdkMWVhZA==
5
7
  SHA512:
6
- metadata.gz: 160b8f26f18d7aa68badd7e5bd55883c0630f77a8f3b62eb9e643e69ca639d4a55d983806b85b3495d37d8fcfc9aaf801b587a6314ef6c74222e9a5f5ca21f96
7
- data.tar.gz: e2e81cbef5a4ed51780c9c7ade4d39598bd2eabbc9e0ae6afe81539484c9c8a598807b07180589e9af8a884ffc50fa1e122b4c7187c579ea70fb8f0c0a8d6651
8
+ metadata.gz: !binary |-
9
+ MTVmYjBhMjYyM2QwM2U0YjIzMDdhZjIyY2EzNGNhZWQ5ZDJlZThjOTY4NzQw
10
+ MjU5M2JmYjhjOGRhYTg5Y2M4NTI3ZTlkMGQ4OGIwOTg2MjY5NzQzM2UxYzI5
11
+ NTkxM2Y4ZWU1ZTAxMzUxZjY2MDIzZDg0OGVlMzk0MWVlYzczODQ=
12
+ data.tar.gz: !binary |-
13
+ ZWZmNmI5ZTY0NjJjOGVkNjAyNWJjZDc3NjY5MTA3MDZlNDA4ZDlmNTdhZjJm
14
+ NmUyZjA3MjhjNmE4ZGViZWM1ZTVlNTgzZDBlYzNlYmNlZGNkYThmM2ZjMjFk
15
+ MTdiYTc0MjMxYWFkNjQyZTQzZTkwN2Q4NWI3Mzc3YTgzOGFmMzI=
@@ -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
@@ -0,0 +1,8 @@
1
+ Then %(the command has an unsuccessful exit status) do
2
+ step %{the exit status should not be 0}
3
+ step %{the exit status should not be 255}
4
+ end
5
+
6
+ Then %(the command suffers a critical failure) do
7
+ step %{the exit status should be 255}
8
+ end
@@ -0,0 +1,5 @@
1
+ require 'engineyard-serverside/version'
2
+
3
+ Then %{the current version is displayed} do
4
+ expect(output_text).to include(EY::Serverside::VERSION)
5
+ end
@@ -0,0 +1,63 @@
1
+ unless RUBY_VERSION =~ /^1\.8\./
2
+ require 'simplecov'
3
+ SimpleCov.coverage_dir 'coverage/outside'
4
+ SimpleCov.start do
5
+ add_filter '/spec/'
6
+ add_filter '/features/'
7
+ add_filter '/mock/'
8
+ add_filter '/lib/vendor/'
9
+ add_group 'CLI Workflows', 'lib/engineyard-serverside/cli/workflows/'
10
+ add_group 'Callbacks', 'lib/engineyard-serverside/callbacks/'
11
+ end
12
+ end
13
+
14
+ require 'cucumber/rspec/doubles'
15
+ require 'aruba/cucumber'
16
+ require 'factis/cucumber'
17
+ require 'devnull'
18
+ require 'engineyard-serverside'
19
+
20
+ # This is a fun bit of glue to allow us to use Aruba's in-process runner
21
+ class Runatron
22
+ include RSpec::Mocks::ExampleMethods
23
+
24
+ def initialize(argv, stdin = STDIN, stdout = STDOUT, stderr = STDERR, kernel = Kernel)
25
+ @argv, @stdin, @stdout, @stderr, @kernel = argv, stdin, stdout, stderr, kernel
26
+ end
27
+
28
+ def execute!
29
+ exit_code = begin
30
+ $stderr = @stderr
31
+ $stdin = @stdin
32
+ $stdout = @stdout
33
+ $logger = Logger.new(DevNull.new)
34
+ allow(Logger).to receive(:new).and_return($logger)
35
+
36
+ EY::Serverside::CLI::App.start(@argv)
37
+ 0
38
+ rescue StandardError => e
39
+ b = e.backtrace
40
+ @stderr.puts("#{b.shift}: #{e.message} (#{e.class})")
41
+ @stderr.puts(b.map {|s| "\tfrom #{s}"}.join("\n"))
42
+ 255
43
+ rescue SystemExit => e
44
+ e.status
45
+ ensure
46
+ $stderr = STDERR
47
+ $stdin = STDIN
48
+ $stdout = STDOUT
49
+ end
50
+
51
+ @kernel.exit(exit_code)
52
+ end
53
+ end
54
+
55
+ Aruba.configure do |config|
56
+ config.command_launcher = :in_process
57
+ config.main_class = Runatron
58
+ end
59
+
60
+ After do
61
+ ExecutedCommands.reset
62
+ cleanup_fs
63
+ end
@@ -0,0 +1,17 @@
1
+ Before('@error') do
2
+ memorize_fact(:exit_status, 1)
3
+ end
4
+
5
+ Before('@failure') do
6
+ memorize_fact(:exit_status, 255)
7
+ end
8
+
9
+ After do
10
+ exit_status = begin
11
+ recall_fact(:exit_status)
12
+ rescue
13
+ 0
14
+ end
15
+
16
+ step %{the exit status should be #{exit_status}}
17
+ end
@@ -0,0 +1,82 @@
1
+ require 'pathname'
2
+ module FsHelpers
3
+ def project_root
4
+ Pathname.new(File.expand_path(File.join(__FILE__, '..', '..', '..')))
5
+ end
6
+
7
+ def data_path
8
+ project_root.join('tmp', 'data')
9
+ end
10
+
11
+ def setup_data_path
12
+ data_path.mkpath
13
+ end
14
+
15
+ def cleanup_data_path
16
+ data_path.rmtree if data_path.exist?
17
+ end
18
+
19
+ def app_path
20
+ data_path.join(app_name)
21
+ end
22
+
23
+ def setup_app_path
24
+ app_path.mkpath
25
+ end
26
+
27
+ def release_path
28
+ app_path.join('20200212024800')
29
+ end
30
+
31
+ def setup_release_path
32
+ release_path.mkpath
33
+ end
34
+
35
+ def deploy_hooks_path
36
+ release_path.join('deploy')
37
+ end
38
+
39
+ def setup_deploy_hooks_path
40
+ deploy_hooks_path.mkpath
41
+ end
42
+
43
+ def cleanup_deploy_hooks_path
44
+ deploy_hooks_path.rmtree if deploy_hooks_path.exist?
45
+ end
46
+
47
+ def shared_app_path
48
+ app_path.join('shared')
49
+ end
50
+
51
+ def shared_hooks_path
52
+ shared_app_path.join('hooks')
53
+ end
54
+
55
+ def setup_shared_hooks_path
56
+ shared_hooks_path.mkpath
57
+ end
58
+
59
+ def cleanup_shared_hooks_path
60
+ shared_hooks_path.rmtree if shared_hooks_path.exist?
61
+ end
62
+
63
+ def service_path(service)
64
+ shared_hooks_path.join(service)
65
+ end
66
+
67
+ def setup_service_path(service)
68
+ service_path(service).mkpath
69
+ end
70
+
71
+ def setup_fs
72
+ setup_deploy_hooks_path
73
+ setup_shared_hooks_path
74
+ end
75
+
76
+ def cleanup_fs
77
+ cleanup_data_path
78
+ end
79
+
80
+ end
81
+
82
+ World(FsHelpers)
@@ -0,0 +1,7 @@
1
+ module OutputHelpers
2
+ def output_text
3
+ last_command_started.output
4
+ end
5
+ end
6
+
7
+ World(OutputHelpers)