engineyard-serverside 2.6.17 → 2.6.19

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 (219) hide show
  1. checksums.yaml +4 -4
  2. data/lib/engineyard-serverside/dependency_manager/bundler.rb +1 -1
  3. data/lib/engineyard-serverside/slug.rb +7 -0
  4. data/lib/engineyard-serverside/slug/distributor.rb +58 -0
  5. data/lib/engineyard-serverside/slug/enabler.rb +100 -0
  6. data/lib/engineyard-serverside/slug/failure_handler.rb +24 -0
  7. data/lib/engineyard-serverside/slug/finalizer.rb +86 -0
  8. data/lib/engineyard-serverside/slug/generator.rb +29 -0
  9. data/lib/engineyard-serverside/slug/migrator.rb +41 -0
  10. data/lib/engineyard-serverside/slug/restarter.rb +103 -0
  11. data/lib/engineyard-serverside/slug/source.rb +16 -0
  12. data/lib/engineyard-serverside/slug/source/updater.rb +194 -0
  13. data/lib/engineyard-serverside/version.rb +1 -1
  14. data/lib/railway.rb +43 -0
  15. data/lib/result.rb +7 -0
  16. data/lib/result/base.rb +41 -0
  17. data/lib/result/dsl.rb +16 -0
  18. data/lib/result/failure.rb +29 -0
  19. data/lib/result/success.rb +24 -0
  20. data/lib/runner.rb +34 -0
  21. metadata +25 -405
  22. data/spec/archive_deploy_spec.rb +0 -53
  23. data/spec/basic_deploy_spec.rb +0 -26
  24. data/spec/bundler_deploy_spec.rb +0 -160
  25. data/spec/configuration_spec.rb +0 -206
  26. data/spec/custom_deploy_spec.rb +0 -128
  27. data/spec/deploy_hook_spec.rb +0 -362
  28. data/spec/deprecation_spec.rb +0 -23
  29. data/spec/ey_yml_customized_deploy_spec.rb +0 -99
  30. data/spec/fixtures/gitrepo.tar.gz +0 -0
  31. data/spec/fixtures/invalid_hook.rb +0 -1
  32. data/spec/fixtures/lockfiles/0.9-no-bundler +0 -111
  33. data/spec/fixtures/lockfiles/0.9-with-bundler +0 -117
  34. data/spec/fixtures/lockfiles/1.0-no-bundler +0 -54
  35. data/spec/fixtures/lockfiles/1.0.0.rc.1-with-bundler +0 -162
  36. data/spec/fixtures/lockfiles/1.0.18-do_mysql +0 -88
  37. data/spec/fixtures/lockfiles/1.0.18-do_postgres +0 -79
  38. data/spec/fixtures/lockfiles/1.0.18-mysql +0 -43
  39. data/spec/fixtures/lockfiles/1.0.18-mysql2 +0 -43
  40. data/spec/fixtures/lockfiles/1.0.18-pg +0 -43
  41. data/spec/fixtures/lockfiles/1.0.6-no-bundler +0 -51
  42. data/spec/fixtures/lockfiles/1.0.6-with-any-bundler +0 -52
  43. data/spec/fixtures/lockfiles/1.0.6-with-bundler +0 -52
  44. data/spec/fixtures/lockfiles/1.15.1-no-bundler +0 -51
  45. data/spec/fixtures/lockfiles/1.3.1-rails-3.2.13 +0 -112
  46. data/spec/fixtures/lockfiles/not-a-lockfile +0 -1
  47. data/spec/fixtures/repos/assets_detected/Gemfile +0 -5
  48. data/spec/fixtures/repos/assets_detected/Gemfile.lock +0 -88
  49. data/spec/fixtures/repos/assets_detected/README +0 -1
  50. data/spec/fixtures/repos/assets_detected/Rakefile +0 -5
  51. data/spec/fixtures/repos/assets_detected/app/assets/empty +0 -0
  52. data/spec/fixtures/repos/assets_detected/config/application.rb +0 -5
  53. data/spec/fixtures/repos/assets_detected/config/ey.yml +0 -3
  54. data/spec/fixtures/repos/assets_disabled/Gemfile +0 -5
  55. data/spec/fixtures/repos/assets_disabled/Gemfile.lock +0 -88
  56. data/spec/fixtures/repos/assets_disabled/README +0 -1
  57. data/spec/fixtures/repos/assets_disabled/Rakefile +0 -6
  58. data/spec/fixtures/repos/assets_disabled/app/assets/empty +0 -0
  59. data/spec/fixtures/repos/assets_disabled/config/application.rb +0 -5
  60. data/spec/fixtures/repos/assets_disabled/config/ey.yml +0 -3
  61. data/spec/fixtures/repos/assets_disabled_in_ey_yml/Gemfile +0 -5
  62. data/spec/fixtures/repos/assets_disabled_in_ey_yml/Gemfile.lock +0 -88
  63. data/spec/fixtures/repos/assets_disabled_in_ey_yml/README +0 -1
  64. data/spec/fixtures/repos/assets_disabled_in_ey_yml/Rakefile +0 -6
  65. data/spec/fixtures/repos/assets_disabled_in_ey_yml/app/assets/empty +0 -0
  66. data/spec/fixtures/repos/assets_disabled_in_ey_yml/config/application.rb +0 -5
  67. data/spec/fixtures/repos/assets_disabled_in_ey_yml/config/ey.yml +0 -5
  68. data/spec/fixtures/repos/assets_disabled_utf8/Gemfile +0 -5
  69. data/spec/fixtures/repos/assets_disabled_utf8/Gemfile.lock +0 -88
  70. data/spec/fixtures/repos/assets_disabled_utf8/README +0 -3
  71. data/spec/fixtures/repos/assets_disabled_utf8/Rakefile +0 -5
  72. data/spec/fixtures/repos/assets_disabled_utf8/app/assets/empty +0 -0
  73. data/spec/fixtures/repos/assets_disabled_utf8/config/application.rb +0 -7
  74. data/spec/fixtures/repos/assets_disabled_utf8/config/ey.yml +0 -3
  75. data/spec/fixtures/repos/assets_enabled_all/Gemfile +0 -5
  76. data/spec/fixtures/repos/assets_enabled_all/Gemfile.lock +0 -88
  77. data/spec/fixtures/repos/assets_enabled_all/README +0 -1
  78. data/spec/fixtures/repos/assets_enabled_all/app/assets/empty +0 -0
  79. data/spec/fixtures/repos/assets_enabled_all/config/application.rb +0 -5
  80. data/spec/fixtures/repos/assets_enabled_all/config/ey.yml +0 -6
  81. data/spec/fixtures/repos/assets_enabled_all/script/assets +0 -5
  82. data/spec/fixtures/repos/assets_enabled_all/tmp/obstruction +0 -1
  83. data/spec/fixtures/repos/assets_enabled_in_ey_yml/Gemfile +0 -3
  84. data/spec/fixtures/repos/assets_enabled_in_ey_yml/Gemfile.lock +0 -10
  85. data/spec/fixtures/repos/assets_enabled_in_ey_yml/README +0 -1
  86. data/spec/fixtures/repos/assets_enabled_in_ey_yml/Rakefile +0 -8
  87. data/spec/fixtures/repos/assets_enabled_in_ey_yml/config/ey.yml +0 -4
  88. data/spec/fixtures/repos/assets_enabled_util_only/Gemfile +0 -5
  89. data/spec/fixtures/repos/assets_enabled_util_only/Gemfile.lock +0 -88
  90. data/spec/fixtures/repos/assets_enabled_util_only/README +0 -1
  91. data/spec/fixtures/repos/assets_enabled_util_only/Rakefile +0 -6
  92. data/spec/fixtures/repos/assets_enabled_util_only/app/assets/empty +0 -0
  93. data/spec/fixtures/repos/assets_enabled_util_only/config/application.rb +0 -5
  94. data/spec/fixtures/repos/assets_enabled_util_only/config/ey.yml +0 -6
  95. data/spec/fixtures/repos/assets_error/Gemfile +0 -5
  96. data/spec/fixtures/repos/assets_error/Gemfile.lock +0 -88
  97. data/spec/fixtures/repos/assets_error/README +0 -1
  98. data/spec/fixtures/repos/assets_error/Rakefile +0 -4
  99. data/spec/fixtures/repos/assets_error/app/assets/empty +0 -0
  100. data/spec/fixtures/repos/assets_error/config/application.rb +0 -5
  101. data/spec/fixtures/repos/assets_error/config/ey.yml +0 -4
  102. data/spec/fixtures/repos/assets_in_hook/Gemfile +0 -5
  103. data/spec/fixtures/repos/assets_in_hook/Gemfile.lock +0 -88
  104. data/spec/fixtures/repos/assets_in_hook/README +0 -2
  105. data/spec/fixtures/repos/assets_in_hook/Rakefile +0 -5
  106. data/spec/fixtures/repos/assets_in_hook/app/assets/empty +0 -0
  107. data/spec/fixtures/repos/assets_in_hook/config/application.rb +0 -5
  108. data/spec/fixtures/repos/assets_in_hook/config/ey.yml +0 -3
  109. data/spec/fixtures/repos/assets_in_hook/deploy/before_compile_assets.rb +0 -2
  110. data/spec/fixtures/repos/bundle_fails/Gemfile +0 -1
  111. data/spec/fixtures/repos/bundle_fails/README +0 -1
  112. data/spec/fixtures/repos/bundle_fails/deploy/after_bundle.rb +0 -1
  113. data/spec/fixtures/repos/bundler_disabled/Gemfile +0 -4
  114. data/spec/fixtures/repos/bundler_disabled/Gemfile.lock +0 -12
  115. data/spec/fixtures/repos/bundler_disabled/README +0 -1
  116. data/spec/fixtures/repos/bundler_disabled/config/ey.yml +0 -2
  117. data/spec/fixtures/repos/bundler_disabled/deploy/after_bundle.rb +0 -1
  118. data/spec/fixtures/repos/bundler_disabled/deploy/before_bundle.rb +0 -1
  119. data/spec/fixtures/repos/bundler_old/Gemfile +0 -5
  120. data/spec/fixtures/repos/bundler_old/Gemfile.lock +0 -15
  121. data/spec/fixtures/repos/bundler_old/README +0 -1
  122. data/spec/fixtures/repos/default/Gemfile +0 -4
  123. data/spec/fixtures/repos/default/Gemfile.lock +0 -12
  124. data/spec/fixtures/repos/default/README +0 -5
  125. data/spec/fixtures/repos/default/ey.yml +0 -3
  126. data/spec/fixtures/repos/executable_hooks/README +0 -1
  127. data/spec/fixtures/repos/executable_hooks/deploy/before_restart +0 -72
  128. data/spec/fixtures/repos/executable_hooks_not_executable/README +0 -3
  129. data/spec/fixtures/repos/executable_hooks_not_executable/deploy/before_restart +0 -3
  130. data/spec/fixtures/repos/ey_yml/Gemfile +0 -4
  131. data/spec/fixtures/repos/ey_yml/Gemfile.lock +0 -12
  132. data/spec/fixtures/repos/ey_yml/README +0 -1
  133. data/spec/fixtures/repos/ey_yml/config/ey.yml +0 -18
  134. data/spec/fixtures/repos/ey_yml/deploy/before_migrate.rb +0 -6
  135. data/spec/fixtures/repos/ey_yml_alt/Gemfile +0 -4
  136. data/spec/fixtures/repos/ey_yml_alt/Gemfile.lock +0 -12
  137. data/spec/fixtures/repos/ey_yml_alt/README +0 -1
  138. data/spec/fixtures/repos/ey_yml_alt/deploy/before_migrate.rb +0 -6
  139. data/spec/fixtures/repos/ey_yml_alt/ey.yml +0 -12
  140. data/spec/fixtures/repos/hook_fails/README +0 -1
  141. data/spec/fixtures/repos/hook_fails/deploy/before_deploy.rb +0 -1
  142. data/spec/fixtures/repos/hooks/README +0 -1
  143. data/spec/fixtures/repos/hooks/deploy/after_bundle.rb +0 -1
  144. data/spec/fixtures/repos/hooks/deploy/after_compile_assets.rb +0 -1
  145. data/spec/fixtures/repos/hooks/deploy/after_deploy.rb +0 -1
  146. data/spec/fixtures/repos/hooks/deploy/after_migrate.rb +0 -1
  147. data/spec/fixtures/repos/hooks/deploy/after_restart.rb +0 -1
  148. data/spec/fixtures/repos/hooks/deploy/after_symlink.rb +0 -1
  149. data/spec/fixtures/repos/hooks/deploy/before_bundle.rb +0 -1
  150. data/spec/fixtures/repos/hooks/deploy/before_compile_assets.rb +0 -1
  151. data/spec/fixtures/repos/hooks/deploy/before_deploy.rb +0 -1
  152. data/spec/fixtures/repos/hooks/deploy/before_migrate.rb +0 -1
  153. data/spec/fixtures/repos/hooks/deploy/before_restart.rb +0 -1
  154. data/spec/fixtures/repos/hooks/deploy/before_symlink.rb +0 -1
  155. data/spec/fixtures/repos/multi_dep_manager/README +0 -1
  156. data/spec/fixtures/repos/multi_dep_manager/composer.json +0 -5
  157. data/spec/fixtures/repos/multi_dep_manager/composer.lock +0 -462
  158. data/spec/fixtures/repos/multi_dep_manager/package.json +0 -7
  159. data/spec/fixtures/repos/multi_dep_manager/public/index.php +0 -4
  160. data/spec/fixtures/repos/no_ey_config/Gemfile +0 -3
  161. data/spec/fixtures/repos/no_ey_config/Gemfile.lock +0 -10
  162. data/spec/fixtures/repos/no_ey_config/README +0 -1
  163. data/spec/fixtures/repos/no_ey_config/ey.yml +0 -3
  164. data/spec/fixtures/repos/no_ey_config_no_warning/Gemfile +0 -3
  165. data/spec/fixtures/repos/no_ey_config_no_warning/Gemfile.lock +0 -10
  166. data/spec/fixtures/repos/no_ey_config_no_warning/README +0 -1
  167. data/spec/fixtures/repos/no_ey_config_no_warning/ey.yml +0 -5
  168. data/spec/fixtures/repos/no_gemfile_lock/Gemfile +0 -4
  169. data/spec/fixtures/repos/no_gemfile_lock/README +0 -1
  170. data/spec/fixtures/repos/no_gemfile_lock/ey.yml +0 -3
  171. data/spec/fixtures/repos/nodejs/README +0 -1
  172. data/spec/fixtures/repos/nodejs/package.json +0 -7
  173. data/spec/fixtures/repos/not_bundled/README +0 -1
  174. data/spec/fixtures/repos/npm_disabled/README +0 -1
  175. data/spec/fixtures/repos/npm_disabled/config/ey.yml +0 -2
  176. data/spec/fixtures/repos/npm_disabled/package.json +0 -7
  177. data/spec/fixtures/repos/php_composer_disabled/README +0 -1
  178. data/spec/fixtures/repos/php_composer_disabled/composer.json +0 -5
  179. data/spec/fixtures/repos/php_composer_disabled/composer.lock +0 -462
  180. data/spec/fixtures/repos/php_composer_disabled/config/ey.yml +0 -2
  181. data/spec/fixtures/repos/php_composer_disabled/public/index.php +0 -4
  182. data/spec/fixtures/repos/php_composer_lock/README +0 -1
  183. data/spec/fixtures/repos/php_composer_lock/composer.json +0 -5
  184. data/spec/fixtures/repos/php_composer_lock/composer.lock +0 -462
  185. data/spec/fixtures/repos/php_composer_lock/public/index.php +0 -4
  186. data/spec/fixtures/repos/php_no_composer_lock/README +0 -1
  187. data/spec/fixtures/repos/php_no_composer_lock/composer.json +0 -21
  188. data/spec/fixtures/repos/php_no_composer_lock/public/index.php +0 -4
  189. data/spec/fixtures/repos/public_system/Gemfile +0 -4
  190. data/spec/fixtures/repos/public_system/Gemfile.lock +0 -12
  191. data/spec/fixtures/repos/public_system/README +0 -5
  192. data/spec/fixtures/repos/public_system/ey.yml +0 -3
  193. data/spec/fixtures/repos/public_system/public/system/cant_touch_this.txt +0 -3
  194. data/spec/fixtures/repos/sqlite3/Gemfile +0 -4
  195. data/spec/fixtures/repos/sqlite3/Gemfile.lock +0 -89
  196. data/spec/fixtures/repos/sqlite3/README +0 -1
  197. data/spec/fixtures/retwisj.war +0 -0
  198. data/spec/fixtures/valid_hook.rb +0 -1
  199. data/spec/git_strategy_spec.rb +0 -34
  200. data/spec/lockfile_parser_spec.rb +0 -126
  201. data/spec/maintenance_spec.rb +0 -44
  202. data/spec/multi_dependency_manager_spec.rb +0 -25
  203. data/spec/nodejs_deploy_spec.rb +0 -30
  204. data/spec/php_deploy_spec.rb +0 -81
  205. data/spec/platform_configure_spec.rb +0 -61
  206. data/spec/rails31_deploy_spec.rb +0 -172
  207. data/spec/restart_spec.rb +0 -43
  208. data/spec/rollback_spec.rb +0 -87
  209. data/spec/server_spec.rb +0 -70
  210. data/spec/services_deploy_spec.rb +0 -165
  211. data/spec/shell_spec.rb +0 -57
  212. data/spec/source/archive_spec.rb +0 -33
  213. data/spec/source/git_spec.rb +0 -44
  214. data/spec/spec_helper.rb +0 -360
  215. data/spec/sqlite3_deploy_spec.rb +0 -38
  216. data/spec/support/integration.rb +0 -103
  217. data/spec/support/source_doubles.rb +0 -28
  218. data/spec/support/timecop.rb +0 -5
  219. data/spec/symlink_spec.rb +0 -15
