engineyard-serverside 2.6.17 → 2.6.19

Sign up to get free protection for your applications and to get access to all the features.
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,53 +0,0 @@
1
- require 'spec_helper'
2
-
3
- class EY::Serverside::Source::Archive
4
- def fetch_command
5
- "cp #{uri} #{source_cache}"
6
- end
7
- end
8
-
9
- describe "Deploying a simple application" do
10
-
11
- before(:all) do
12
- adapter = EY::Serverside::Adapter.new do |args|
13
- args.account_name = "account"
14
- args.app = "application_name"
15
- args.stack = "nginx_unicorn"
16
- args.environment_name = "environment_name"
17
- args.framework_env = "production"
18
- args.archive = FIXTURES_DIR.join('retwisj.war')
19
- args.verbose = true
20
- args.instances = [{ :hostname => "localhost", :roles => ["solo"], :name => "single" }]
21
- args.serverside_version = Gem::Version.create(EY::Serverside::VERSION.dup).release
22
- args.config = {
23
- "deploy_to" => deploy_dir.to_s,
24
- "group" => GROUP
25
- }
26
- end
27
- argv = adapter.deploy.commands.last.to_argv[2..-1]
28
- with_mocked_commands do
29
- capture do
30
- EY::Serverside::CLI::App.start(argv)
31
- end
32
- end
33
- end
34
-
35
- it "exploded the war" do
36
- %w(META-INF WEB-INF).each {|dir|
37
- File.exists?(deploy_dir.join('current', dir))
38
- }
39
- end
40
-
41
- it "creates a REVISION file" do
42
- path = deploy_dir.join('current', 'REVISION')
43
- expect(path).to exist
44
- checksum = File.read(path).strip
45
- expect(checksum).to match(/7400dc058376745c11a98f768b799c6651428857\s+.*retwisj.war$/)
46
- end
47
-
48
- it "restarts the app servers" do
49
- restart = deploy_dir.join('current', 'restart')
50
- expect(restart).to exist
51
- expect(restart.read.chomp).to eq(%|LANG="en_US.UTF-8" /engineyard/bin/app_application_name deploy|)
52
- end
53
- end
@@ -1,26 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe "Deploying a simple application" do
4
- before(:all) do
5
- deploy_test_application('not_bundled')
6
- end
7
-
8
- it "creates a REVISION file" do
9
- expect(deploy_dir.join('current', 'REVISION')).to exist
10
- end
11
-
12
- it "restarts the app servers" do
13
- restart = deploy_dir.join('current', 'restart')
14
- expect(restart).to exist
15
- expect(restart.read.chomp).to eq(%|LANG="en_US.UTF-8" /engineyard/bin/app_rails31 deploy|)
16
- end
17
-
18
- it "reuses the same active_release directory if a release_path is specified (such as in integrate)" do
19
- path = @config.paths.active_release
20
- expect(path.parent.children.size).to eq(1)
21
-
22
- redeploy_test_application('config' => {'release_path' => path.to_s})
23
-
24
- expect(path.parent.children.size).to eq(1)
25
- end
26
- end
@@ -1,160 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe "Deploying an application that uses Bundler" do
4
- VERSION_PATTERN = Regexp.quote(::EY::Serverside::DependencyManager::Bundler.default_version)
5
- PARALLEL_JOBS = ::EY::Serverside::DependencyManager::Bundler.jobs_number
6
-
7
- context "with a Gemfile.lock" do
8
- before(:all) do
9
- deploy_test_application('ey_yml')
10
- @install_bundler_command = @deployer.commands.grep(/gem install bundler/).first
11
- @bundle_install_command = @deployer.commands.grep(/bundle _#{VERSION_PATTERN}_ install/).first
12
- end
13
-
14
- it "runs the right bundler command" do
15
- expect(@install_bundler_command).not_to be_nil
16
- expect(@install_bundler_command).to match(/install bundler .* -v "#{VERSION_PATTERN}"/)
17
- end
18
-
19
- it "runs 'bundle install' with --deployment" do
20
- expect(@bundle_install_command).not_to be_nil
21
- expect(@bundle_install_command).to include('--deployment')
22
- end
23
-
24
- it "runs 'bundle install' with --jobs #{PARALLEL_JOBS}" do
25
- expect(@bundle_install_command).not_to be_nil
26
- expect(@bundle_install_command).to include("--jobs #{PARALLEL_JOBS}")
27
- end
28
-
29
- it "removes bundled_gems directory if the ruby or system version changed" do
30
- should_run_clear_bundle_cmd = @deployer.commands.grep(/diff/).first
31
- expect(should_run_clear_bundle_cmd).not_to be_nil
32
- clear_bundle_cmd = @deployer.commands.grep(/rm -Rf \S+\/bundled_gems/).first
33
- expect(clear_bundle_cmd).not_to be_nil
34
- end
35
-
36
- it "has the binstubs in the path when migrating" do
37
- expect(deploy_dir.join('path-when-migrating').read).to include('ey_bundler_binstubs')
38
- end
39
-
40
- it "creates a ruby version file" do
41
- expect(deploy_dir.join('shared', 'bundled_gems', 'RUBY_VERSION')).to exist
42
- end
43
-
44
- it "creates a system version file" do
45
- expect(deploy_dir.join('shared', 'bundled_gems', 'SYSTEM_VERSION')).to exist
46
- end
47
-
48
- it "generates bundler binstubs" do
49
- pending "doesn't work with mocked bundler"
50
- expect(deploy_dir.join('current', 'ey_bundler_binstubs', 'rake')).to exist
51
- end
52
- end
53
-
54
- context "with clean option" do
55
- before(:all) do
56
- deploy_test_application('ey_yml', 'clean' => true)
57
- end
58
-
59
- it "removes bundled_gems directory if the ruby or system version changed" do
60
- should_run_clear_bundle_cmd = @deployer.commands.grep(/diff/).first
61
- expect(should_run_clear_bundle_cmd).to be_nil
62
- clear_bundle_cmd = @deployer.commands.grep(/rm -Rf \S+\/bundled_gems/).first
63
- expect(clear_bundle_cmd).not_to be_nil
64
- end
65
-
66
- end
67
-
68
- context "with bundler disabled in ey.yml" do
69
- before(:all) do
70
- deploy_test_application('bundler_disabled')
71
- end
72
-
73
- it "does not run bundler commands" do
74
- expect(@deployer.commands.grep(/gem install bundler/)).to be_empty
75
- expect(@deployer.commands.grep(/bundle _.*_ install/)).to be_empty
76
- end
77
-
78
- it "still runs the hooks" do
79
- expect(deploy_dir.join('current', 'before_bundle.ran' )).to exist
80
- expect(deploy_dir.join('current', 'after_bundle.ran' )).to exist
81
- end
82
- end
83
-
84
- context "without a Gemfile.lock" do
85
- before(:all) do
86
- deploy_test_application('no_gemfile_lock')
87
- @install_bundler_command = @deployer.commands.grep(/gem install bundler/).first
88
- @bundle_install_command = @deployer.commands.grep(/bundle _#{VERSION_PATTERN}_ install/).first
89
- end
90
-
91
- it "installs the proper Bundler version" do
92
- expect(@install_bundler_command).not_to be_nil
93
- expect(@install_bundler_command).to match(/unset RUBYOPT && gem list bundler | grep "bundler " | egrep -q "#{VERSION_PATTERN}[,)]" || gem install bundler -q --no-rdoc --no-ri -v "#{VERSION_PATTERN}"/)
94
- end
95
-
96
- it "runs 'bundle install' without --deployment" do
97
- expect(@bundle_install_command).not_to be_nil
98
- expect(@bundle_install_command).not_to match(/--deployment/)
99
- end
100
-
101
- it "runs 'bundle install' with --jobs #{PARALLEL_JOBS}" do
102
- expect(@bundle_install_command).not_to be_nil
103
- expect(@bundle_install_command).to include("--jobs #{PARALLEL_JOBS}")
104
- end
105
-
106
- it "exports GIT_SSH for the bundle install" do
107
- expect(@bundle_install_command).to match(/export GIT_SSH/)
108
- end
109
-
110
- it "puts down RUBY_VERSION and SYSTEM_VERSION" do
111
- expect(deploy_dir.join('shared', 'bundled_gems', 'RUBY_VERSION')).to exist
112
- expect(deploy_dir.join('shared', 'bundled_gems', 'SYSTEM_VERSION')).to exist
113
- end
114
-
115
- it "warns that using a lockfile is idiomatic" do
116
- out = read_output
117
- expect(out).to match(/WARNING: Gemfile found but Gemfile.lock is missing!/)
118
- end
119
- end
120
-
121
- context "without a Gemfile.lock and ignoring the warning" do
122
- before(:all) do
123
- deploy_test_application('no_gemfile_lock', 'config' => {'ignore_gemfile_lock_warning' => true})
124
- expect(@config.ignore_gemfile_lock_warning).to be_truthy
125
- @install_bundler_command = @deployer.commands.grep(/gem install bundler/).first
126
- @bundle_install_command = @deployer.commands.grep(/bundle _#{VERSION_PATTERN}_ install/).first
127
- end
128
-
129
- it "should not warn" do
130
- out = read_output
131
- expect(out).not_to match(/WARNING/)
132
- end
133
- end
134
-
135
- context "with a failing Gemfile" do
136
- before(:all) do
137
- begin
138
- deploy_test_application('bundle_fails', 'bundle_install_fails' => true, 'verbose' => false)
139
- rescue EY::Serverside::RemoteFailure
140
- end
141
- end
142
-
143
- it "prints the failure to the log" do
144
- out = read_output
145
- expect(out).to match(%r|bundle install failure|)
146
- expect(deploy_dir.join('current', 'after_bundle.ran' )).not_to exist
147
- end
148
- end
149
-
150
- context "with outdated bundler" do
151
- before :all do
152
- deploy_test_application( "bundler_old" )
153
- @bundle_install_command = @deployer.commands.grep( /bundle _1.3.6_ install/ ).first
154
- end
155
-
156
- it "doesn't run 'bundle install' with --jobs" do
157
- expect( @bundle_install_command ).to_not include "--jobs"
158
- end
159
- end
160
- end
@@ -1,206 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe EY::Serverside::Deploy::Configuration do
4
- describe "default options" do
5
- it "has defaults" do
6
- @config = EY::Serverside::Deploy::Configuration.new({
7
- 'app' => 'app_name',
8
- 'environment_name' => 'env_name',
9
- 'account_name' => 'acc',
10
- 'framework_env' => 'production',
11
- })
12
- expect(@config.app_name).to eq("app_name")
13
- expect(@config.environment_name).to eq("env_name")
14
- expect(@config.account_name).to eq("acc")
15
- expect(@config.migrate).to eq(nil)
16
- expect(@config.migrate?).to eq(false)
17
- expect(@config.branch).to eq("master")
18
- expect(@config.ref).to eq("master")
19
- expect(@config.maintenance_on_migrate).to eq(true)
20
- expect(@config.maintenance_on_restart).to eq(true)
21
- expect(@config.required_downtime_stack?).to eq(true)
22
- expect(@config.framework_env).to eq("production")
23
- expect(@config.precompile_assets).to eq("detect")
24
- expect(@config.precompile_assets_inferred?).to eq(true)
25
- expect(@config.skip_precompile_assets?).to eq(false)
26
- expect(@config.precompile_assets?).to eq(false)
27
- expect(@config.asset_roles).to eq([:app_master, :app, :solo])
28
- expect(@config.user).to eq(ENV['USER'])
29
- expect(@config.group).to eq(ENV['USER'])
30
- expect(@config.verbose).to eq(false)
31
- expect(@config.copy_exclude).to eq([])
32
- expect(@config.ignore_database_adapter_warning).to eq(false)
33
- expect(@config.ignore_ey_config_warning).to eq(false)
34
- expect(@config.ignore_gemfile_lock_warning).to eq(false)
35
- expect(@config.bundle_without).to eq(%w[test development])
36
- expect(@config.extra_bundle_install_options).to eq(%w[--without test development])
37
- expect(@config.deployed_by).to eq("Automation (User name not available)")
38
- expect(@config.input_ref).to eq(@config.branch)
39
- expect(@config.keep_releases).to eq(3)
40
- expect(@config.keep_failed_releases).to eq(3)
41
- end
42
-
43
- it "raises when required options are not given" do
44
- @config = EY::Serverside::Deploy::Configuration.new({})
45
- expect { @config.app_name }.to raise_error
46
- expect { @config.environment_name }.to raise_error
47
- expect { @config.account_name }.to raise_error
48
- expect { @config.framework_env }.to raise_error
49
- end
50
- end
51
-
52
- context "strategies" do
53
- let(:options) do
54
- { "app" => "serverside" }
55
- end
56
-
57
- it "uses strategy if set" do
58
- @config = EY::Serverside::Deploy::Configuration.new(
59
- options.merge({'strategy' => 'IntegrationSpec', 'git' => 'git@github.com:engineyard/todo.git'})
60
- )
61
- capture do # deprecation warning
62
- expect(@config.source(test_shell)).to be_a_kind_of(EY::Serverside::Source::IntegrationSpec)
63
- end
64
- expect(read_output).to include("DEPRECATION WARNING: The configuration key 'strategy' is deprecated in favor of 'source_class'.")
65
- end
66
-
67
- it "uses source_class if set" do
68
- @config = EY::Serverside::Deploy::Configuration.new(
69
- options.merge({'source_class' => 'IntegrationSpec', 'git' => 'git@github.com:engineyard/todo.git'})
70
- )
71
- expect(@config.source(test_shell)).to be_a_kind_of(EY::Serverside::Source::IntegrationSpec)
72
- end
73
-
74
- it "infers a git source" do
75
- @config = EY::Serverside::Deploy::Configuration.new(
76
- options.merge({ 'git' => 'git@github.com:engineyard/todo.git' })
77
- )
78
- expect(@config.source(test_shell)).to be_a_kind_of(EY::Serverside::Source::Git)
79
- end
80
-
81
- it "infers a archive source" do
82
- @config = EY::Serverside::Deploy::Configuration.new(
83
- options.merge({'archive' => 'https://github.com/engineyard/todo/archive/master.zip'})
84
- )
85
-
86
- expect(@config.source(test_shell)).to be_a_kind_of(EY::Serverside::Source::Archive)
87
- end
88
- end
89
-
90
- context "command line options" do
91
- before do
92
- @config = EY::Serverside::Deploy::Configuration.new({
93
- 'repository_cache' => @tempdir,
94
- 'app' => 'app_name',
95
- 'stack' => 'nginx_passenger',
96
- 'framework_env' => 'development',
97
- 'environment_name' => 'env_name',
98
- 'account_name' => 'acc',
99
- 'branch' => 'branch_from_command_line',
100
- 'config' => MultiJson.dump({'custom' => 'custom_from_extra_config', 'maintenance_on_migrate' => 'false', 'precompile_assets' => 'false', 'deployed_by' => 'Martin Emde', 'input_ref' => 'input_branch'})
101
- })
102
- end
103
-
104
- it "underrides options with config (directly supplied options take precedence over 'config' options)" do
105
- expect(@config.maintenance_on_migrate).to eq(false)
106
- expect(@config.branch).to eq("branch_from_command_line")
107
- end
108
-
109
- it "corrects command line supplied precompile_assets string (which relies on having a special not-set value of nil, so can't be a boolean)" do
110
- expect(@config.skip_precompile_assets?).to eq(true)
111
- expect(@config.precompile_assets?).to eq(false)
112
- expect(@config.precompile_assets_inferred?).to eq(false)
113
- end
114
-
115
- it "doesn't require downtime on restart for nginx_passenger" do
116
- expect(@config.maintenance_on_migrate).to eq(false)
117
- expect(@config.maintenance_on_restart).to eq(false)
118
- end
119
-
120
- it "doesn't bundle --without the framework_env" do
121
- expect(@config.bundle_without).to eq(%w[test])
122
- end
123
-
124
- it "gets deployed_by and input_ref correct" do
125
- expect(@config.deployed_by).to eq("Martin Emde")
126
- expect(@config.input_ref).to eq("input_branch")
127
- end
128
- end
129
-
130
- describe "ey.yml loading" do
131
- before(:each) do
132
- @tempdir = `mktemp -d -t ey_yml_spec.XXXXX`.strip
133
- @config = EY::Serverside::Deploy::Configuration.new({
134
- 'repository_cache' => @tempdir,
135
- 'app' => 'app_name',
136
- 'environment_name' => 'env_name',
137
- 'account_name' => 'acc',
138
- 'migrate' => nil,
139
- 'branch' => 'branch_from_command_line',
140
- 'config' => MultiJson.dump({'custom' => 'custom_from_extra_config', 'maintenance_on_migrate' => 'false'})
141
- })
142
-
143
- @deploy = FullTestDeploy.new(test_servers, @config, test_shell)
144
-
145
- @yaml_data = {
146
- 'environments' => {
147
- 'env_name' => {
148
- 'copy_exclude' => ['.git'],
149
- 'migrate' => true,
150
- 'migration_command' => 'uh oh',
151
- 'branch' => 'branch_from_ey_yml',
152
- 'custom' => 'custom_from_ey_yml',
153
- 'bundle_without' => 'only test',
154
- 'maintenance_on_migrate' => true,
155
- }
156
- }
157
- }
158
- end
159
-
160
- def write_ey_yml(relative_path, data)
161
- FileUtils.mkdir_p(File.join(
162
- @tempdir,
163
- File.dirname(relative_path)))
164
-
165
- File.open(File.join(@tempdir, relative_path), 'w') do |f|
166
- f.write data.to_yaml
167
- end
168
- end
169
-
170
- it "requires 'ey.yml' and adds any defined methods to the deploy" do
171
- write_ey_yml 'ey.yml', @yaml_data
172
- @deploy.load_ey_yml
173
- expect(@deploy.config.copy_exclude).to eq(['.git'])
174
- end
175
-
176
- it "falls back to 'config/ey.yml'" do
177
- write_ey_yml 'config/ey.yml', @yaml_data
178
- @deploy.load_ey_yml
179
- expect(@deploy.config.copy_exclude).to eq(['.git'])
180
- end
181
-
182
- it "loads at lower priority than command line options" do
183
- write_ey_yml 'ey.yml', @yaml_data
184
- @deploy.load_ey_yml
185
- expect(@deploy.config.migrate?).to eq(false)
186
- end
187
-
188
- it "loads at lower priority than json config option" do
189
- write_ey_yml 'ey.yml', @yaml_data
190
- @deploy.load_ey_yml
191
- expect(@deploy.config.branch).to eq('branch_from_command_line')
192
- end
193
-
194
- it "loads bundle_without from the config, which overrides the default" do
195
- write_ey_yml 'ey.yml', @yaml_data
196
- @deploy.load_ey_yml
197
- expect(@deploy.config.bundle_without).to eq('only test')
198
- end
199
-
200
- it "overrides boolean ey.yml only options with --conifg strings" do
201
- write_ey_yml 'ey.yml', @yaml_data
202
- @deploy.load_ey_yml
203
- expect(@deploy.config).not_to be_maintenance_on_migrate
204
- end
205
- end
206
- end
@@ -1,128 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe "the EY::Serverside::Deploy API" do
4
- it "calls tasks in the right order" do
5
- class TestDeploy < FullTestDeploy
6
- attr_reader :call_order
7
- def initialize(*a)
8
- super
9
- @call_order = []
10
- end
11
-
12
- def push_code() @call_order << 'push_code' ; super end
13
- def copy_repository_cache() @call_order << 'copy_repository_cache' ; super end
14
- def create_revision_file() @call_order << 'create_revision_file' ; super end
15
- def bundle() @call_order << 'bundle' ; super end
16
- def setup_services() @call_order << 'setup_services' ; super end
17
- def symlink_configs() @call_order << 'symlink_configs' ; super end
18
- def migrate() @call_order << 'migrate' ; super end
19
- def compile_assets() @call_order << 'compile_assets' ; super end
20
- def symlink() @call_order << 'symlink' ; super end
21
- def restart() @call_order << 'restart' ; super end
22
- def cleanup_old_releases() @call_order << 'cleanup_old_releases' ; super end
23
- def enable_maintenance_page() @call_order << 'enable_maintenance_page' ; super end
24
- def disable_maintenance_page() @call_order << 'disable_maintenance_page'; super end
25
- def gc_repository_cache() @call_order << 'gc_repository_cache' ; super end
26
- end
27
-
28
- config = EY::Serverside::Deploy::Configuration.new(default_configuration)
29
-
30
- td = TestDeploy.realnew(test_servers, config, test_shell)
31
- mock_bundler
32
- with_mocked_commands do
33
- capture do
34
- td.deploy
35
- end
36
- end
37
-
38
- ############################# IMPORTANT ####################################
39
- #
40
- # Call order is referenced in the engineyard gem eydeploy.rb documentation.
41
- #
42
- # https://support.cloud.engineyard.com/entries/20996661-customize-your-deployment
43
- #
44
- # Changing call order or removing methods may adversely affect customers
45
- # that are using eydeploy.rb and relying on this documentation.
46
- #
47
- ############################################################################
48
- expect(td.call_order).to eq(%w(
49
- push_code
50
- copy_repository_cache
51
- create_revision_file
52
- bundle
53
- setup_services
54
- symlink_configs
55
- compile_assets
56
- enable_maintenance_page
57
- migrate
58
- symlink
59
- restart
60
- disable_maintenance_page
61
- cleanup_old_releases
62
- gc_repository_cache))
63
- end
64
-
65
- describe "task overrides" do
66
- before(:each) do
67
- @tempdir = Pathname.new(`mktemp -d -t custom_deploy_spec.XXXXX`.strip)
68
- end
69
-
70
- def write_eydeploy(relative_path, contents = "def got_new_methods() 'from the file on disk' end")
71
- path = @tempdir.join(relative_path)
72
- path.dirname.mkpath
73
- path.open('w') { |f| f << contents }
74
- end
75
-
76
- describe "eydeploy_rb disabled" do
77
- before do
78
- @config = EY::Serverside::Deploy::Configuration.new('app' => 'app_name', 'repository_cache' => @tempdir.to_s, 'eydeploy_rb' => 'false')
79
- @deploy = FullTestDeploy.realnew(test_servers, @config, test_shell)
80
- end
81
-
82
- it "doesn't load eydeploy_rb file" do
83
- write_eydeploy 'eydeploy.rb'
84
- @deploy.require_custom_tasks
85
- expect(@deploy).not_to respond_to(:got_new_methods)
86
- end
87
- end
88
-
89
- describe "eydeploy_rb detect or enabled" do
90
- before do
91
- @config = EY::Serverside::Deploy::Configuration.new('app' => 'app_name', 'repository_cache' => @tempdir.to_s, 'eydeploy_rb' => 'true')
92
- @deploy = FullTestDeploy.realnew(test_servers, @config, test_shell)
93
- end
94
-
95
- it "requires 'eydeploy.rb' and adds any defined methods to the deploy" do
96
- write_eydeploy 'eydeploy.rb'
97
- @deploy.require_custom_tasks
98
- expect(@deploy.got_new_methods).to eq('from the file on disk')
99
- end
100
-
101
- it "falls back to 'config/eydeploy.rb'" do
102
- write_eydeploy 'config/eydeploy.rb'
103
- @deploy.require_custom_tasks
104
- expect(@deploy.got_new_methods).to eq('from the file on disk')
105
- end
106
-
107
- it "lets you super up from any defined methods" do
108
- write_eydeploy 'eydeploy.rb', "def value() super << ' + derived' end"
109
-
110
- class TestDeploySuper < FullTestDeploy
111
- def value() 'base' end
112
- end
113
-
114
- deploy = TestDeploySuper.realnew(test_servers, @config, test_shell)
115
- deploy.require_custom_tasks
116
- expect(deploy.value).to eq("base + derived")
117
- end
118
-
119
- it "records exceptions raised from the instance eval in the log" do
120
- write_eydeploy 'eydeploy.rb', "raise 'Imma blow up'"
121
- expect { @deploy.require_custom_tasks }.to raise_error
122
- log = @log_path.read
123
- expect(log).to match(/Exception while loading .*eydeploy\.rb/)
124
- expect(log).to include('Imma blow up')
125
- end
126
- end
127
- end
128
- end