engineyard-serverside 2.6.14 → 2.6.15.alpha1

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 (209) hide show
  1. checksums.yaml +13 -5
  2. data/bin/engineyard-serverside +1 -1
  3. data/lib/engineyard-serverside/cli.rb +4 -225
  4. data/lib/engineyard-serverside/cli/app.rb +136 -0
  5. data/lib/engineyard-serverside/cli/helpers.rb +58 -0
  6. data/lib/engineyard-serverside/cli/server_hash_extractor.rb +49 -0
  7. data/lib/engineyard-serverside/cli/workflows.rb +45 -0
  8. data/lib/engineyard-serverside/cli/workflows/base.rb +78 -0
  9. data/lib/engineyard-serverside/cli/workflows/calling_deploy_hooks.rb +31 -0
  10. data/lib/engineyard-serverside/cli/workflows/deploying_applications.rb +28 -0
  11. data/lib/engineyard-serverside/cli/workflows/disabling_maintenance.rb +29 -0
  12. data/lib/engineyard-serverside/cli/workflows/enabling_maintenance.rb +29 -0
  13. data/lib/engineyard-serverside/cli/workflows/errors.rb +13 -0
  14. data/lib/engineyard-serverside/cli/workflows/helpers.rb +21 -0
  15. data/lib/engineyard-serverside/cli/workflows/integrating_servers.rb +63 -0
  16. data/lib/engineyard-serverside/cli/workflows/restarting_applications.rb +36 -0
  17. data/lib/engineyard-serverside/cli/workflows/rolling_back_applications.rb +28 -0
  18. data/lib/engineyard-serverside/cli/workflows/showing_maintenance_status.rb +28 -0
  19. data/lib/engineyard-serverside/dependency_manager/bundler.rb +43 -14
  20. data/lib/engineyard-serverside/propagator.rb +59 -0
  21. data/lib/engineyard-serverside/rails_assets.rb +5 -2
  22. data/lib/engineyard-serverside/version.rb +1 -1
  23. metadata +66 -394
  24. data/lib/engineyard-serverside/cli_helpers.rb +0 -53
  25. data/spec/archive_deploy_spec.rb +0 -53
  26. data/spec/basic_deploy_spec.rb +0 -26
  27. data/spec/bundler_deploy_spec.rb +0 -139
  28. data/spec/configuration_spec.rb +0 -205
  29. data/spec/custom_deploy_spec.rb +0 -128
  30. data/spec/deploy_hook_spec.rb +0 -362
  31. data/spec/deprecation_spec.rb +0 -23
  32. data/spec/ey_yml_customized_deploy_spec.rb +0 -99
  33. data/spec/fixtures/gitrepo.tar.gz +0 -0
  34. data/spec/fixtures/gitrepo/bar +0 -0
  35. data/spec/fixtures/gitrepo/foo +0 -0
  36. data/spec/fixtures/invalid_hook.rb +0 -1
  37. data/spec/fixtures/lockfiles/0.9-no-bundler +0 -111
  38. data/spec/fixtures/lockfiles/0.9-with-bundler +0 -117
  39. data/spec/fixtures/lockfiles/1.0-no-bundler +0 -54
  40. data/spec/fixtures/lockfiles/1.0.0.rc.1-with-bundler +0 -162
  41. data/spec/fixtures/lockfiles/1.0.18-do_mysql +0 -88
  42. data/spec/fixtures/lockfiles/1.0.18-do_postgres +0 -79
  43. data/spec/fixtures/lockfiles/1.0.18-mysql +0 -43
  44. data/spec/fixtures/lockfiles/1.0.18-mysql2 +0 -43
  45. data/spec/fixtures/lockfiles/1.0.18-pg +0 -43
  46. data/spec/fixtures/lockfiles/1.0.6-no-bundler +0 -51
  47. data/spec/fixtures/lockfiles/1.0.6-with-any-bundler +0 -52
  48. data/spec/fixtures/lockfiles/1.0.6-with-bundler +0 -52
  49. data/spec/fixtures/lockfiles/1.3.1-rails-3.2.13 +0 -112
  50. data/spec/fixtures/lockfiles/not-a-lockfile +0 -1
  51. data/spec/fixtures/repos/assets_detected/Gemfile +0 -5
  52. data/spec/fixtures/repos/assets_detected/Gemfile.lock +0 -88
  53. data/spec/fixtures/repos/assets_detected/README +0 -1
  54. data/spec/fixtures/repos/assets_detected/Rakefile +0 -5
  55. data/spec/fixtures/repos/assets_detected/app/assets/empty +0 -0
  56. data/spec/fixtures/repos/assets_detected/config/application.rb +0 -5
  57. data/spec/fixtures/repos/assets_detected/config/ey.yml +0 -3
  58. data/spec/fixtures/repos/assets_disabled/Gemfile +0 -5
  59. data/spec/fixtures/repos/assets_disabled/Gemfile.lock +0 -88
  60. data/spec/fixtures/repos/assets_disabled/README +0 -1
  61. data/spec/fixtures/repos/assets_disabled/Rakefile +0 -6
  62. data/spec/fixtures/repos/assets_disabled/app/assets/empty +0 -0
  63. data/spec/fixtures/repos/assets_disabled/config/application.rb +0 -5
  64. data/spec/fixtures/repos/assets_disabled/config/ey.yml +0 -3
  65. data/spec/fixtures/repos/assets_disabled_in_ey_yml/Gemfile +0 -5
  66. data/spec/fixtures/repos/assets_disabled_in_ey_yml/Gemfile.lock +0 -88
  67. data/spec/fixtures/repos/assets_disabled_in_ey_yml/README +0 -1
  68. data/spec/fixtures/repos/assets_disabled_in_ey_yml/Rakefile +0 -6
  69. data/spec/fixtures/repos/assets_disabled_in_ey_yml/app/assets/empty +0 -0
  70. data/spec/fixtures/repos/assets_disabled_in_ey_yml/config/application.rb +0 -5
  71. data/spec/fixtures/repos/assets_disabled_in_ey_yml/config/ey.yml +0 -5
  72. data/spec/fixtures/repos/assets_disabled_utf8/Gemfile +0 -5
  73. data/spec/fixtures/repos/assets_disabled_utf8/Gemfile.lock +0 -88
  74. data/spec/fixtures/repos/assets_disabled_utf8/README +0 -3
  75. data/spec/fixtures/repos/assets_disabled_utf8/Rakefile +0 -5
  76. data/spec/fixtures/repos/assets_disabled_utf8/app/assets/empty +0 -0
  77. data/spec/fixtures/repos/assets_disabled_utf8/config/application.rb +0 -7
  78. data/spec/fixtures/repos/assets_disabled_utf8/config/ey.yml +0 -3
  79. data/spec/fixtures/repos/assets_enabled_all/Gemfile +0 -5
  80. data/spec/fixtures/repos/assets_enabled_all/Gemfile.lock +0 -88
  81. data/spec/fixtures/repos/assets_enabled_all/README +0 -1
  82. data/spec/fixtures/repos/assets_enabled_all/app/assets/empty +0 -0
  83. data/spec/fixtures/repos/assets_enabled_all/config/application.rb +0 -5
  84. data/spec/fixtures/repos/assets_enabled_all/config/ey.yml +0 -6
  85. data/spec/fixtures/repos/assets_enabled_all/script/assets +0 -5
  86. data/spec/fixtures/repos/assets_enabled_all/tmp/obstruction +0 -1
  87. data/spec/fixtures/repos/assets_enabled_in_ey_yml/Gemfile +0 -3
  88. data/spec/fixtures/repos/assets_enabled_in_ey_yml/Gemfile.lock +0 -10
  89. data/spec/fixtures/repos/assets_enabled_in_ey_yml/README +0 -1
  90. data/spec/fixtures/repos/assets_enabled_in_ey_yml/Rakefile +0 -8
  91. data/spec/fixtures/repos/assets_enabled_in_ey_yml/config/ey.yml +0 -4
  92. data/spec/fixtures/repos/assets_enabled_util_only/Gemfile +0 -5
  93. data/spec/fixtures/repos/assets_enabled_util_only/Gemfile.lock +0 -88
  94. data/spec/fixtures/repos/assets_enabled_util_only/README +0 -1
  95. data/spec/fixtures/repos/assets_enabled_util_only/Rakefile +0 -6
  96. data/spec/fixtures/repos/assets_enabled_util_only/app/assets/empty +0 -0
  97. data/spec/fixtures/repos/assets_enabled_util_only/config/application.rb +0 -5
  98. data/spec/fixtures/repos/assets_enabled_util_only/config/ey.yml +0 -6
  99. data/spec/fixtures/repos/assets_in_hook/Gemfile +0 -5
  100. data/spec/fixtures/repos/assets_in_hook/Gemfile.lock +0 -88
  101. data/spec/fixtures/repos/assets_in_hook/README +0 -2
  102. data/spec/fixtures/repos/assets_in_hook/Rakefile +0 -5
  103. data/spec/fixtures/repos/assets_in_hook/app/assets/empty +0 -0
  104. data/spec/fixtures/repos/assets_in_hook/config/application.rb +0 -5
  105. data/spec/fixtures/repos/assets_in_hook/config/ey.yml +0 -3
  106. data/spec/fixtures/repos/assets_in_hook/deploy/before_compile_assets.rb +0 -2
  107. data/spec/fixtures/repos/bundle_fails/Gemfile +0 -1
  108. data/spec/fixtures/repos/bundle_fails/README +0 -1
  109. data/spec/fixtures/repos/bundle_fails/deploy/after_bundle.rb +0 -1
  110. data/spec/fixtures/repos/bundler_disabled/Gemfile +0 -4
  111. data/spec/fixtures/repos/bundler_disabled/Gemfile.lock +0 -12
  112. data/spec/fixtures/repos/bundler_disabled/README +0 -1
  113. data/spec/fixtures/repos/bundler_disabled/config/ey.yml +0 -2
  114. data/spec/fixtures/repos/bundler_disabled/deploy/after_bundle.rb +0 -1
  115. data/spec/fixtures/repos/bundler_disabled/deploy/before_bundle.rb +0 -1
  116. data/spec/fixtures/repos/default/Gemfile +0 -4
  117. data/spec/fixtures/repos/default/Gemfile.lock +0 -12
  118. data/spec/fixtures/repos/default/README +0 -5
  119. data/spec/fixtures/repos/default/ey.yml +0 -3
  120. data/spec/fixtures/repos/executable_hooks/README +0 -1
  121. data/spec/fixtures/repos/executable_hooks/deploy/before_restart +0 -72
  122. data/spec/fixtures/repos/executable_hooks_not_executable/README +0 -3
  123. data/spec/fixtures/repos/executable_hooks_not_executable/deploy/before_restart +0 -3
  124. data/spec/fixtures/repos/ey_yml/Gemfile +0 -4
  125. data/spec/fixtures/repos/ey_yml/Gemfile.lock +0 -12
  126. data/spec/fixtures/repos/ey_yml/README +0 -1
  127. data/spec/fixtures/repos/ey_yml/config/ey.yml +0 -18
  128. data/spec/fixtures/repos/ey_yml/deploy/before_migrate.rb +0 -6
  129. data/spec/fixtures/repos/ey_yml_alt/Gemfile +0 -4
  130. data/spec/fixtures/repos/ey_yml_alt/Gemfile.lock +0 -12
  131. data/spec/fixtures/repos/ey_yml_alt/README +0 -1
  132. data/spec/fixtures/repos/ey_yml_alt/deploy/before_migrate.rb +0 -6
  133. data/spec/fixtures/repos/ey_yml_alt/ey.yml +0 -12
  134. data/spec/fixtures/repos/hook_fails/README +0 -1
  135. data/spec/fixtures/repos/hook_fails/deploy/before_deploy.rb +0 -1
  136. data/spec/fixtures/repos/hooks/README +0 -1
  137. data/spec/fixtures/repos/hooks/deploy/after_bundle.rb +0 -1
  138. data/spec/fixtures/repos/hooks/deploy/after_compile_assets.rb +0 -1
  139. data/spec/fixtures/repos/hooks/deploy/after_deploy.rb +0 -1
  140. data/spec/fixtures/repos/hooks/deploy/after_migrate.rb +0 -1
  141. data/spec/fixtures/repos/hooks/deploy/after_restart.rb +0 -1
  142. data/spec/fixtures/repos/hooks/deploy/after_symlink.rb +0 -1
  143. data/spec/fixtures/repos/hooks/deploy/before_bundle.rb +0 -1
  144. data/spec/fixtures/repos/hooks/deploy/before_compile_assets.rb +0 -1
  145. data/spec/fixtures/repos/hooks/deploy/before_deploy.rb +0 -1
  146. data/spec/fixtures/repos/hooks/deploy/before_migrate.rb +0 -1
  147. data/spec/fixtures/repos/hooks/deploy/before_restart.rb +0 -1
  148. data/spec/fixtures/repos/hooks/deploy/before_symlink.rb +0 -1
  149. data/spec/fixtures/repos/multi_dep_manager/README +0 -1
  150. data/spec/fixtures/repos/multi_dep_manager/composer.json +0 -5
  151. data/spec/fixtures/repos/multi_dep_manager/composer.lock +0 -462
  152. data/spec/fixtures/repos/multi_dep_manager/package.json +0 -7
  153. data/spec/fixtures/repos/multi_dep_manager/public/index.php +0 -4
  154. data/spec/fixtures/repos/no_ey_config/Gemfile +0 -3
  155. data/spec/fixtures/repos/no_ey_config/Gemfile.lock +0 -10
  156. data/spec/fixtures/repos/no_ey_config/README +0 -1
  157. data/spec/fixtures/repos/no_ey_config/ey.yml +0 -3
  158. data/spec/fixtures/repos/no_gemfile_lock/Gemfile +0 -4
  159. data/spec/fixtures/repos/no_gemfile_lock/README +0 -1
  160. data/spec/fixtures/repos/no_gemfile_lock/ey.yml +0 -3
  161. data/spec/fixtures/repos/nodejs/README +0 -1
  162. data/spec/fixtures/repos/nodejs/package.json +0 -7
  163. data/spec/fixtures/repos/not_bundled/README +0 -1
  164. data/spec/fixtures/repos/npm_disabled/README +0 -1
  165. data/spec/fixtures/repos/npm_disabled/config/ey.yml +0 -2
  166. data/spec/fixtures/repos/npm_disabled/package.json +0 -7
  167. data/spec/fixtures/repos/php_composer_disabled/README +0 -1
  168. data/spec/fixtures/repos/php_composer_disabled/composer.json +0 -5
  169. data/spec/fixtures/repos/php_composer_disabled/composer.lock +0 -462
  170. data/spec/fixtures/repos/php_composer_disabled/config/ey.yml +0 -2
  171. data/spec/fixtures/repos/php_composer_disabled/public/index.php +0 -4
  172. data/spec/fixtures/repos/php_composer_lock/README +0 -1
  173. data/spec/fixtures/repos/php_composer_lock/composer.json +0 -5
  174. data/spec/fixtures/repos/php_composer_lock/composer.lock +0 -462
  175. data/spec/fixtures/repos/php_composer_lock/public/index.php +0 -4
  176. data/spec/fixtures/repos/php_no_composer_lock/README +0 -1
  177. data/spec/fixtures/repos/php_no_composer_lock/composer.json +0 -21
  178. data/spec/fixtures/repos/php_no_composer_lock/public/index.php +0 -4
  179. data/spec/fixtures/repos/public_system/Gemfile +0 -4
  180. data/spec/fixtures/repos/public_system/Gemfile.lock +0 -12
  181. data/spec/fixtures/repos/public_system/README +0 -5
  182. data/spec/fixtures/repos/public_system/ey.yml +0 -3
  183. data/spec/fixtures/repos/public_system/public/system/cant_touch_this.txt +0 -3
  184. data/spec/fixtures/repos/sqlite3/Gemfile +0 -4
  185. data/spec/fixtures/repos/sqlite3/Gemfile.lock +0 -89
  186. data/spec/fixtures/repos/sqlite3/README +0 -1
  187. data/spec/fixtures/retwisj.war +0 -0
  188. data/spec/fixtures/valid_hook.rb +0 -1
  189. data/spec/git_strategy_spec.rb +0 -34
  190. data/spec/lockfile_parser_spec.rb +0 -122
  191. data/spec/maintenance_spec.rb +0 -44
  192. data/spec/multi_dependency_manager_spec.rb +0 -25
  193. data/spec/nodejs_deploy_spec.rb +0 -30
  194. data/spec/php_deploy_spec.rb +0 -81
  195. data/spec/platform_configure_spec.rb +0 -61
  196. data/spec/rails31_deploy_spec.rb +0 -164
  197. data/spec/restart_spec.rb +0 -43
  198. data/spec/rollback_spec.rb +0 -87
  199. data/spec/server_spec.rb +0 -70
  200. data/spec/services_deploy_spec.rb +0 -153
  201. data/spec/shell_spec.rb +0 -57
  202. data/spec/source/archive_spec.rb +0 -33
  203. data/spec/source/git_spec.rb +0 -44
  204. data/spec/spec_helper.rb +0 -355
  205. data/spec/sqlite3_deploy_spec.rb +0 -38
  206. data/spec/support/integration.rb +0 -103
  207. data/spec/support/source_doubles.rb +0 -28
  208. data/spec/support/timecop.rb +0 -5
  209. data/spec/symlink_spec.rb +0 -15