@@ -1,362 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe "deploy hooks" do
4
- context "successful deploy with all hooks" do
5
- before(:all) do
6
- deploy_test_application('hooks')
7
- end
8
-
9
- it "runs all the hooks" do
10
- expect(deploy_dir.join('current', 'before_deploy.ran' )).to exist
11
- expect(deploy_dir.join('current', 'before_bundle.ran' )).to exist
12
- expect(deploy_dir.join('current', 'after_bundle.ran' )).to exist
13
- expect(deploy_dir.join('current', 'before_migrate.ran')).to exist
14
- expect(deploy_dir.join('current', 'after_migrate.ran' )).to exist
15
- expect(deploy_dir.join('current', 'before_compile_assets.ran')).to exist
16
- expect(deploy_dir.join('current', 'after_compile_assets.ran' )).to exist
17
- expect(deploy_dir.join('current', 'before_symlink.ran')).to exist
18
- expect(deploy_dir.join('current', 'after_symlink.ran' )).to exist
19
- expect(deploy_dir.join('current', 'before_restart.ran')).to exist
20
- expect(deploy_dir.join('current', 'after_restart.ran' )).to exist
21
- expect(deploy_dir.join('current', 'after_deploy.ran' )).to exist
22
- end
23
- end
24
-
25
- context "with failing deploy hook" do
26
- before(:all) do
27
- begin
28
- deploy_test_application('hook_fails', :verbose => false)
29
- rescue EY::Serverside::RemoteFailure
30
- end
31
- end
32
-
33
- it "prints the failure to the log even when non-verbose" do
34
- out = read_output
35
- expect(out).to match(%r|FATAL: Exception raised in deploy hook .*/deploy/before_deploy.rb.|)
36
- expect(out).to match(%r|RuntimeError:.*Hook failing in \(eval\)|)
37
- expect(out).to match(%r|Please fix this error before retrying.|)
38
- end
39
-
40
- it "retains the failed release" do
41
- release_name = @config.paths.active_release.basename
42
- expect(deploy_dir.join('releases_failed', release_name)).to be_directory
43
- end
44
- end
45
-
46
- context "with an executable for a deploy hook" do
47
- before(:all) do
48
- deploy_test_application('executable_hooks')
49
- end
50
-
51
- it 'runs the hook' do
52
- expect(deploy_dir.join('current', 'before_restart.ran')).to exist
53
- end
54
- end
55
-
56
- context "with a non-executable, but correctly named deploy hook" do
57
- before(:all) do
58
- deploy_test_application('executable_hooks_not_executable')
59
- end
60
-
61
- it 'does not run the hook' do
62
- expect(deploy_dir.join('current', 'before_restart.ran')).not_to exist
63
- end
64
-
65
- it 'outputs a message about the hook not being executable' do
66
- expect(read_output).to match(%r|Skipping.*deploy hook.*not executable|)
67
- end
68
- end
69
-
70
- context "deploy hook API" do
71
- def deploy_hook(options={})
72
- config = EY::Serverside::Deploy::Configuration.new({
73
- 'app' => 'app_name',
74
- 'framework_env' => 'staging',
75
- 'current_roles' => ['solo'],
76
- 'deploy_to' => deploy_dir.to_s,
77
- }.merge(options))
78
- # setup to run hooks since a deploy hasn't happened
79
- config.paths.new_release!
80
- config.paths.active_release.mkpath
81
- EY::Serverside::DeployHook.new(config, test_shell, 'fake_test_hook')
82
- end
83
-
84
- context "#run" do
85
- it "is available" do
86
- expect(deploy_hook.eval_hook('respond_to?(:run)')).to be_truthy
87
- end
88
-
89
- it "runs commands like the shell does" do
90
- ENV['COUNT'] = 'Chocula'
91
- File.unlink("/tmp/deploy_hook_spec.the_count") rescue nil
92
-
93
- deploy_hook.eval_hook('run("echo $COUNT > /tmp/deploy_hook_spec.the_count")')
94
-
95
- expect(IO.read("/tmp/deploy_hook_spec.the_count").strip).to eq("Chocula")
96
- end
97
-
98
- it "returns true/false to indicate the command's success" do
99
- expect(deploy_hook.eval_hook('run("true")')).to be_truthy
100
- expect(deploy_hook.eval_hook('run("false")')).to be_falsey
101
- end
102
-
103
- it "raises when the bang method alternative is used" do
104
- expect {
105
- deploy_hook.eval_hook('run!("false")')
106
- }.to raise_error(RuntimeError)
107
- out = read_output
108
- expect(out).to match(%r|FATAL: Exception raised in deploy hook .*/deploy/fake_test_hook.rb.|)
109
- expect(out).to match(%r|RuntimeError: .*run!.*Command failed. false|)
110
- expect(out).to match(%r|Please fix this error before retrying.|)
111
- end
112
- end
113
-
114
- context "#sudo" do
115
- it "is available" do
116
- expect(deploy_hook.eval_hook('respond_to?(:sudo)')).to be_truthy
117
- end
118
-
119
- it "runs things with sudo" do
120
- hook = deploy_hook
121
- mock_sudo do
122
- hook.eval_hook('sudo("true") || raise("failed")')
123
- end
124
- end
125
-
126
- it "raises when the bang method alternative is used" do
127
- hook = deploy_hook
128
- mock_sudo do
129
- expect {
130
- hook.eval_hook('sudo!("false")')
131
- }.to raise_error(RuntimeError)
132
- end
133
- out = read_output
134
- expect(out).to match(%r|FATAL: Exception raised in deploy hook .*/deploy/fake_test_hook.rb.|)
135
- expect(out).to match(%r|RuntimeError: .*sudo!.*Command failed. false|)
136
- expect(out).to match(%r|Please fix this error before retrying.|)
137
- end
138
- end
139
-
140
- context "capistrano-ish methods" do
141
- it "has them" do
142
- expect(deploy_hook.eval_hook('respond_to?(:latest_release) ')).to be_truthy
143
- expect(deploy_hook.eval_hook('respond_to?(:previous_release) ')).to be_truthy
144
- expect(deploy_hook.eval_hook('respond_to?(:all_releases) ')).to be_truthy
145
- expect(deploy_hook.eval_hook('respond_to?(:current_path) ')).to be_truthy
146
- expect(deploy_hook.eval_hook('respond_to?(:shared_path) ')).to be_truthy
147
- expect(deploy_hook.eval_hook('respond_to?(:release_dir) ')).to be_truthy
148
- expect(deploy_hook.eval_hook('respond_to?(:failed_release_dir)')).to be_truthy
149
- expect(deploy_hook.eval_hook('respond_to?(:release_path) ')).to be_truthy
150
- end
151
-
152
- it "shows a deprecation warning that asks you to use config to access these variables" do
153
- expect(deploy_hook.eval_hook('shared_path.nil?')).to be_falsey
154
- out = read_output
155
- expect(out).to include("Use of `shared_path` (via method_missing) is deprecated in favor of `config.shared_path` for improved error messages and compatibility.")
156
- expect(out).to match(%r|in .*/deploy/fake_test_hook.rb|)
157
- end
158
- end
159
-
160
- context "access to command line options that should be handed through to the config" do
161
- before do
162
- @hook = deploy_hook({'app' => 'app', 'environment_name' => 'env', 'account_name' => 'acc'})
163
- end
164
-
165
- it "has account_name" do
166
- expect(@hook.eval_hook('account_name')).to eq('acc')
167
- end
168
-
169
- it "has environment_name" do
170
- expect(@hook.eval_hook('environment_name')).to eq('env')
171
- end
172
-
173
- it "has app_name" do
174
- expect(@hook.eval_hook('app_name')).to eq('app')
175
- end
176
- end
177
-
178
- context "node" do
179
- before(:each) do
180
- EY::Serverside.dna_json = MultiJson.dump({
181
- 'instance_role' => 'solo',
182
- 'applications' => {
183
- 'myapp' => {
184
- 'type' => 'rails',
185
- 'branch' => 'master',
186
- }
187
- }
188
- })
189
- end
190
-
191
- it "is deprecated through the @node ivar" do
192
- expect(deploy_hook.eval_hook('@node.nil?')).to be_falsey
193
- out = read_output
194
- expect(out).to match(%r|Use of `@node` in deploy hooks is deprecated.|)
195
- expect(out).to match(%r|Please use `config.node`, which provides access to the same object.|)
196
- expect(out).to match(%r|.*/deploy/fake_test_hook.rb|)
197
- end
198
-
199
- it "is available" do
200
- expect(deploy_hook.eval_hook('config.node.nil?')).to be_falsey
201
- end
202
-
203
- it "has indifferent access" do
204
- expect(deploy_hook.eval_hook('config.node[:instance_role] ')).to eq('solo')
205
- expect(deploy_hook.eval_hook('config.node["instance_role"]')).to eq('solo')
206
- end
207
-
208
- it "has deep indifferent access" do
209
- expect(deploy_hook.eval_hook('config.node["applications"]["myapp"]["type"]')).to eq('rails')
210
- expect(deploy_hook.eval_hook('config.node[:applications]["myapp"][:type] ')).to eq('rails')
211
- expect(deploy_hook.eval_hook('config.node[:applications][:myapp][:type] ')).to eq('rails')
212
- end
213
- end
214
-
215
- context "config" do
216
- it "is available" do
217
- expect(deploy_hook.eval_hook('config.nil?')).to be_falsey
218
- end
219
-
220
- it "is deprecated through the @configuration ivar" do
221
- expect(deploy_hook.eval_hook('@configuration.nil?')).to be_falsey
222
- out = read_output
223
- expect(out).to match(%r|Use of `@configuration` in deploy hooks is deprecated.|)
224
- expect(out).to match(%r|Please use `config`, which provides access to the same object.|)
225
- expect(out).to match(%r|.*/deploy/fake_test_hook.rb|)
226
- end
227
-
228
- it "has the configuration in it" do
229
- expect(deploy_hook('bert' => 'ernie').eval_hook('config.bert')).to eq('ernie')
230
- end
231
-
232
- it "can be accessed with method calls, with [:symbols], or ['strings']" do
233
- expect(deploy_hook('bert' => 'ernie').eval_hook('config.bert ')).to eq('ernie')
234
- expect(deploy_hook('bert' => 'ernie').eval_hook('config[:bert] ')).to eq('ernie')
235
- expect(deploy_hook('bert' => 'ernie').eval_hook('config["bert"]')).to eq('ernie')
236
- end
237
-
238
- [:repository_cache,
239
- :release_path,
240
- :branch,
241
- :shared_path,
242
- :deploy_to,
243
- :user,
244
- :revision,
245
- :environment].each do |attribute|
246
- it "has the #{attribute.inspect} attribute for compatibility with chef-deploy" do
247
- expect(deploy_hook.eval_hook("config.has_key?(#{attribute.inspect})")).to be_truthy
248
- end
249
- end
250
- end
251
-
252
- context "environment variables" do
253
- it "sets the framework env variables" do
254
- expect(deploy_hook('framework_env' => 'production').eval_hook("ENV['RAILS_ENV']")).to eq('production')
255
- expect(deploy_hook('framework_env' => 'production').eval_hook("ENV['RACK_ENV'] ")).to eq('production')
256
- expect(deploy_hook('framework_env' => 'production').eval_hook("ENV['MERB_ENV'] ")).to eq('production')
257
- expect(deploy_hook('framework_env' => 'production').eval_hook("ENV['NODE_ENV'] ")).to eq('production')
258
- end
259
- end
260
-
261
- context "has methods to run code only on certain instances" do
262
- def scenarios
263
- [
264
- ['solo' ],
265
- ['app_master' ],
266
- ['app' ],
267
- ['db_master' ],
268
- ['db_slave' ],
269
- ['multi_role,app'],
270
- ['multi,util' ],
271
- ['util', 'alpha' ],
272
- ['util', 'beta' ],
273
- ['util', 'gamma' ],
274
- ]
275
- end
276
-
277
- def where_code_runs_with(code)
278
- scenarios.select do |role, name|
279
- hook = deploy_hook('current_roles' => role.split(','), 'current_name' => name)
280
- hook.eval_hook("#{code} { 'ran' } == 'ran'")
281
- end.map do |scenario|
282
- scenario.compact.join("_")
283
- end.compact
284
- end
285
-
286
- it "#on_app_master runs on app masters and solos" do
287
- expect(where_code_runs_with("on_app_master")).to eq(%w(solo app_master))
288
- end
289
-
290
- it "#on_app_servers runs on app masters, app slaves, and solos" do
291
- expect(where_code_runs_with("on_app_servers")).to eq(%w(solo app_master app multi_role,app))
292
- end
293
-
294
- it "#on_app_servers_and_utilities does what it says on the tin" do
295
- expect(where_code_runs_with("on_app_servers_and_utilities")).to eq(
296
- %w(solo app_master app multi_role,app multi,util util_alpha util_beta util_gamma)
297
- )
298
- end
299
-
300
- it "#on_utilities() runs on all utility instances" do
301
- expect(where_code_runs_with("on_utilities")).to eq(
302
- %w(multi,util util_alpha util_beta util_gamma)
303
- )
304
- end
305
-
306
- it "#on_utilities('sometype') runs on only utilities of type 'sometype'" do
307
- expect(where_code_runs_with("on_utilities('alpha')")).to eq(%w(util_alpha))
308
- end
309
-
310
- it "#on_utilities('type1', 'type2') runs on utilities of both types" do
311
- expect(where_code_runs_with("on_utilities('alpha', 'beta')")).to eq(
312
- %w(util_alpha util_beta)
313
- )
314
- end
315
-
316
- it "#on_utilities can be invoked with (['a', 'b']) or ('a', 'b')" do
317
- expect(where_code_runs_with("on_utilities(%w[alpha beta])")).to eq(
318
- where_code_runs_with("on_utilities('alpha', 'beta')")
319
- )
320
- end
321
- end
322
-
323
- context "#syntax_error" do
324
- it "returns nil for hook files containing valid Ruby syntax" do
325
- hook_path = File.expand_path('../fixtures/valid_hook.rb', __FILE__)
326
- expect(deploy_hook.syntax_error(hook_path)).to be_nil
327
- end
328
-
329
- it "returns a brief problem description for hook files containing valid Ruby syntax" do
330
- hook_path = File.expand_path('../fixtures/invalid_hook.rb', __FILE__)
331
- error = Regexp.escape("spec/fixtures/invalid_hook.rb:1: syntax error, unexpected '^'")
332
- expect(deploy_hook.syntax_error(hook_path)).to match(/#{error}/)
333
- end
334
- end
335
-
336
- context "errors in hooks" do
337
- it "shows the error in a helpful way" do
338
- expect {
339
- deploy_hook.eval_hook('methedo_no_existo')
340
- }.to raise_error(NameError)
341
- out = read_output
342
- expect(out).to match(%r|FATAL: Exception raised in deploy hook .*/deploy/fake_test_hook.rb.|)
343
- expect(out).to match(%r|NameError: undefined local variable or method `methedo_no_existo' for|)
344
- expect(out).to match(%r|Please fix this error before retrying.|)
345
- end
346
- end
347
-
348
- context "is compatible with older deploy hook scripts" do
349
- it "#current_role returns the first role" do
350
- expect(deploy_hook('current_roles' => %w(a b)).eval_hook('current_role')).to eq('a')
351
- end
352
-
353
- it "has info, warning, debug, logged_system, and access to shell" do
354
- expect(deploy_hook.eval_hook('respond_to?(:info) ')).to be_truthy
355
- expect(deploy_hook.eval_hook('respond_to?(:warning) ')).to be_truthy
356
- expect(deploy_hook.eval_hook('respond_to?(:debug) ')).to be_truthy
357
- expect(deploy_hook.eval_hook('respond_to?(:logged_system)')).to be_truthy
358
- expect(deploy_hook.eval_hook('respond_to?(:shell) ')).to be_truthy
359
- end
360
- end
361
- end
362
- end
@@ -1,23 +0,0 @@
1
- require 'spec_helper'
2
- require 'stringio'
3
-
4
- describe EY::Serverside do
5
- before do
6
- @original_stderr = $stderr
7
- @warnings = StringIO.new
8
- $stderr = @warnings
9
- end
10
-
11
- after do
12
- $stderr = @original_stderr
13
- end
14
-
15
- it "deprecates EY::Serverside::LoggedOutput for EY::Serverside::Shell::Helpers" do
16
- expect(EY::Serverside::LoggedOutput).to eq(EY::Serverside::Shell::Helpers)
17
- expect(@warnings.string).to include("EY::Serverside::LoggedOutput")
18
- end
19
-
20
- it "doesn't interfere with unrelated constants" do
21
- expect{ EY::Serverside::WTFNotDefined }.to raise_error(NameError, /uninitialized constant.*WTFNotDefined/)
22
- end
23
- end
@@ -1,99 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe "Deploying an app with ey.yml" do
4
- context "--no-migrate" do
5
- before(:all) do
6
- deploy_test_application('ey_yml', 'migrate' => nil)
7
- end
8
-
9
- it "does not migrate even though ey.yml says migrate: true" do
10
- expect(read_output).not_to match(/Migrating/)
11
- end
12
-
13
- it "does not enable the maintenance page at all" do
14
- expect(deploy_dir.join('current','maintenance_disabled')).to exist
15
- end
16
- end
17
-
18
-
19
- context "with migration" do
20
- before(:all) do
21
- deploy_test_application('ey_yml')
22
- end
23
-
24
- it "excludes copy_excludes from releases" do
25
- cmd = @deployer.commands.grep(/rsync -aq/).first
26
- expect(cmd).to include('rsync -aq --exclude=".git" --exclude="README"')
27
- expect(deploy_dir.join('current', '.git')).not_to exist
28
- expect(deploy_dir.join('current', 'README')).not_to exist
29
- end
30
-
31
- it "loads ey.yml at lower priority than command line options" do
32
- expect(deploy_dir.join('current', 'REVISION').read).to eq("somebranch\n")
33
- end
34
-
35
- it "loads bundle_without from the config, which overrides the default (and 'defaults:' in ey.yml)" do
36
- cmd = @deployer.commands.grep(/bundle _\S*_ install/).first
37
- expect(cmd).to include('--without only test')
38
- end
39
-
40
- it "does not enable the maintenance page during migrations" do
41
- expect(deploy_dir.join('current','maintenance_disabled')).to exist
42
- expect(deploy_dir.join('current','maintenance_enabled')).not_to exist
43
- end
44
-
45
- it "does not remove an existing maintenance page" do
46
- maintenance = EY::Serverside::Maintenance.new(test_servers, @config, test_shell)
47
- deploy_dir.join('current','maintenance_disabled').delete
48
- maintenance.manually_enable
49
- expect(deploy_dir.join('shared','system','maintenance.html')).to exist
50
- redeploy_test_application
51
- expect(read_output).to match(/Maintenance page is still up./)
52
- expect(deploy_dir.join('shared','system','maintenance.html')).to exist
53
- expect(deploy_dir.join('current','maintenance_disabled')).not_to exist
54
- expect(deploy_dir.join('current','maintenance_enabled')).to exist
55
- maintenance.manually_disable
56
- expect(deploy_dir.join('shared','system','maintenance.html')).not_to exist
57
- end
58
-
59
- it "makes custom variables available to hooks" do
60
- expect(deploy_dir.join('current', 'custom_hook').read).to include("custom_from_ey_yml")
61
- end
62
-
63
- it "doesn't display the database adapter warning with ignore_database_adapter_warning: true" do
64
- expect(read_output).not_to match(/WARNING/)
65
- end
66
- end
67
-
68
- context "with a different ey.yml" do
69
- before(:all) do
70
- deploy_test_application('ey_yml_alt') do
71
- deploy_dir.join('shared','config').mkpath
72
- deploy_dir.join('shared','config','database.yml').open('w') { |f| f << 'something' }
73
- end
74
- end
75
-
76
- it "always installs maintenance pages" do
77
- expect(deploy_dir.join('current','maintenance_enabled')).to exist
78
- expect(deploy_dir.join('current','maintenance_disabled')).not_to exist
79
- end
80
-
81
- it "displays the database adapter warning without ignore_database_adapter_warning" do
82
- expect(read_output).to match(/WARNING: Gemfile.lock does not contain a recognized database adapter./)
83
- end
84
- end
85
-
86
- context "with nodatabase.yml" do
87
- before(:all) do
88
- deploy_test_application('ey_yml_alt') do
89
- deploy_dir.join('shared','config').mkpath
90
- deploy_dir.join('shared','config','nodatabase.yml').open('w') { |f| f << 'something' }
91
- end
92
-
93
- end
94
-
95
- it "doesn't display the database adapter warning" do
96
- expect(read_output).not_to match(/WARNING: Gemfile.lock does not contain a recognized database adapter./)
97
- end
98
- end
99
- end