engineyard-serverside 2.8.0.pre → 2.8.0.pre2
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.
- checksums.yaml +7 -0
- data/bin/engineyard-serverside-execute-service-hook +1 -1
- data/lib/engineyard-serverside/version.rb +1 -1
- metadata +208 -577
- data/spec/archive_deploy_spec.rb +0 -53
- data/spec/basic_deploy_spec.rb +0 -26
- data/spec/bundler_deploy_spec.rb +0 -160
- data/spec/configuration_spec.rb +0 -206
- data/spec/custom_deploy_spec.rb +0 -128
- data/spec/deploy_hook_spec.rb +0 -378
- data/spec/deprecation_spec.rb +0 -23
- data/spec/ey_yml_customized_deploy_spec.rb +0 -99
- data/spec/fixtures/gitrepo.tar.gz +0 -0
- data/spec/fixtures/invalid_hook.rb +0 -1
- data/spec/fixtures/lockfiles/0.9-no-bundler +0 -111
- data/spec/fixtures/lockfiles/0.9-with-bundler +0 -117
- data/spec/fixtures/lockfiles/1.0-no-bundler +0 -54
- data/spec/fixtures/lockfiles/1.0.0.rc.1-with-bundler +0 -162
- data/spec/fixtures/lockfiles/1.0.18-do_mysql +0 -88
- data/spec/fixtures/lockfiles/1.0.18-do_postgres +0 -79
- data/spec/fixtures/lockfiles/1.0.18-mysql +0 -43
- data/spec/fixtures/lockfiles/1.0.18-mysql2 +0 -43
- data/spec/fixtures/lockfiles/1.0.18-pg +0 -43
- data/spec/fixtures/lockfiles/1.0.6-no-bundler +0 -51
- data/spec/fixtures/lockfiles/1.0.6-with-any-bundler +0 -52
- data/spec/fixtures/lockfiles/1.0.6-with-bundler +0 -52
- data/spec/fixtures/lockfiles/1.15.1-no-bundler +0 -51
- data/spec/fixtures/lockfiles/1.3.1-rails-3.2.13 +0 -112
- data/spec/fixtures/lockfiles/not-a-lockfile +0 -1
- data/spec/fixtures/repos/assets_detected/Gemfile +0 -5
- data/spec/fixtures/repos/assets_detected/Gemfile.lock +0 -88
- data/spec/fixtures/repos/assets_detected/README +0 -1
- data/spec/fixtures/repos/assets_detected/Rakefile +0 -5
- data/spec/fixtures/repos/assets_detected/app/assets/empty +0 -0
- data/spec/fixtures/repos/assets_detected/config/application.rb +0 -5
- data/spec/fixtures/repos/assets_detected/config/ey.yml +0 -3
- data/spec/fixtures/repos/assets_disabled/Gemfile +0 -5
- data/spec/fixtures/repos/assets_disabled/Gemfile.lock +0 -88
- data/spec/fixtures/repos/assets_disabled/README +0 -1
- data/spec/fixtures/repos/assets_disabled/Rakefile +0 -6
- data/spec/fixtures/repos/assets_disabled/app/assets/empty +0 -0
- data/spec/fixtures/repos/assets_disabled/config/application.rb +0 -5
- data/spec/fixtures/repos/assets_disabled/config/ey.yml +0 -3
- data/spec/fixtures/repos/assets_disabled_in_ey_yml/Gemfile +0 -5
- data/spec/fixtures/repos/assets_disabled_in_ey_yml/Gemfile.lock +0 -88
- data/spec/fixtures/repos/assets_disabled_in_ey_yml/README +0 -1
- data/spec/fixtures/repos/assets_disabled_in_ey_yml/Rakefile +0 -6
- data/spec/fixtures/repos/assets_disabled_in_ey_yml/app/assets/empty +0 -0
- data/spec/fixtures/repos/assets_disabled_in_ey_yml/config/application.rb +0 -5
- data/spec/fixtures/repos/assets_disabled_in_ey_yml/config/ey.yml +0 -5
- data/spec/fixtures/repos/assets_disabled_utf8/Gemfile +0 -5
- data/spec/fixtures/repos/assets_disabled_utf8/Gemfile.lock +0 -88
- data/spec/fixtures/repos/assets_disabled_utf8/README +0 -3
- data/spec/fixtures/repos/assets_disabled_utf8/Rakefile +0 -5
- data/spec/fixtures/repos/assets_disabled_utf8/app/assets/empty +0 -0
- data/spec/fixtures/repos/assets_disabled_utf8/config/application.rb +0 -7
- data/spec/fixtures/repos/assets_disabled_utf8/config/ey.yml +0 -3
- data/spec/fixtures/repos/assets_enabled_all/Gemfile +0 -5
- data/spec/fixtures/repos/assets_enabled_all/Gemfile.lock +0 -88
- data/spec/fixtures/repos/assets_enabled_all/README +0 -1
- data/spec/fixtures/repos/assets_enabled_all/app/assets/empty +0 -0
- data/spec/fixtures/repos/assets_enabled_all/config/application.rb +0 -5
- data/spec/fixtures/repos/assets_enabled_all/config/ey.yml +0 -6
- data/spec/fixtures/repos/assets_enabled_all/script/assets +0 -5
- data/spec/fixtures/repos/assets_enabled_all/tmp/obstruction +0 -1
- data/spec/fixtures/repos/assets_enabled_in_ey_yml/Gemfile +0 -3
- data/spec/fixtures/repos/assets_enabled_in_ey_yml/Gemfile.lock +0 -10
- data/spec/fixtures/repos/assets_enabled_in_ey_yml/README +0 -1
- data/spec/fixtures/repos/assets_enabled_in_ey_yml/Rakefile +0 -8
- data/spec/fixtures/repos/assets_enabled_in_ey_yml/config/ey.yml +0 -4
- data/spec/fixtures/repos/assets_enabled_util_only/Gemfile +0 -5
- data/spec/fixtures/repos/assets_enabled_util_only/Gemfile.lock +0 -88
- data/spec/fixtures/repos/assets_enabled_util_only/README +0 -1
- data/spec/fixtures/repos/assets_enabled_util_only/Rakefile +0 -6
- data/spec/fixtures/repos/assets_enabled_util_only/app/assets/empty +0 -0
- data/spec/fixtures/repos/assets_enabled_util_only/config/application.rb +0 -5
- data/spec/fixtures/repos/assets_enabled_util_only/config/ey.yml +0 -6
- data/spec/fixtures/repos/assets_error/Gemfile +0 -5
- data/spec/fixtures/repos/assets_error/Gemfile.lock +0 -88
- data/spec/fixtures/repos/assets_error/README +0 -1
- data/spec/fixtures/repos/assets_error/Rakefile +0 -4
- data/spec/fixtures/repos/assets_error/app/assets/empty +0 -0
- data/spec/fixtures/repos/assets_error/config/application.rb +0 -5
- data/spec/fixtures/repos/assets_error/config/ey.yml +0 -4
- data/spec/fixtures/repos/assets_in_hook/Gemfile +0 -5
- data/spec/fixtures/repos/assets_in_hook/Gemfile.lock +0 -88
- data/spec/fixtures/repos/assets_in_hook/README +0 -2
- data/spec/fixtures/repos/assets_in_hook/Rakefile +0 -5
- data/spec/fixtures/repos/assets_in_hook/app/assets/empty +0 -0
- data/spec/fixtures/repos/assets_in_hook/config/application.rb +0 -5
- data/spec/fixtures/repos/assets_in_hook/config/ey.yml +0 -3
- data/spec/fixtures/repos/assets_in_hook/deploy/before_compile_assets.rb +0 -2
- data/spec/fixtures/repos/bundle_fails/Gemfile +0 -1
- data/spec/fixtures/repos/bundle_fails/README +0 -1
- data/spec/fixtures/repos/bundle_fails/deploy/after_bundle.rb +0 -1
- data/spec/fixtures/repos/bundler_disabled/Gemfile +0 -4
- data/spec/fixtures/repos/bundler_disabled/Gemfile.lock +0 -12
- data/spec/fixtures/repos/bundler_disabled/README +0 -1
- data/spec/fixtures/repos/bundler_disabled/config/ey.yml +0 -2
- data/spec/fixtures/repos/bundler_disabled/deploy/after_bundle.rb +0 -1
- data/spec/fixtures/repos/bundler_disabled/deploy/before_bundle.rb +0 -1
- data/spec/fixtures/repos/bundler_old/Gemfile +0 -5
- data/spec/fixtures/repos/bundler_old/Gemfile.lock +0 -15
- data/spec/fixtures/repos/bundler_old/README +0 -1
- data/spec/fixtures/repos/default/Gemfile +0 -4
- data/spec/fixtures/repos/default/Gemfile.lock +0 -12
- data/spec/fixtures/repos/default/README +0 -5
- data/spec/fixtures/repos/default/ey.yml +0 -3
- data/spec/fixtures/repos/executable_hooks/README +0 -1
- data/spec/fixtures/repos/executable_hooks/deploy/before_restart +0 -72
- data/spec/fixtures/repos/executable_hooks_not_executable/README +0 -3
- data/spec/fixtures/repos/executable_hooks_not_executable/deploy/before_restart +0 -3
- data/spec/fixtures/repos/ey_yml/Gemfile +0 -4
- data/spec/fixtures/repos/ey_yml/Gemfile.lock +0 -12
- data/spec/fixtures/repos/ey_yml/README +0 -1
- data/spec/fixtures/repos/ey_yml/config/ey.yml +0 -18
- data/spec/fixtures/repos/ey_yml/deploy/before_migrate.rb +0 -6
- data/spec/fixtures/repos/ey_yml_alt/Gemfile +0 -4
- data/spec/fixtures/repos/ey_yml_alt/Gemfile.lock +0 -12
- data/spec/fixtures/repos/ey_yml_alt/README +0 -1
- data/spec/fixtures/repos/ey_yml_alt/deploy/before_migrate.rb +0 -6
- data/spec/fixtures/repos/ey_yml_alt/ey.yml +0 -12
- data/spec/fixtures/repos/hook_fails/README +0 -1
- data/spec/fixtures/repos/hook_fails/deploy/before_deploy.rb +0 -1
- data/spec/fixtures/repos/hooks/README +0 -1
- data/spec/fixtures/repos/hooks/deploy/after_bundle.rb +0 -1
- data/spec/fixtures/repos/hooks/deploy/after_compile_assets.rb +0 -1
- data/spec/fixtures/repos/hooks/deploy/after_deploy.rb +0 -1
- data/spec/fixtures/repos/hooks/deploy/after_migrate.rb +0 -1
- data/spec/fixtures/repos/hooks/deploy/after_restart.rb +0 -1
- data/spec/fixtures/repos/hooks/deploy/after_symlink.rb +0 -1
- data/spec/fixtures/repos/hooks/deploy/before_bundle.rb +0 -1
- data/spec/fixtures/repos/hooks/deploy/before_compile_assets.rb +0 -1
- data/spec/fixtures/repos/hooks/deploy/before_deploy.rb +0 -1
- data/spec/fixtures/repos/hooks/deploy/before_migrate.rb +0 -1
- data/spec/fixtures/repos/hooks/deploy/before_restart.rb +0 -1
- data/spec/fixtures/repos/hooks/deploy/before_symlink.rb +0 -1
- data/spec/fixtures/repos/multi_dep_manager/README +0 -1
- data/spec/fixtures/repos/multi_dep_manager/composer.json +0 -5
- data/spec/fixtures/repos/multi_dep_manager/composer.lock +0 -462
- data/spec/fixtures/repos/multi_dep_manager/package.json +0 -7
- data/spec/fixtures/repos/multi_dep_manager/public/index.php +0 -4
- data/spec/fixtures/repos/no_ey_config/Gemfile +0 -3
- data/spec/fixtures/repos/no_ey_config/Gemfile.lock +0 -10
- data/spec/fixtures/repos/no_ey_config/README +0 -1
- data/spec/fixtures/repos/no_ey_config/ey.yml +0 -3
- data/spec/fixtures/repos/no_ey_config_no_warning/Gemfile +0 -3
- data/spec/fixtures/repos/no_ey_config_no_warning/Gemfile.lock +0 -10
- data/spec/fixtures/repos/no_ey_config_no_warning/README +0 -1
- data/spec/fixtures/repos/no_ey_config_no_warning/ey.yml +0 -5
- data/spec/fixtures/repos/no_gemfile_lock/Gemfile +0 -4
- data/spec/fixtures/repos/no_gemfile_lock/README +0 -1
- data/spec/fixtures/repos/no_gemfile_lock/ey.yml +0 -3
- data/spec/fixtures/repos/nodejs/README +0 -1
- data/spec/fixtures/repos/nodejs/package.json +0 -7
- data/spec/fixtures/repos/not_bundled/README +0 -1
- data/spec/fixtures/repos/npm_disabled/README +0 -1
- data/spec/fixtures/repos/npm_disabled/config/ey.yml +0 -2
- data/spec/fixtures/repos/npm_disabled/package.json +0 -7
- data/spec/fixtures/repos/php_composer_disabled/README +0 -1
- data/spec/fixtures/repos/php_composer_disabled/composer.json +0 -5
- data/spec/fixtures/repos/php_composer_disabled/composer.lock +0 -462
- data/spec/fixtures/repos/php_composer_disabled/config/ey.yml +0 -2
- data/spec/fixtures/repos/php_composer_disabled/public/index.php +0 -4
- data/spec/fixtures/repos/php_composer_lock/README +0 -1
- data/spec/fixtures/repos/php_composer_lock/composer.json +0 -5
- data/spec/fixtures/repos/php_composer_lock/composer.lock +0 -462
- data/spec/fixtures/repos/php_composer_lock/public/index.php +0 -4
- data/spec/fixtures/repos/php_no_composer_lock/README +0 -1
- data/spec/fixtures/repos/php_no_composer_lock/composer.json +0 -21
- data/spec/fixtures/repos/php_no_composer_lock/public/index.php +0 -4
- data/spec/fixtures/repos/public_system/Gemfile +0 -4
- data/spec/fixtures/repos/public_system/Gemfile.lock +0 -12
- data/spec/fixtures/repos/public_system/README +0 -5
- data/spec/fixtures/repos/public_system/ey.yml +0 -3
- data/spec/fixtures/repos/public_system/public/system/cant_touch_this.txt +0 -3
- data/spec/fixtures/repos/sqlite3/Gemfile +0 -4
- data/spec/fixtures/repos/sqlite3/Gemfile.lock +0 -89
- data/spec/fixtures/repos/sqlite3/README +0 -1
- data/spec/fixtures/retwisj.war +0 -0
- data/spec/fixtures/valid_hook.rb +0 -1
- data/spec/git_strategy_spec.rb +0 -34
- data/spec/lockfile_parser_spec.rb +0 -126
- data/spec/maintenance_spec.rb +0 -44
- data/spec/multi_dependency_manager_spec.rb +0 -25
- data/spec/nodejs_deploy_spec.rb +0 -30
- data/spec/php_deploy_spec.rb +0 -81
- data/spec/platform_configure_spec.rb +0 -61
- data/spec/rails31_deploy_spec.rb +0 -172
- data/spec/restart_spec.rb +0 -43
- data/spec/rollback_spec.rb +0 -87
- data/spec/server_spec.rb +0 -70
- data/spec/services_deploy_spec.rb +0 -165
- data/spec/shell_spec.rb +0 -57
- data/spec/source/archive_spec.rb +0 -33
- data/spec/source/git_spec.rb +0 -44
- data/spec/spec_helper.rb +0 -361
- data/spec/sqlite3_deploy_spec.rb +0 -38
- data/spec/support/integration.rb +0 -103
- data/spec/support/source_doubles.rb +0 -28
- data/spec/support/timecop.rb +0 -5
- data/spec/symlink_spec.rb +0 -15
data/spec/deploy_hook_spec.rb
DELETED
@@ -1,378 +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:\s+Exception raised in 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
|
-
hook = EY::Serverside::Callbacks::Hooks::App.new(
|
82
|
-
File.join(config.paths.active_release, 'deploy', 'fake_test_hook.rb')
|
83
|
-
)
|
84
|
-
#EY::Serverside::DeployHook.new(config, test_shell, 'fake_test_hook')
|
85
|
-
EY::Serverside::Callbacks::Executor::Ruby::Context.new(
|
86
|
-
config,
|
87
|
-
test_shell,
|
88
|
-
hook
|
89
|
-
)
|
90
|
-
end
|
91
|
-
|
92
|
-
# Deprecated by inside tests - dwalters
|
93
|
-
#context "#run" do
|
94
|
-
#it "is available" do
|
95
|
-
#expect(deploy_hook.instance_eval('respond_to?(:run)')).to be_truthy
|
96
|
-
#end
|
97
|
-
|
98
|
-
#it "runs commands like the shell does" do
|
99
|
-
#ENV['COUNT'] = 'Chocula'
|
100
|
-
#File.unlink("/tmp/deploy_hook_spec.the_count") rescue nil
|
101
|
-
|
102
|
-
#deploy_hook.instance_eval('run("echo $COUNT > /tmp/deploy_hook_spec.the_count")')
|
103
|
-
|
104
|
-
#expect(IO.read("/tmp/deploy_hook_spec.the_count").strip).to eq("Chocula")
|
105
|
-
#end
|
106
|
-
|
107
|
-
#it "returns true/false to indicate the command's success" do
|
108
|
-
#expect(deploy_hook.instance_eval('run("true")')).to be_truthy
|
109
|
-
#expect(deploy_hook.instance_eval('run("false")')).to be_falsey
|
110
|
-
#end
|
111
|
-
|
112
|
-
#it "raises when the bang method alternative is used" do
|
113
|
-
##expect {
|
114
|
-
#deploy_hook.instance_eval('run!("false")')
|
115
|
-
##}.to raise_error(RuntimeError)
|
116
|
-
#out = read_output
|
117
|
-
#puts "out == '#{out}'"
|
118
|
-
#fail
|
119
|
-
#expect(out).to match(%r|FATAL:\s+Exception raised in hook .*/deploy/fake_test_hook.rb.|)
|
120
|
-
#expect(out).to match(%r|RuntimeError: .*run!.*Command failed. false|)
|
121
|
-
#expect(out).to match(%r|Please fix this error before retrying.|)
|
122
|
-
#end
|
123
|
-
#end
|
124
|
-
|
125
|
-
# Deprecated by inside tests - dwalters
|
126
|
-
#context "#sudo" do
|
127
|
-
#it "is available" do
|
128
|
-
#expect(deploy_hook.instance_eval('respond_to?(:sudo)')).to be_truthy
|
129
|
-
#end
|
130
|
-
|
131
|
-
#it "runs things with sudo" do
|
132
|
-
#hook = deploy_hook
|
133
|
-
#mock_sudo do
|
134
|
-
#hook.instance_eval('sudo("true") || raise("failed")')
|
135
|
-
#end
|
136
|
-
#end
|
137
|
-
|
138
|
-
#it "raises when the bang method alternative is used" do
|
139
|
-
#hook = deploy_hook
|
140
|
-
#mock_sudo do
|
141
|
-
#expect {
|
142
|
-
#hook.instance_eval('sudo!("false")')
|
143
|
-
#}.to raise_error(RuntimeError)
|
144
|
-
#end
|
145
|
-
#out = read_output
|
146
|
-
#expect(out).to match(%r|FATAL:\s+Exception raised in hook .*/deploy/fake_test_hook.rb.|)
|
147
|
-
#expect(out).to match(%r|RuntimeError: .*sudo!.*Command failed. false|)
|
148
|
-
#expect(out).to match(%r|Please fix this error before retrying.|)
|
149
|
-
#end
|
150
|
-
#end
|
151
|
-
|
152
|
-
context "capistrano-ish methods" do
|
153
|
-
it "has them" do
|
154
|
-
expect(deploy_hook.instance_eval('respond_to?(:latest_release) ')).to be_truthy
|
155
|
-
expect(deploy_hook.instance_eval('respond_to?(:previous_release) ')).to be_truthy
|
156
|
-
expect(deploy_hook.instance_eval('respond_to?(:all_releases) ')).to be_truthy
|
157
|
-
expect(deploy_hook.instance_eval('respond_to?(:current_path) ')).to be_truthy
|
158
|
-
expect(deploy_hook.instance_eval('respond_to?(:shared_path) ')).to be_truthy
|
159
|
-
expect(deploy_hook.instance_eval('respond_to?(:release_dir) ')).to be_truthy
|
160
|
-
expect(deploy_hook.instance_eval('respond_to?(:failed_release_dir)')).to be_truthy
|
161
|
-
expect(deploy_hook.instance_eval('respond_to?(:release_path) ')).to be_truthy
|
162
|
-
end
|
163
|
-
|
164
|
-
it "shows a deprecation warning that asks you to use config to access these variables" do
|
165
|
-
expect(deploy_hook.instance_eval('shared_path.nil?')).to be_falsey
|
166
|
-
out = read_output
|
167
|
-
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.")
|
168
|
-
expect(out).to match(%r|in .*/deploy/fake_test_hook.rb|)
|
169
|
-
end
|
170
|
-
end
|
171
|
-
|
172
|
-
context "access to command line options that should be handed through to the config" do
|
173
|
-
before do
|
174
|
-
@hook = deploy_hook({'app' => 'app', 'environment_name' => 'env', 'account_name' => 'acc'})
|
175
|
-
end
|
176
|
-
|
177
|
-
it "has account_name" do
|
178
|
-
expect(@hook.instance_eval('account_name')).to eq('acc')
|
179
|
-
end
|
180
|
-
|
181
|
-
it "has environment_name" do
|
182
|
-
expect(@hook.instance_eval('environment_name')).to eq('env')
|
183
|
-
end
|
184
|
-
|
185
|
-
it "has app_name" do
|
186
|
-
expect(@hook.instance_eval('app_name')).to eq('app')
|
187
|
-
end
|
188
|
-
end
|
189
|
-
|
190
|
-
context "node" do
|
191
|
-
before(:each) do
|
192
|
-
EY::Serverside.dna_json = MultiJson.dump({
|
193
|
-
'instance_role' => 'solo',
|
194
|
-
'applications' => {
|
195
|
-
'myapp' => {
|
196
|
-
'type' => 'rails',
|
197
|
-
'branch' => 'master',
|
198
|
-
}
|
199
|
-
}
|
200
|
-
})
|
201
|
-
end
|
202
|
-
|
203
|
-
# Test deprecated by inside tests and new implementation - dwalters
|
204
|
-
#it "is deprecated through the @node ivar" do
|
205
|
-
#expect(deploy_hook.instance_eval('@node.nil?')).to be_falsey
|
206
|
-
#out = read_output
|
207
|
-
#expect(out).to match(%r|Use of `@node` in deploy hooks is deprecated.|)
|
208
|
-
#expect(out).to match(%r|Please use `config.node`, which provides access to the same object.|)
|
209
|
-
#expect(out).to match(%r|.*/deploy/fake_test_hook.rb|)
|
210
|
-
#end
|
211
|
-
|
212
|
-
it "is available" do
|
213
|
-
expect(deploy_hook.instance_eval('config.node.nil?')).to be_falsey
|
214
|
-
end
|
215
|
-
|
216
|
-
it "has indifferent access" do
|
217
|
-
expect(deploy_hook.instance_eval('config.node[:instance_role] ')).to eq('solo')
|
218
|
-
expect(deploy_hook.instance_eval('config.node["instance_role"]')).to eq('solo')
|
219
|
-
end
|
220
|
-
|
221
|
-
it "has deep indifferent access" do
|
222
|
-
expect(deploy_hook.instance_eval('config.node["applications"]["myapp"]["type"]')).to eq('rails')
|
223
|
-
expect(deploy_hook.instance_eval('config.node[:applications]["myapp"][:type] ')).to eq('rails')
|
224
|
-
expect(deploy_hook.instance_eval('config.node[:applications][:myapp][:type] ')).to eq('rails')
|
225
|
-
end
|
226
|
-
end
|
227
|
-
|
228
|
-
context "config" do
|
229
|
-
it "is available" do
|
230
|
-
expect(deploy_hook.instance_eval('config.nil?')).to be_falsey
|
231
|
-
end
|
232
|
-
|
233
|
-
# Test deprecated by inside tests and new implementation - dwalters
|
234
|
-
#it "is deprecated through the @configuration ivar" do
|
235
|
-
#expect(deploy_hook.instance_eval('@configuration.nil?')).to be_falsey
|
236
|
-
#out = read_output
|
237
|
-
#expect(out).to match(%r|Use of `@configuration` in deploy hooks is deprecated.|)
|
238
|
-
#expect(out).to match(%r|Please use `config`, which provides access to the same object.|)
|
239
|
-
#expect(out).to match(%r|.*/deploy/fake_test_hook.rb|)
|
240
|
-
#end
|
241
|
-
|
242
|
-
it "has the configuration in it" do
|
243
|
-
expect(deploy_hook('bert' => 'ernie').instance_eval('config.bert')).to eq('ernie')
|
244
|
-
end
|
245
|
-
|
246
|
-
it "can be accessed with method calls, with [:symbols], or ['strings']" do
|
247
|
-
expect(deploy_hook('bert' => 'ernie').instance_eval('config.bert ')).to eq('ernie')
|
248
|
-
expect(deploy_hook('bert' => 'ernie').instance_eval('config[:bert] ')).to eq('ernie')
|
249
|
-
expect(deploy_hook('bert' => 'ernie').instance_eval('config["bert"]')).to eq('ernie')
|
250
|
-
end
|
251
|
-
|
252
|
-
[:repository_cache,
|
253
|
-
:release_path,
|
254
|
-
:branch,
|
255
|
-
:shared_path,
|
256
|
-
:deploy_to,
|
257
|
-
:user,
|
258
|
-
:revision,
|
259
|
-
:environment].each do |attribute|
|
260
|
-
it "has the #{attribute.inspect} attribute for compatibility with chef-deploy" do
|
261
|
-
expect(deploy_hook.instance_eval("config.has_key?(#{attribute.inspect})")).to be_truthy
|
262
|
-
end
|
263
|
-
end
|
264
|
-
end
|
265
|
-
|
266
|
-
context "environment variables" do
|
267
|
-
it "sets the framework env variables" do
|
268
|
-
expect(deploy_hook('framework_env' => 'production').instance_eval("ENV['RAILS_ENV']")).to eq('production')
|
269
|
-
expect(deploy_hook('framework_env' => 'production').instance_eval("ENV['RACK_ENV'] ")).to eq('production')
|
270
|
-
expect(deploy_hook('framework_env' => 'production').instance_eval("ENV['MERB_ENV'] ")).to eq('production')
|
271
|
-
expect(deploy_hook('framework_env' => 'production').instance_eval("ENV['NODE_ENV'] ")).to eq('production')
|
272
|
-
end
|
273
|
-
end
|
274
|
-
|
275
|
-
context "has methods to run code only on certain instances" do
|
276
|
-
def scenarios
|
277
|
-
[
|
278
|
-
['solo' ],
|
279
|
-
['app_master' ],
|
280
|
-
['app' ],
|
281
|
-
['db_master' ],
|
282
|
-
['db_slave' ],
|
283
|
-
['multi_role,app'],
|
284
|
-
['multi,util' ],
|
285
|
-
['util', 'alpha' ],
|
286
|
-
['util', 'beta' ],
|
287
|
-
['util', 'gamma' ],
|
288
|
-
]
|
289
|
-
end
|
290
|
-
|
291
|
-
def where_code_runs_with(code)
|
292
|
-
scenarios.select do |role, name|
|
293
|
-
hook = deploy_hook('current_roles' => role.split(','), 'current_name' => name)
|
294
|
-
hook.instance_eval("#{code} { 'ran' } == 'ran'")
|
295
|
-
end.map do |scenario|
|
296
|
-
scenario.compact.join("_")
|
297
|
-
end.compact
|
298
|
-
end
|
299
|
-
|
300
|
-
it "#on_app_master runs on app masters and solos" do
|
301
|
-
expect(where_code_runs_with("on_app_master")).to eq(%w(solo app_master))
|
302
|
-
end
|
303
|
-
|
304
|
-
it "#on_app_servers runs on app masters, app slaves, and solos" do
|
305
|
-
expect(where_code_runs_with("on_app_servers")).to eq(%w(solo app_master app multi_role,app))
|
306
|
-
end
|
307
|
-
|
308
|
-
it "#on_app_servers_and_utilities does what it says on the tin" do
|
309
|
-
expect(where_code_runs_with("on_app_servers_and_utilities")).to eq(
|
310
|
-
%w(solo app_master app multi_role,app multi,util util_alpha util_beta util_gamma)
|
311
|
-
)
|
312
|
-
end
|
313
|
-
|
314
|
-
it "#on_utilities() runs on all utility instances" do
|
315
|
-
expect(where_code_runs_with("on_utilities")).to eq(
|
316
|
-
%w(multi,util util_alpha util_beta util_gamma)
|
317
|
-
)
|
318
|
-
end
|
319
|
-
|
320
|
-
it "#on_utilities('sometype') runs on only utilities of type 'sometype'" do
|
321
|
-
expect(where_code_runs_with("on_utilities('alpha')")).to eq(%w(util_alpha))
|
322
|
-
end
|
323
|
-
|
324
|
-
it "#on_utilities('type1', 'type2') runs on utilities of both types" do
|
325
|
-
expect(where_code_runs_with("on_utilities('alpha', 'beta')")).to eq(
|
326
|
-
%w(util_alpha util_beta)
|
327
|
-
)
|
328
|
-
end
|
329
|
-
|
330
|
-
it "#on_utilities can be invoked with (['a', 'b']) or ('a', 'b')" do
|
331
|
-
expect(where_code_runs_with("on_utilities(%w[alpha beta])")).to eq(
|
332
|
-
where_code_runs_with("on_utilities('alpha', 'beta')")
|
333
|
-
)
|
334
|
-
end
|
335
|
-
end
|
336
|
-
|
337
|
-
# Deprecated by new implementation and inside tests - dwalters
|
338
|
-
#context "#syntax_error" do
|
339
|
-
#it "returns nil for hook files containing valid Ruby syntax" do
|
340
|
-
#hook_path = File.expand_path('../fixtures/valid_hook.rb', __FILE__)
|
341
|
-
#expect(deploy_hook.syntax_error(hook_path)).to be_nil
|
342
|
-
#end
|
343
|
-
|
344
|
-
#it "returns a brief problem description for hook files containing valid Ruby syntax" do
|
345
|
-
#hook_path = File.expand_path('../fixtures/invalid_hook.rb', __FILE__)
|
346
|
-
#error = Regexp.escape("spec/fixtures/invalid_hook.rb:1: syntax error, unexpected '^'")
|
347
|
-
#expect(deploy_hook.syntax_error(hook_path)).to match(/#{error}/)
|
348
|
-
#end
|
349
|
-
#end
|
350
|
-
|
351
|
-
# Test deprecated by inside tests and new implementation - dwalters
|
352
|
-
#context "errors in hooks" do
|
353
|
-
#it "shows the error in a helpful way" do
|
354
|
-
#expect {
|
355
|
-
#deploy_hook.instance_eval('methedo_no_existo')
|
356
|
-
#}.to raise_error(NameError)
|
357
|
-
#out = read_output
|
358
|
-
#expect(out).to match(%r|FATAL:\s+Exception raised in hook .*/deploy/fake_test_hook.rb.|)
|
359
|
-
#expect(out).to match(%r|NameError: undefined local variable or method `methedo_no_existo' for|)
|
360
|
-
#expect(out).to match(%r|Please fix this error before retrying.|)
|
361
|
-
#end
|
362
|
-
#end
|
363
|
-
|
364
|
-
context "is compatible with older hook scripts" do
|
365
|
-
it "#current_role returns the first role" do
|
366
|
-
expect(deploy_hook('current_roles' => %w(a b)).instance_eval('current_role')).to eq('a')
|
367
|
-
end
|
368
|
-
|
369
|
-
it "has info, warning, debug, logged_system, and access to shell" do
|
370
|
-
expect(deploy_hook.instance_eval('respond_to?(:info) ')).to be_truthy
|
371
|
-
expect(deploy_hook.instance_eval('respond_to?(:warning) ')).to be_truthy
|
372
|
-
expect(deploy_hook.instance_eval('respond_to?(:debug) ')).to be_truthy
|
373
|
-
expect(deploy_hook.instance_eval('respond_to?(:logged_system)')).to be_truthy
|
374
|
-
expect(deploy_hook.instance_eval('respond_to?(:shell) ')).to be_truthy
|
375
|
-
end
|
376
|
-
end
|
377
|
-
end
|
378
|
-
end
|
data/spec/deprecation_spec.rb
DELETED
@@ -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
|