@@ -1,61 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe "Deploying an application with platform configure command" do
4
- describe "configure script does not exist" do
5
- before do
6
- @releases_failed = deploy_dir.join('releases_failed')
7
- deploy_test_application('default')
8
- end
9
-
10
- it "works without warning" do
11
- expect(read_output).not_to match(/WARNING/)
12
-
13
- expect(@releases_failed).not_to exist
14
- end
15
- end
16
-
17
- describe "a succesful deploy" do
18
- before do
19
- @releases_failed = deploy_dir.join('releases_failed')
20
- ENV['EY_SERVERSIDE_CONFIGURE_COMMAND'] = "echo platform_configure_command_ran >&2"
21
- deploy_test_application('default')
22
- end
23
-
24
- after do
25
- ENV.delete('EY_SERVERSIDE_CONFIGURE_COMMAND')
26
- end
27
-
28
- it "runs the configure_command during deploy and finishes successfully" do
29
- expect(read_output).to match(/platform_configure_command_ran/)
30
-
31
- expect(@releases_failed).not_to exist
32
-
33
- restart = deploy_dir.join('current', 'restart')
34
- expect(restart).to exist
35
- end
36
- end
37
-
38
- describe "a failed configure command" do
39
-
40
- before do
41
- ENV['EY_SERVERSIDE_CONFIGURE_COMMAND'] = "echo platform_configure_command_failed >&2 && false"
42
- end
43
-
44
- after do
45
- ENV.delete('EY_SERVERSIDE_CONFIGURE_COMMAND')
46
- end
47
-
48
- it "aborts the deplo when it fails, preventing the app from being restarted" do
49
- @releases_failed = deploy_dir.join('releases_failed')
50
- expect(@releases_failed).not_to exist
51
-
52
- begin
53
- deploy_test_application('default')
54
- rescue
55
- end
56
- expect(read_output).to match(/platform_configure_command_failed/)
57
-
58
- expect(@releases_failed.entries).not_to be_empty
59
- end
60
- end
61
- end
@@ -1,164 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe "Deploying a Rails 3.1 application" do
4
- context "with default production settings" do
5
- it "precompiles assets when asset compilation is detected" do
6
- deploy_test_application('assets_detected')
7
- expect(deploy_dir.join('current', 'precompiled')).to exist
8
- expect(deploy_dir.join('current', 'public', 'assets')).to exist
9
- expect(deploy_dir.join('current', 'public', 'assets', 'compiled_asset')).to exist
10
- expect(read_output).to include("Precompiling assets. ('app/assets' exists, 'public/assets' not found, not disabled in config.)")
11
- end
12
-
13
- it "precompiles assets, then reuses them on the next deploy if nothing has changed" do
14
- deploy_test_application('assets_enabled_in_ey_yml')
15
- expect(deploy_dir.join('current', 'precompiled')).to exist
16
- expect(deploy_dir.join('current', 'public', 'assets')).to exist
17
- expect(deploy_dir.join('current', 'public', 'assets', 'compiled_asset')).to exist
18
-
19
- redeploy_test_application
20
- expect(deploy_dir.join('current', 'precompiled')).not_to exist # doesn't run the task
21
- expect(deploy_dir.join('current', 'public', 'assets')).to exist # but the assets are there
22
- expect(deploy_dir.join('current', 'public', 'assets', 'compiled_asset')).to exist
23
- expect(read_output).to match(%r#Reusing existing assets\. \(configured asset_dependencies unchanged from \w{7}..\w{7}\)#)
24
-
25
- redeploy_test_application('config' => {'precompile_unchanged_assets' => 'true'})
26
- expect(deploy_dir.join('current', 'precompiled')).to exist # doesn't run the task
27
- expect(deploy_dir.join('current', 'public', 'assets')).to exist # but the assets are there
28
- expect(deploy_dir.join('current', 'public', 'assets', 'compiled_asset')).to exist
29
- expect(read_output).not_to include("Reusing existing assets")
30
- end
31
-
32
- it "precompile assets again when redeploying a ref with changes" do
33
- deploy_test_application('assets_enabled_in_ey_yml')
34
- expect(deploy_dir.join('current', 'precompiled')).to exist
35
- expect(deploy_dir.join('current', 'public', 'assets')).to exist
36
- expect(deploy_dir.join('current', 'public', 'assets', 'compiled_asset')).to exist
37
- expect(deploy_dir.join('current', 'tmp', 'cache')).to exist
38
- expect(deploy_dir.join('current', 'tmp')).to be_a_symlink
39
- expect(deploy_dir.join('current', 'cache_compiled')).not_to exist
40
- expect(read_output).to include("Precompiling assets. (precompile_assets: true)")
41
-
42
- # changing the ref stands in for actually having assets change (see Strategies::IntegrationSpec#same?)
43
- redeploy_test_application('branch' => 'somenewref')
44
- expect(deploy_dir.join('current', 'precompiled')).to exist # it does runs the task
45
- expect(deploy_dir.join('current', 'public', 'assets')).to exist
46
- expect(deploy_dir.join('current', 'public', 'assets', 'compiled_asset')).to exist
47
- expect(deploy_dir.join('current', 'tmp')).to be_a_symlink
48
- expect(deploy_dir.join('current', 'tmp', 'cache')).to exist # preserves tmp dir
49
- expect(deploy_dir.join('current', 'cache_compiled')).to exist # uses tmp/cache to compile assets faster
50
- expect(read_output).not_to match(%r#Reusing existing assets#)
51
- end
52
-
53
- it "precompile assets when redeploying the same ref, but assets were turned off the first time" do
54
- deploy_test_application('assets_enabled_in_ey_yml', 'config' => {'precompile_assets' => 'false'})
55
- expect(deploy_dir.join('current', 'precompiled')).not_to exist
56
- expect(deploy_dir.join('current', 'public', 'assets')).not_to exist
57
- expect(deploy_dir.join('current', 'public', 'assets', 'compiled_asset')).not_to exist
58
- expect(read_output).not_to include("Precompiling assets. (precompile_assets: true)")
59
-
60
- # assets will show as unchanged, but it should compile them fresh anyway.
61
- redeploy_test_application('config' => {'precompile_assets' => 'true'})
62
- expect(deploy_dir.join('current', 'precompiled')).to exist # it does runs the task
63
- expect(deploy_dir.join('current', 'public', 'assets')).to exist
64
- expect(deploy_dir.join('current', 'public', 'assets', 'compiled_asset')).to exist
65
- expect(read_output).not_to match(%r#Reusing existing assets#)
66
- end
67
-
68
- %w[cleaning shared private].each do |strategy|
69
- it "precompiles assets with asset_strategy '#{strategy}', then reuses them on the next deploy if nothing has changed" do
70
- deploy_test_application('assets_enabled_in_ey_yml', 'config' => {'asset_strategy' => strategy})
71
- expect(deploy_dir.join('current', 'precompiled')).to exist
72
- expect(deploy_dir.join('current', 'public', 'assets')).to exist
73
- expect(deploy_dir.join('current', 'public', 'assets', 'compiled_asset')).to exist
74
-
75
- redeploy_test_application
76
- expect(deploy_dir.join('current', 'precompiled')).not_to exist # doesn't run the task
77
- expect(deploy_dir.join('current', 'public', 'assets')).to exist # but the assets are there
78
- expect(deploy_dir.join('current', 'public', 'assets', 'compiled_asset')).to exist
79
- expect(read_output).to match(%r#Reusing existing assets\. \(configured asset_dependencies unchanged from \w{7}..\w{7}\)#)
80
- end
81
- end
82
- end
83
-
84
- context "with asset compilation enabled in ey.yml, despite not otherwise being enabled" do
85
- before(:all) do
86
- deploy_test_application('assets_enabled_in_ey_yml')
87
- end
88
-
89
- it "precompiles assets" do
90
- expect(deploy_dir.join('current', 'precompiled')).to exist
91
- expect(read_output).to include("Precompiling assets. (precompile_assets: true)")
92
- end
93
- end
94
-
95
- context "with asset compilation enabled in ey.yml, but asset_roles is set to only :util" do
96
- before(:all) do
97
- deploy_test_application('assets_enabled_util_only')
98
- end
99
-
100
- it "precompiles assets" do
101
- expect(deploy_dir.join('current', 'precompiled')).not_to exist
102
- expect(read_output).to include("Precompiling assets. (precompile_assets: true)")
103
- end
104
- end
105
-
106
- context "with asset compilation enabled in ey.yml, and asset_roles is set to :all, and a custom compile command" do
107
- before(:all) do
108
- deploy_test_application('assets_enabled_all')
109
- end
110
-
111
- it "precompiles assets but never shares the tmp cache because the repository has a committed tmp dir with contents" do
112
- expect(deploy_dir.join('current', 'custom_compiled')).to exist
113
- expect(deploy_dir.join('current', 'cache_compiled')).not_to exist
114
- expect(deploy_dir.join('current', 'tmp', 'cache')).to exist
115
- expect(deploy_dir.join('current', 'tmp')).not_to be_a_symlink
116
- expect(read_output).to include("Precompiling assets. (precompile_assets: true)")
117
-
118
- redeploy_test_application('config' => {'precompile_unchanged_assets' => 'true'})
119
- expect(deploy_dir.join('current', 'tmp', 'cache')).to exist
120
- expect(deploy_dir.join('current', 'cache_compiled')).not_to exist
121
- expect(deploy_dir.join('current', 'tmp')).not_to be_a_symlink
122
- end
123
- end
124
-
125
- context "with asset support disabled in config/application.rb" do
126
- it "does not precompile assets" do
127
- deploy_test_application('assets_disabled')
128
- expect(deploy_dir.join('current', 'precompiled')).not_to exist
129
- expect(read_output).to include("Skipping asset precompilation. ('config/application.rb' disables assets.)")
130
- end
131
-
132
- it "deploys successfully when application.rb has utf-8 encoding" do
133
- deploy_test_application('assets_disabled_utf8')
134
- expect(deploy_dir.join('current', 'precompiled')).not_to exist
135
- expect(read_output).to include("Skipping asset precompilation. ('config/application.rb' disables assets.)")
136
- end
137
- end
138
-
139
- context "with asset compilation disabled in ey.yml, despite all other configuration would enable assets" do
140
- before(:all) do
141
- deploy_test_application('assets_disabled_in_ey_yml')
142
- end
143
-
144
- it "does not precompile assets" do
145
- expect(deploy_dir.join('current', 'precompiled')).not_to exist
146
- expect(read_output).to include("Skipping asset precompilation. (precompile_assets: false)")
147
- end
148
- end
149
-
150
- context "with existing precompilation in a deploy hook" do
151
- before(:all) do
152
- deploy_test_application('assets_in_hook')
153
- end
154
-
155
- it "does not replace the public/assets directory" do
156
- expect(deploy_dir.join('current', 'custom_compiled')).to exist
157
- expect(deploy_dir.join('current', 'precompiled')).not_to exist
158
- expect(deploy_dir.join('current', 'public', 'assets')).to be_directory
159
- expect(deploy_dir.join('current', 'public', 'assets')).not_to be_symlink
160
- expect(deploy_dir.join('current', 'public', 'assets', 'custom_compiled_asset')).to exist
161
- expect(read_output).to include("Skipping asset precompilation. ('public/assets' directory already exists.)")
162
- end
163
- end
164
- end
@@ -1,43 +0,0 @@
1
- require 'spec_helper'
2
-
3
- class TestRestartDeploy < FullTestDeploy
4
- attr_reader :call_order
5
- def initialize(*a)
6
- super
7
- @call_order = []
8
- end
9
-
10
- def require_custom_tasks() @call_order << 'require_custom_tasks' end
11
- def restart() @call_order << 'restart' end
12
- def enable_maintenance_page() @call_order << 'enable_maintenance_page' end
13
- def disable_maintenance_page() @call_order << 'disable_maintenance_page' end
14
- end
15
-
16
- describe "EY::Serverside::Deploy#restart_with_maintenance_page" do
17
-
18
- class TestRestartWithMaintenancePage < TestRestartDeploy
19
- def conditionally_enable_maintenance_page() @call_order << 'conditionally_enable_maintenance_page' end
20
- end
21
-
22
- it "puts up the maintenance page if necessary, restarts, and takes down the maintenance page" do
23
- config = EY::Serverside::Deploy::Configuration.new('deploy_to' => deploy_dir, 'app' => 'app_name')
24
- deployer = TestRestartWithMaintenancePage.realnew(test_servers, config, test_shell)
25
- deployer.restart_with_maintenance_page
26
- expect(deployer.call_order).to eq(%w(
27
- require_custom_tasks
28
- enable_maintenance_page
29
- restart
30
- disable_maintenance_page
31
- ))
32
- end
33
- end
34
-
35
- describe "glassfish stack" do
36
-
37
- it "requires a maintenance page" do
38
- config = EY::Serverside::Deploy::Configuration.new('deploy_to' => deploy_dir, 'app' => 'app_name', 'stack' => 'glassfish')
39
- deployer = TestRestartDeploy.realnew(test_servers, config, test_shell)
40
- deployer.restart_with_maintenance_page
41
- expect(deployer.call_order).to include('enable_maintenance_page')
42
- end
43
- end
@@ -1,87 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe "Rolling back" do
4
- def setup_good_and_bad_deploy(repo)
5
- deploy_test_application(repo, 'migrate' => nil)
6
- @good_revision = deploy_dir.join('current', 'REVISION').read.strip
7
- expect(deploy_dir.join('current', 'REVISION')).to exist
8
- deploy_dir.join('current', 'restart').delete
9
- deploy_test_application(repo, 'migrate' => nil)
10
- expect(deploy_dir.join('current', 'REVISION')).to exist
11
- deploy_dir.join('current', 'restart').delete
12
-
13
- releases = @deployer.config.paths.all_releases
14
- expect(releases.size).to eq(2)
15
- @good_release = releases.first
16
- @bad_release = releases.last
17
- end
18
-
19
- def rollback
20
- argv = @adapter.rollback.commands.last.to_argv[2..-1]
21
- with_mocked_commands do
22
- capture do
23
- EY::Serverside::CLI.start(argv)
24
- end
25
- end
26
- end
27
-
28
- context "without bundler" do
29
- before(:all) do
30
- setup_good_and_bad_deploy('not_bundled')
31
- rollback
32
- end
33
-
34
- it "rolls back to the older deploy" do
35
- out = read_output
36
- expect(out).to match(/Rolling back to previous release.*#{@good_revision}/)
37
- expect(out).to match(/Restarting with previous release./)
38
- expect(out).to match(/Finished rollback/)
39
-
40
- expect(deploy_dir.join('current', 'restart')).to exist
41
- expect(@bad_release).not_to exist
42
- expect(@good_release.join('restart')).to exist
43
- end
44
- end
45
-
46
- context "with a problematic file in the releases dir" do
47
- before(:all) do
48
- setup_good_and_bad_deploy('not_bundled')
49
- @deployer.config.paths.releases.join('tmp').mkpath
50
- expect { rollback }.to raise_error
51
- end
52
-
53
- it "rolls back to the older deploy" do
54
- out = read_output
55
- expect(out).to include("Bad paths found in #{@deployer.config.paths.releases}:")
56
- expect(out).to include(@deployer.config.paths.releases.join('tmp').to_s)
57
- expect(out).to include("Storing files in this directory will disrupt latest_release, diff detection, rollback, and possibly other features.")
58
- expect(out).to_not include("Restarting with previous release.")
59
-
60
- expect(deploy_dir.join('current', 'restart')).not_to exist
61
- expect(@bad_release).to exist
62
- expect(@good_release).to exist
63
- end
64
- end
65
-
66
- context "with complex config" do
67
- before(:all) do
68
- setup_good_and_bad_deploy('ey_yml')
69
- rollback
70
- end
71
-
72
- it "rolls back to the older deploy" do
73
- out = read_output
74
- expect(out).to match(/Rolling back to previous release.*#{@good_revision}/)
75
- expect(out).to match(/Restarting with previous release./)
76
- expect(out).to match(/Finished rollback/)
77
-
78
- expect(deploy_dir.join('current', 'restart')).to exist
79
- expect(@bad_release).not_to exist
80
- expect(@good_release.join('restart')).to exist
81
- end
82
-
83
- it "loads and uses ey.yml during rollback" do
84
- expect(read_output).to match(/--without only test/)
85
- end
86
- end
87
- end
@@ -1,70 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe EY::Serverside::Server do
4
- it "starts off empty" do
5
- expect(EY::Serverside::Servers.new([], test_shell)).to be_empty
6
- end
7
-
8
- it "loads from hashes" do
9
- servers = EY::Serverside::Servers.from_hashes([{:hostname => 'otherhost', :roles => %w[fire water]}], test_shell)
10
- expect(servers.size).to eq(1)
11
- end
12
-
13
- it "rejects duplicates" do
14
- expect do
15
- EY::Serverside::Servers.from_hashes([
16
- {:hostname => 'otherhost', :roles => [:fire]},
17
- {:hostname => 'otherhost', :roles => [:water]},
18
- ], test_shell)
19
- end.to raise_error(EY::Serverside::Servers::DuplicateHostname)
20
- end
21
-
22
- it "makes sure your roles are symbols at creation time" do
23
- servers = EY::Serverside::Servers.from_hashes([{:hostname => 'otherhost', :roles => %w[fire water]}], test_shell)
24
- servers.each { |server| expect(server.roles).to eq(Set[:fire, :water]) }
25
- end
26
-
27
- context "filtering" do
28
- before(:each) do
29
- @servers = EY::Serverside::Servers.from_hashes([
30
- {:hostname => 'localhost', :roles => [:ice, :cold]},
31
- {:hostname => 'firewater', :roles => [:fire, :water]},
32
- {:hostname => 'icewater', :roles => [:ice, :water]},
33
- ], test_shell)
34
- end
35
-
36
- it "#roles works with strings or symbols" do
37
- expect(@servers.roles(:fire ).map{|s| s.hostname}).to eq(['firewater'])
38
- expect(@servers.roles('fire').map{|s| s.hostname}).to eq(['firewater']) # hits the cache the second time
39
- end
40
-
41
- it "#roles finds all servers with the specified role" do
42
- expect(@servers.roles(:ice).size).to eq(2)
43
- expect(@servers.roles(:ice).map{|s| s.hostname}.sort).to eq(['icewater','localhost'])
44
- end
45
-
46
- it "#roles finds all servers with any of the specified roles" do
47
- expect(@servers.roles(:ice, :water)).to eq(@servers)
48
- end
49
-
50
- it "#roles returns everything when asked for :all" do
51
- expect(@servers.roles(:all)).to eq(@servers)
52
- end
53
-
54
- it "#roles also yields filtered server set" do
55
- @servers.roles(:ice) do |servers|
56
- expect(servers.size).to eq(2)
57
- expect(servers.map{|s| s.hostname}.sort).to eq(['icewater','localhost'])
58
- end
59
- end
60
-
61
- it "#localhost returns the localhost server" do
62
- expect(@servers.localhost.hostname).to eq('localhost')
63
- end
64
-
65
- it "#remote returns non-localhost servers" do
66
- expect(@servers.remote.size).to eq(2)
67
- expect(@servers.remote.map {|s| s.hostname}.sort).to eq(['firewater','icewater'])
68
- end
69
- end
70
- end
@@ -1,153 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe "Deploying an application with services" do
4
- let(:shared_services_file) { deploy_dir.join('shared', 'config', 'ey_services_config_deploy.yml') }
5
- let(:symlinked_services_file) { deploy_dir.join('current', 'config', 'ey_services_config_deploy.yml') }
6
- let(:services_yml) { {"servicio" => {"foo" => "bar"}}.to_yaml }
7
-
8
- describe "without ey_config" do
9
- describe "with services" do
10
- before do
11
- deploy_test_application('no_ey_config', 'config' => {
12
- 'services_setup_command' => "echo '#{services_yml}' > #{shared_services_file}"
13
- })
14
- end
15
-
16
- it "warns about missing ey_config" do
17
- expect(read_stderr).to include("WARNING: Gemfile.lock does not contain ey_config")
18
- end
19
- end
20
-
21
- describe "without services" do
22
- before do
23
- deploy_test_application('no_ey_config')
24
- end
25
-
26
- it "works without warnings" do
27
- expect(read_output).not_to match(/WARNING/)
28
- end
29
- end
30
- end
31
-
32
- describe "deploy with invalid yaml ey_services_config_deploy" do
33
- before do
34
- @invalid_services_yml = "42"
35
- deploy_test_application('default', 'config' => {
36
- 'services_setup_command' => "echo '#{@invalid_services_yml}' > #{shared_services_file}"
37
- })
38
- end
39
-
40
- it "works without warning" do
41
- expect(shared_services_file).to exist
42
- expect(shared_services_file).not_to be_symlink
43
- expect(shared_services_file.read).to eq("#{@invalid_services_yml}\n")
44
-
45
- expect(symlinked_services_file).to exist
46
- expect(symlinked_services_file).to be_symlink
47
- expect(shared_services_file.read).to eq("#{@invalid_services_yml}\n")
48
-
49
- expect(read_output).not_to match(/WARNING/)
50
- end
51
- end
52
-
53
- describe "a succesful deploy" do
54
- before do
55
- deploy_test_application('default', 'config' => {
56
- 'services_setup_command' => "echo '#{services_yml}' > #{shared_services_file}"
57
- })
58
- end
59
-
60
- it "creates and symlinks ey_services_config_deploy.yml" do
61
- expect(shared_services_file).to exist
62
- expect(shared_services_file).not_to be_symlink
63
- expect(shared_services_file.read).to eq("#{services_yml}\n")
64
-
65
- expect(symlinked_services_file).to exist
66
- expect(symlinked_services_file).to be_symlink
67
- expect(shared_services_file.read).to eq("#{services_yml}\n")
68
-
69
- expect(read_output).not_to match(/WARNING/)
70
- end
71
- end
72
-
73
- describe "a successful deploy followed by a deploy that can't find the command" do
74
- before do
75
- deploy_test_application('default', 'config' => {
76
- 'services_setup_command' => "echo '#{services_yml}' > #{shared_services_file}"
77
- })
78
- redeploy_test_application('config' => {
79
- 'services_check_command' => 'false'
80
- })
81
- end
82
-
83
- it "silently fails" do
84
- expect(shared_services_file).to exist
85
- expect(shared_services_file).not_to be_symlink
86
- expect(shared_services_file.read).to eq("#{services_yml}\n")
87
-
88
- expect(symlinked_services_file).to exist
89
- expect(symlinked_services_file).to be_symlink
90
- expect(shared_services_file.read).to eq("#{services_yml}\n")
91
-
92
- expect(read_output).not_to match(/WARNING/)
93
- end
94
-
95
- end
96
-
97
- describe "a successful followed by a deploy that fails to fetch services" do
98
- it "logs a warning and symlinks the existing config file when there is existing services file" do
99
- deploy_test_application('default', 'config' => {
100
- 'services_setup_command' => "echo '#{services_yml}' > #{shared_services_file}"
101
- })
102
- redeploy_test_application('config' => {'services_setup_command' => 'false'})
103
-
104
- expect(shared_services_file).to exist
105
- expect(shared_services_file).not_to be_symlink
106
- expect(shared_services_file.read).to eq("#{services_yml}\n")
107
-
108
- expect(symlinked_services_file).to exist
109
- expect(symlinked_services_file).to be_symlink
110
- expect(shared_services_file.read).to eq("#{services_yml}\n")
111
-
112
- expect(read_output).to include('WARNING: External services configuration not updated')
113
- end
114
-
115
- it "does not log a warning or symlink a config file when there is no existing services file" do
116
- deploy_test_application('default', 'config' => {
117
- 'services_setup_command' => "echo '#{services_yml}' > #{shared_services_file}"
118
- })
119
- shared_services_file.delete
120
- redeploy_test_application('config' => {'services_setup_command' => 'false'})
121
-
122
- expect(shared_services_file).not_to exist
123
- expect(symlinked_services_file).not_to exist
124
-
125
- expect(read_output).not_to match(/WARNING/)
126
- end
127
- end
128
-
129
- describe "a successful deploy followed by another successfull deploy" do
130
- before do
131
- deploy_test_application('default', 'config' => {
132
- 'services_setup_command' => "echo '#{services_yml}' > #{shared_services_file}"
133
- })
134
- @new_services_yml = {"servicio" => {"foo" => "bar2"}}.to_yaml
135
- redeploy_test_application('config' => {
136
- 'services_setup_command' => "echo '#{@new_services_yml}' > #{shared_services_file}"
137
- })
138
- end
139
-
140
- it "replaces the config with the new one (and symlinks)" do
141
- expect(shared_services_file).to exist
142
- expect(shared_services_file).not_to be_symlink
143
- expect(shared_services_file.read).to eq("#{@new_services_yml}\n")
144
-
145
- expect(symlinked_services_file).to exist
146
- expect(symlinked_services_file).to be_symlink
147
- expect(shared_services_file.read).to eq("#{@new_services_yml}\n")
148
-
149
- expect(read_output).not_to match(/WARNING/)
150
- end
151
- end
152
-
153
- end