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
@@ -0,0 +1,41 @@
1
+ require 'runner'
2
+ require 'engineyard-serverside/spawner'
3
+
4
+ module ExecutedCommands
5
+ def self.record(cmd)
6
+ executed.push(cmd)
7
+
8
+ EY::Serverside::Spawner::Result.new(cmd, true, nil, nil)
9
+ end
10
+
11
+ def self.executed
12
+ @executed ||= []
13
+ end
14
+
15
+ def self.reset
16
+ @executed = nil
17
+ end
18
+
19
+ def self.deploy_hook_executed?(callback_name)
20
+ executed.
21
+ select {|x|
22
+ x.match(%r{engineyard-serverside-execute-hook #{callback_name}})
23
+ }.length > 0
24
+ end
25
+
26
+ def self.service_hook_executed?(service_name, callback_name)
27
+ executed.
28
+ select {|x|
29
+ x.match(
30
+ %r{engineyard-serverside-execute-service-hook #{service_name}/#{callback_name}}
31
+ )
32
+ }.length > 0
33
+ end
34
+
35
+ end
36
+
37
+ module Runner
38
+ def run(cmd)
39
+ ExecutedCommands.record(cmd)
40
+ end
41
+ end
@@ -0,0 +1,7 @@
1
+ Feature: Showing the version
2
+ In order to know what iteration of engineyard-serverside I'm using, I want to
3
+ be able to have it print out the version.
4
+
5
+ Scenario: User issues the vesion command
6
+ When I run `engineyard-serverside version`
7
+ Then the current version is displayed
@@ -8,6 +8,7 @@ require 'engineyard-serverside/cli/server_hash_extractor'
8
8
  require 'engineyard-serverside/servers'
9
9
  require 'engineyard-serverside/cli/helpers'
10
10
  require 'engineyard-serverside/cli/workflows'
11
+ require 'engineyard-serverside/version'
11
12
 
12
13
  module EY
13
14
  module Serverside
@@ -130,6 +131,11 @@ module EY
130
131
  def restart
131
132
  Workflows.perform(:restart, options)
132
133
  end
134
+
135
+ desc "version", "Show the engineyard-serverside version"
136
+ def version
137
+ puts EY::Serverside::VERSION
138
+ end
133
139
  end
134
140
  end
135
141
  end
@@ -1,4 +1,4 @@
1
- require 'multi_json'
1
+ require 'json'
2
2
  require 'thor'
3
3
  require 'pp'
4
4
  require 'yaml'
@@ -131,7 +131,7 @@ module EY
131
131
 
132
132
  def initialize(options)
133
133
  opts = string_keys(options)
134
- config = MultiJson.load(opts.delete("config") || "{}")
134
+ config = JSON.load(opts.delete("config") || "{}")
135
135
  append_config_source opts # high priority
136
136
  append_config_source config # lower priority
137
137
  end
@@ -216,7 +216,7 @@ module EY
216
216
  end
217
217
 
218
218
  def to_json
219
- MultiJson.dump(configuration)
219
+ JSON.dump(configuration)
220
220
  end
221
221
 
222
222
  def node
@@ -1,6 +1,7 @@
1
1
  # Inspired by capistrano, thanks Jamis!
2
2
  require 'base64'
3
- require 'multi_json'
3
+ #require 'multi_json'
4
+ require 'json'
4
5
  require 'engineyard-serverside/rails_assets'
5
6
  require 'engineyard-serverside/maintenance'
6
7
  require 'engineyard-serverside/dependency_manager'
@@ -52,7 +52,7 @@ module EY
52
52
  end
53
53
 
54
54
  def install_command
55
- "#{gem_binary} install --no-rdoc --no-ri '#{remote_gem_file}'"
55
+ "#{gem_binary} install '#{remote_gem_file}'"
56
56
  end
57
57
  end
58
58
  end
@@ -48,23 +48,51 @@ module EY
48
48
  debug msg.gsub(BOL, SUBSTATUS_PREFIX)
49
49
  end
50
50
 
51
- def fatal(msg) logger.fatal "FATAL: #{msg}" end
52
- def error(msg) logger.error "ERROR: #{msg}" end
53
- def warning(msg) logger.warn "WARNING: #{msg}" end
51
+ def fatal(msg)
52
+ logger.fatal("FATAL: #{msg}")
53
+ end
54
+
55
+ def error(msg)
56
+ logger.error("ERROR: #{msg}")
57
+ end
58
+
59
+ def warning(msg)
60
+ logger.warn("WARNING: #{msg}")
61
+ end
54
62
  alias warn warning
55
- def notice(msg) logger.warn msg end
56
- def info(msg) logger.info msg end
57
- def debug(msg) logger.debug msg end
58
- def unknown(msg) logger.unknown msg end
63
+
64
+ def notice(msg)
65
+ logger.warn(msg)
66
+ end
67
+
68
+ def info(msg)
69
+ logger.info(msg)
70
+ end
71
+
72
+ def debug(msg)
73
+ logger.debug(msg)
74
+ end
75
+
76
+ def unknown(msg)
77
+ logger.unknown(msg)
78
+ end
59
79
 
60
80
  # a debug outputter that displays a command being run
61
81
  # Formatis like this:
62
82
  # $ cmd blah do \
63
83
  # > something more
64
84
  # > end
65
- def command_show(cmd) debug cmd.gsub(BOL,CMD_CONTINUE).sub(CMD_CONTINUE, CMD_PREFIX) end
66
- def command_out(msg) debug msg.gsub(BOL,CMD_INDENT) end
67
- def command_err(msg) unknown msg.gsub(BOL,CMD_INDENT) end
85
+ def command_show(cmd)
86
+ debug(cmd.gsub(BOL,CMD_CONTINUE).sub(CMD_CONTINUE, CMD_PREFIX))
87
+ end
88
+
89
+ def command_out(msg)
90
+ debug(msg.gsub(BOL,CMD_INDENT))
91
+ end
92
+
93
+ def command_err(msg)
94
+ unknown(msg.gsub(BOL,CMD_INDENT))
95
+ end
68
96
 
69
97
  def logged_system(cmd, server = nil)
70
98
  EY::Serverside::Spawner.run(cmd, self, server)
@@ -1,5 +1,5 @@
1
1
  module EY
2
2
  module Serverside
3
- VERSION = '2.8.0.pre4'
3
+ VERSION = '3.0.4'
4
4
  end
5
5
  end
@@ -13,13 +13,10 @@ if defined?(Encoding) && Encoding.respond_to?(:default_internal=) # String.insta
13
13
  end
14
14
 
15
15
  $LOAD_PATH.unshift File.expand_path('vendor/thor/lib', File.dirname(__FILE__))
16
- $LOAD_PATH.unshift File.expand_path('vendor/systemu/lib', File.dirname(__FILE__))
17
16
  $LOAD_PATH.unshift File.expand_path('vendor/escape/lib', File.dirname(__FILE__))
18
- $LOAD_PATH.unshift File.expand_path('vendor/json_pure/lib', File.dirname(__FILE__))
19
- $LOAD_PATH.unshift File.expand_path('vendor/multi_json/lib', File.dirname(__FILE__))
20
17
 
21
18
  require 'escape'
22
- require 'multi_json'
19
+ require 'json'
23
20
  require 'uri'
24
21
 
25
22
  require 'engineyard-serverside/version'
@@ -39,7 +36,7 @@ module EY
39
36
  RemoteFailure = Class.new StandardError
40
37
 
41
38
  def self.node
42
- @node ||= deep_indifferentize(MultiJson.load(dna_json))
39
+ @node ||= deep_indifferentize(JSON.load(dna_json))
43
40
  end
44
41
 
45
42
  def self.dna_json
@@ -0,0 +1,232 @@
1
+ require 'spec_helper'
2
+
3
+ require 'pathname'
4
+
5
+ require 'engineyard-serverside/callbacks/collection/combined'
6
+
7
+ module EY
8
+ module Serverside
9
+ module Callbacks
10
+ module Collection
11
+
12
+ describe Combined do
13
+ let(:paths) {Object.new}
14
+ let(:deploy_hook_1) {Object.new}
15
+ let(:deploy_hook_2) {Object.new}
16
+ let(:service_hook_1) {Object.new}
17
+ let(:service_hook_2) {Object.new}
18
+ let(:deploy_hooks) {Object.new}
19
+ let(:service_hooks) {Object.new}
20
+
21
+ let(:collection) {described_class.load(paths)}
22
+
23
+ before(:each) do
24
+ # Stub out the DeployHooks collection upon which we depend
25
+ allow(DeployHooks).
26
+ to receive(:load).
27
+ with(paths).
28
+ and_return(deploy_hooks)
29
+
30
+ allow(deploy_hooks).
31
+ to receive(:all).
32
+ and_return([deploy_hook_1, deploy_hook_2])
33
+
34
+ allow(deploy_hooks).
35
+ to receive(:matching).
36
+ and_return([deploy_hook_1])
37
+
38
+ # Stub out the ServiceHooks collection upon which we depend
39
+ allow(ServiceHooks).
40
+ to receive(:load).
41
+ with(paths).
42
+ and_return(service_hooks)
43
+
44
+ allow(service_hooks).
45
+ to receive(:all).
46
+ and_return([service_hook_1, service_hook_2])
47
+
48
+ allow(service_hooks).
49
+ to receive(:matching).
50
+ and_return([service_hook_2])
51
+
52
+ # Make all of our "hooks" of the executable flavor by default
53
+ [
54
+ deploy_hook_1, deploy_hook_2, service_hook_1, service_hook_2
55
+ ].each do |hook|
56
+ allow(hook).to receive(:flavor).and_return(:executable)
57
+ end
58
+
59
+ end
60
+
61
+ describe '.load' do
62
+ let(:deploy_hooks) {Object.new}
63
+ let(:service_hooks) {Object.new}
64
+ let(:result) {described_class.load(paths)}
65
+
66
+
67
+ it 'loads deploy hooks' do
68
+ expect(DeployHooks).to receive(:load).with(paths)
69
+
70
+ result
71
+ end
72
+
73
+ it 'loads service hooks' do
74
+ expect(ServiceHooks).to receive(:load).with(paths)
75
+
76
+ result
77
+ end
78
+
79
+ it 'is a callbacks collection' do
80
+ expect(result).to be_a(Collection::Base)
81
+ end
82
+ end
83
+
84
+ describe '#all' do
85
+ let(:result) {collection.all}
86
+
87
+ it 'is an Array' do
88
+ expect(result).to be_a(Array)
89
+ end
90
+
91
+ it 'contains the deploy hooks' do
92
+ [deploy_hook_1, deploy_hook_2].each do |hook|
93
+ expect(result).to include(hook)
94
+ end
95
+ end
96
+
97
+ it 'contains the service hooks' do
98
+ [service_hook_1, service_hook_2].each do |hook|
99
+ expect(result).to include(hook)
100
+ end
101
+ end
102
+
103
+ it 'gives more priority to service hooks' do
104
+ expect(result).to eql(
105
+ [service_hook_1, service_hook_2, deploy_hook_1, deploy_hook_2]
106
+ )
107
+ end
108
+ end
109
+
110
+ describe '#matching' do
111
+ let(:name) {:hook_2}
112
+ let(:result) {collection.matching(name)}
113
+
114
+ it 'is an Array' do
115
+ expect(result).to be_a(Array)
116
+ end
117
+
118
+ it 'contains hooks with the desired name' do
119
+ [service_hook_2, deploy_hook_1].each do |hook|
120
+ expect(result).to include(hook)
121
+ end
122
+ end
123
+
124
+ it 'omits hooks without the desired name' do
125
+ [service_hook_1, deploy_hook_2].each do |hook|
126
+ expect(result).not_to include(hook)
127
+ end
128
+ end
129
+ end
130
+
131
+ describe '#execute' do
132
+ let(:config) {Object.new}
133
+ let(:shell) {Object.new}
134
+ let(:callback) {Object.new}
135
+ let(:matches) {[]}
136
+
137
+ let(:result) {collection.execute(config, shell, callback)}
138
+
139
+ before(:each) do
140
+ allow(Executor).to receive(:execute)
141
+ allow(shell).to receive(:info)
142
+ allow(collection).
143
+ to receive(:matching).
144
+ with(callback).
145
+ and_return(matches)
146
+ end
147
+
148
+ context 'when there are matching hooks' do
149
+ let(:matches) {[Object.new]}
150
+
151
+ it 'executes those matching hooks' do
152
+ expect(Executor).to receive(:execute).with(config, shell, matches)
153
+
154
+ result
155
+ end
156
+ end
157
+
158
+ context 'when there are not matching hooks' do
159
+ let(:matches) {[]}
160
+
161
+ it 'logs a message about the lack of matching hooks' do
162
+ expect(shell).
163
+ to receive(:info).
164
+ with("No hooks detected for #{callback}. Skipping.")
165
+
166
+ result
167
+ end
168
+
169
+ it 'does not execute any hooks' do
170
+ expect(Executor).not_to receive(:execute)
171
+
172
+ result
173
+ end
174
+ end
175
+ end
176
+
177
+ describe '#distribute' do
178
+ let(:runner) {Object.new}
179
+ let(:name) {:hook_2}
180
+ let(:distributor) {Callbacks::Distributor}
181
+ let(:distribution_result) {Object.new}
182
+ let(:matched) {[service_hook_2, deploy_hook_1]}
183
+ let(:result) {collection.distribute(runner, name)}
184
+
185
+ before(:each) do
186
+ allow(distributor).to receive(:distribute)
187
+ end
188
+
189
+ it 'distributes matching hooks via an distributor' do
190
+ expect(distributor).
191
+ to receive(:distribute).
192
+ with(runner, matched).
193
+ and_return(distribution_result)
194
+
195
+ expect(result).to eql(distribution_result)
196
+ end
197
+
198
+ it 'skips non-matching hooks' do
199
+ expect(distributor).not_to receive(:distribute).with(runner, :hook_1)
200
+
201
+ result
202
+ end
203
+
204
+ context 'when there are multiple matching ruby hooks' do
205
+ before(:each) do
206
+ allow(service_hook_2).to receive(:flavor).and_return(:ruby)
207
+ allow(deploy_hook_1).to receive(:flavor).and_return(:ruby)
208
+ end
209
+
210
+ it 'distributes the first ruby hook' do
211
+ expect(distributor).
212
+ to receive(:distribute).
213
+ with(runner, [service_hook_2])
214
+
215
+ result
216
+ end
217
+
218
+ it 'does not distribute any other ruby hook' do
219
+ expect(distributor).
220
+ not_to receive(:distribute).
221
+ with(runner, [service_hook_2, deploy_hook_1])
222
+
223
+ result
224
+ end
225
+ end
226
+ end
227
+ end
228
+
229
+ end
230
+ end
231
+ end
232
+ end
@@ -0,0 +1,170 @@
1
+ require 'spec_helper'
2
+
3
+ require 'pathname'
4
+
5
+ require 'engineyard-serverside/callbacks/collection'
6
+
7
+ module EY
8
+ module Serverside
9
+ module Callbacks
10
+ module Collection
11
+
12
+ describe DeployHooks do
13
+
14
+ let(:paths) {Object.new}
15
+ let(:app_base_path) {Pathname.new('/data/some_app')}
16
+ let(:deploy_hooks_path) {
17
+ app_base_path.join('releases', 'TIMESTAMP', 'deploy')
18
+ }
19
+
20
+ let(:hook_1_path) {deploy_hooks_path.join('hook_1.rb')}
21
+ let(:hook_2_path) {deploy_hooks_path.join('hook_2.rb')}
22
+ let(:hook_paths) {[hook_1_path.to_s, hook_2_path.to_s]}
23
+
24
+ let(:collection) {described_class.load(paths)}
25
+
26
+ before(:each) do
27
+ allow(paths).to receive(:deploy_hooks).and_return(deploy_hooks_path)
28
+ allow(Dir).to receive(:[]).and_return([])
29
+ end
30
+
31
+ describe '.load' do
32
+ let(:result) {described_class.load(paths)}
33
+
34
+ context 'with application hooks present' do
35
+ before(:each) do
36
+ allow(Dir).
37
+ to receive(:[]).
38
+ with("#{deploy_hooks_path}/*").
39
+ and_return(hook_paths)
40
+ end
41
+
42
+ it 'loads those application hooks' do
43
+ expect(Hooks::App).to receive(:new).with(hook_1_path.to_s)
44
+ expect(Hooks::App).to receive(:new).with(hook_2_path.to_s)
45
+
46
+ result
47
+ end
48
+ end
49
+
50
+ it 'is a callbacks collection' do
51
+ expect(result).to be_a(Collection::Base)
52
+ end
53
+ end
54
+
55
+ describe '#all' do
56
+ let(:result) {collection.all}
57
+
58
+ before(:each) do
59
+ allow(Dir).
60
+ to receive(:[]).
61
+ with("#{deploy_hooks_path}/*").
62
+ and_return(hook_paths)
63
+ end
64
+
65
+ it 'is an Array' do
66
+ expect(result).to be_a(Array)
67
+ end
68
+
69
+ it 'contains all of the hooks detected at load time' do
70
+ hook_paths.each do |path|
71
+ expect(
72
+ result.select {|h| h.path == Pathname(path)}.length
73
+ ).to eql(1)
74
+ end
75
+ end
76
+ end
77
+
78
+ describe '#matching' do
79
+ let(:name) {:hook_2}
80
+ let(:result) {collection.matching(name)}
81
+
82
+ before(:each) do
83
+ allow(Dir).
84
+ to receive(:[]).
85
+ with("#{deploy_hooks_path}/*").
86
+ and_return(hook_paths)
87
+ end
88
+
89
+ it 'is an Array' do
90
+ expect(result).to be_a(Array)
91
+ end
92
+
93
+ it 'contains hooks with the desired name' do
94
+ expect(
95
+ result.select {|h| h.path == Pathname(hook_2_path)}.length
96
+ ).to eql(1)
97
+ end
98
+
99
+ it 'omits hooks without the desired name' do
100
+ expect(
101
+ result.select {|h| h.path == Pathname(hook_1_path)}.length
102
+ ).to eql(0)
103
+ end
104
+
105
+ context "when a hook is represented by more than one format" do
106
+ let(:hook_1_path) {deploy_hooks_path.join('hook_2')}
107
+ let(:hook_2_path) {deploy_hooks_path.join('hook_2.rb')}
108
+
109
+ it 'contains the ruby hook' do
110
+ expect(
111
+ result.select {|h| h.path == Pathname(hook_2_path)}.length
112
+ ).to eql(1)
113
+ end
114
+
115
+ it 'omits the other hooks' do
116
+ expect(
117
+ result.select {|h| h.path == Pathname(hook_1_path)}.length
118
+ ).to eql(0)
119
+ end
120
+ end
121
+ end
122
+
123
+ describe '#distribute' do
124
+ let(:runner) {Object.new}
125
+ let(:name) {:hook_2}
126
+ let(:distributor) {Callbacks::Distributor}
127
+ let(:distribution_result) {Object.new}
128
+ let(:matched) {Object.new}
129
+ let(:result) {collection.distribute(runner, name)}
130
+
131
+ before(:each) do
132
+ allow(Dir).
133
+ to receive(:[]).
134
+ with("#{deploy_hooks_path}/*").
135
+ and_return(hook_paths)
136
+
137
+ allow(collection).
138
+ to receive(:matching).
139
+ with(name).
140
+ and_return(matched)
141
+
142
+ # Bypass Base#minimize_ruby
143
+ allow(collection).to receive(:minimize_ruby) {|matches|
144
+ matches
145
+ }
146
+
147
+ allow(distributor).to receive(:distribute)
148
+ end
149
+
150
+ it 'distributes matching hooks via an distributor' do
151
+ expect(distributor).
152
+ to receive(:distribute).
153
+ with(runner, matched).
154
+ and_return(distribution_result)
155
+
156
+ expect(result).to eql(distribution_result)
157
+ end
158
+
159
+ it 'skips non-matching hooks' do
160
+ expect(distributor).not_to receive(:distribute).with(runner, :hook_1)
161
+
162
+ result
163
+ end
164
+ end
165
+ end
166
+
167
+ end
168
+ end
169
+ end
170
+ end