engineyard-serverside 1.5.35.pre.2 → 1.6.0.pre
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.
- data/lib/engineyard-serverside.rb +3 -1
- data/lib/engineyard-serverside/cli.rb +73 -38
- data/lib/engineyard-serverside/configuration.rb +38 -12
- data/lib/engineyard-serverside/deploy.rb +63 -51
- data/lib/engineyard-serverside/deploy_hook.rb +21 -18
- data/lib/engineyard-serverside/deprecation.rb +9 -17
- data/lib/engineyard-serverside/lockfile_parser.rb +1 -1
- data/lib/engineyard-serverside/rails_asset_support.rb +5 -5
- data/lib/engineyard-serverside/server.rb +8 -11
- data/lib/engineyard-serverside/shell.rb +101 -0
- data/lib/engineyard-serverside/shell/formatter.rb +70 -0
- data/lib/engineyard-serverside/shell/helpers.rb +29 -0
- data/lib/engineyard-serverside/strategies/git.rb +12 -15
- data/lib/engineyard-serverside/task.rb +28 -5
- data/lib/engineyard-serverside/version.rb +1 -1
- data/lib/vendor/open4/lib/open4.rb +432 -0
- data/spec/basic_deploy_spec.rb +9 -9
- data/spec/bundler_deploy_spec.rb +1 -1
- data/spec/custom_deploy_spec.rb +45 -4
- data/spec/deploy_hook_spec.rb +77 -78
- data/spec/deprecation_spec.rb +4 -26
- data/spec/git_strategy_spec.rb +6 -2
- data/spec/nodejs_deploy_spec.rb +2 -2
- data/spec/services_deploy_spec.rb +11 -10
- data/spec/shell_spec.rb +48 -0
- data/spec/spec_helper.rb +48 -25
- data/spec/sqlite3_deploy_spec.rb +1 -2
- data/spec/support/integration.rb +1 -13
- metadata +57 -97
- data/lib/engineyard-serverside/logged_output.rb +0 -91
- data/lib/vendor/systemu/LICENSE +0 -3
- data/lib/vendor/systemu/lib/systemu.rb +0 -363
- data/lib/vendor/systemu/systemu.gemspec +0 -45
- data/spec/fixtures/gitrepo/bar +0 -0
- data/spec/logged_output_spec.rb +0 -55
data/spec/basic_deploy_spec.rb
CHANGED
@@ -12,17 +12,17 @@ describe "Deploying an application without Bundler" do
|
|
12
12
|
|
13
13
|
# run a deploy
|
14
14
|
config = EY::Serverside::Deploy::Configuration.new({
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
15
|
+
"strategy" => "IntegrationSpec",
|
16
|
+
"deploy_to" => @deploy_dir.to_s,
|
17
|
+
"group" => `id -gn`.strip,
|
18
|
+
"stack" => 'nginx_passenger',
|
19
|
+
"migrate" => nil,
|
20
|
+
'app' => 'foo',
|
21
|
+
'framework_env' => 'staging'
|
22
|
+
})
|
23
23
|
|
24
24
|
@binpath = File.expand_path(File.join(File.dirname(__FILE__), '..', 'bin', 'engineyard-serverside'))
|
25
|
-
@deployer = FullTestDeploy.new(config)
|
25
|
+
@deployer = FullTestDeploy.new(config, test_shell)
|
26
26
|
@deployer.deploy
|
27
27
|
end
|
28
28
|
|
data/spec/bundler_deploy_spec.rb
CHANGED
@@ -32,7 +32,7 @@ describe "Deploying an application that uses Bundler" do
|
|
32
32
|
end
|
33
33
|
|
34
34
|
@binpath = File.expand_path(File.join(File.dirname(__FILE__), '..', 'bin', 'engineyard-serverside'))
|
35
|
-
@deployer = FullTestDeploy.new(config)
|
35
|
+
@deployer = FullTestDeploy.new(config, test_shell)
|
36
36
|
@deployer.deploy
|
37
37
|
end
|
38
38
|
|
data/spec/custom_deploy_spec.rb
CHANGED
@@ -11,7 +11,6 @@ describe "the EY::Serverside::Deploy API" do
|
|
11
11
|
# cheat a bit; we don't actually want to do these things
|
12
12
|
def require_custom_tasks() end
|
13
13
|
def callback(*_) end
|
14
|
-
def puts(*_) 'stfu' end
|
15
14
|
|
16
15
|
attr_reader :call_order
|
17
16
|
def initialize(*a)
|
@@ -34,7 +33,7 @@ describe "the EY::Serverside::Deploy API" do
|
|
34
33
|
def disable_maintenance_page() @call_order << 'disable_maintenance_page' end
|
35
34
|
end
|
36
35
|
|
37
|
-
td = TestDeploy.new(EY::Serverside::Deploy::Configuration.new)
|
36
|
+
td = TestDeploy.new(EY::Serverside::Deploy::Configuration.new, test_shell)
|
38
37
|
td.deploy
|
39
38
|
td.call_order.should == %w(
|
40
39
|
push_code
|
@@ -52,6 +51,48 @@ describe "the EY::Serverside::Deploy API" do
|
|
52
51
|
cleanup_old_releases)
|
53
52
|
end
|
54
53
|
|
54
|
+
describe "ey.yml loading" do
|
55
|
+
before(:each) do
|
56
|
+
@tempdir = `mktemp -d -t ey_yml_spec.XXXXX`.strip
|
57
|
+
@config = EY::Serverside::Deploy::Configuration.new('repository_cache' => @tempdir, 'environment_name' => 'env_name', 'account_name' => 'acc', 'migrate' => 'rake db:migrate', 'config' => {'branch' => 'branch_from_config'}.to_json)
|
58
|
+
@deploy = TestDeploy.new(@config, test_shell)
|
59
|
+
end
|
60
|
+
|
61
|
+
def write_ey_yml(relative_path, data = {'environments' => {'env_name' => {'copy_exclude' => ['.git'], 'migrate' => true, 'branch' => 'branch_from_ey_yaml'}}})
|
62
|
+
FileUtils.mkdir_p(File.join(
|
63
|
+
@tempdir,
|
64
|
+
File.dirname(relative_path)))
|
65
|
+
|
66
|
+
File.open(File.join(@tempdir, relative_path), 'w') do |f|
|
67
|
+
f.write data.to_yaml
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
it "requires 'ey.yml' and adds any defined methods to the deploy" do
|
72
|
+
write_ey_yml 'ey.yml'
|
73
|
+
@deploy.load_ey_yml
|
74
|
+
@deploy.config.copy_exclude.should == ['.git']
|
75
|
+
end
|
76
|
+
|
77
|
+
it "falls back to 'config/ey.yml'" do
|
78
|
+
write_ey_yml 'config/ey.yml'
|
79
|
+
@deploy.load_ey_yml
|
80
|
+
@deploy.config.copy_exclude.should == ['.git']
|
81
|
+
end
|
82
|
+
|
83
|
+
it "loads at lower priority than command line options" do
|
84
|
+
write_ey_yml 'ey.yml'
|
85
|
+
@deploy.load_ey_yml
|
86
|
+
@deploy.config.migration_command.should == 'rake db:migrate'
|
87
|
+
end
|
88
|
+
|
89
|
+
it "loads at lower priority than json config option" do
|
90
|
+
write_ey_yml 'ey.yml'
|
91
|
+
@deploy.load_ey_yml
|
92
|
+
@deploy.config.branch.should == 'branch_from_config'
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
55
96
|
describe "task overrides" do
|
56
97
|
class TestQuietDeploy < EY::Serverside::Deploy
|
57
98
|
def puts(*_) 'quiet' end
|
@@ -60,7 +101,7 @@ describe "the EY::Serverside::Deploy API" do
|
|
60
101
|
before(:each) do
|
61
102
|
@tempdir = `mktemp -d -t custom_deploy_spec.XXXXX`.strip
|
62
103
|
@config = EY::Serverside::Deploy::Configuration.new('repository_cache' => @tempdir)
|
63
|
-
@deploy = TestQuietDeploy.new(@config)
|
104
|
+
@deploy = TestQuietDeploy.new(@config, test_shell)
|
64
105
|
end
|
65
106
|
|
66
107
|
def write_eydeploy(relative_path, contents = "def got_new_methods() 'from the file on disk' end")
|
@@ -92,7 +133,7 @@ describe "the EY::Serverside::Deploy API" do
|
|
92
133
|
def value() 'base' end
|
93
134
|
end
|
94
135
|
|
95
|
-
deploy = TestDeploySuper.new(@config)
|
136
|
+
deploy = TestDeploySuper.new(@config, test_shell)
|
96
137
|
deploy.require_custom_tasks.should be_true
|
97
138
|
deploy.value.should == "base + derived"
|
98
139
|
end
|
data/spec/deploy_hook_spec.rb
CHANGED
@@ -1,67 +1,71 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe "the deploy-hook API" do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
end
|
8
|
-
|
9
|
-
def run_hook(options={}, &blk)
|
10
|
-
raise ArgumentError unless block_given?
|
11
|
-
options.each do |k, v|
|
12
|
-
@callback_context.configuration[k] = v
|
13
|
-
end
|
14
|
-
|
15
|
-
# The hooks on the filesystem are run by passing a string to
|
16
|
-
# context.instance_eval, not a block. However, using a block
|
17
|
-
# should allow us to get the same degree of test coverage and
|
18
|
-
# still let us have things like syntax checking work on this spec
|
19
|
-
# file.
|
20
|
-
@callback_context.instance_eval(&blk)
|
4
|
+
def deploy_hook(options={})
|
5
|
+
config = EY::Serverside::Deploy::Configuration.new(options)
|
6
|
+
EY::Serverside::DeployHook.new(config, test_shell)
|
21
7
|
end
|
22
8
|
|
23
9
|
context "#run" do
|
24
10
|
it "is available" do
|
25
|
-
|
11
|
+
deploy_hook.eval_hook('respond_to?(:run)').should be_true
|
26
12
|
end
|
27
13
|
|
28
14
|
it "runs commands like the shell does" do
|
29
15
|
ENV['COUNT'] = 'Chocula'
|
30
16
|
File.unlink("/tmp/deploy_hook_spec.the_count") rescue nil
|
31
17
|
|
32
|
-
|
18
|
+
deploy_hook.eval_hook('run("echo $COUNT > /tmp/deploy_hook_spec.the_count")')
|
33
19
|
|
34
20
|
IO.read("/tmp/deploy_hook_spec.the_count").strip.should == "Chocula"
|
35
21
|
end
|
36
22
|
|
37
23
|
it "returns true/false to indicate the command's success" do
|
38
|
-
|
39
|
-
|
24
|
+
deploy_hook.eval_hook('run("true")').should be_true
|
25
|
+
deploy_hook.eval_hook('run("false")').should be_false
|
40
26
|
end
|
41
27
|
end
|
42
28
|
|
43
29
|
context "#sudo" do
|
44
30
|
it "is available" do
|
45
|
-
|
31
|
+
deploy_hook.eval_hook('respond_to?(:sudo)').should be_true
|
46
32
|
end
|
47
33
|
|
48
34
|
it "runs things with sudo" do
|
49
|
-
|
50
|
-
|
51
|
-
|
35
|
+
hook = deploy_hook
|
36
|
+
hook.callback_context.shell.should_receive(:logged_system).with("sudo sh -l -c 'do it as root'").and_return(true)
|
37
|
+
hook.eval_hook('sudo("do it as root")')
|
52
38
|
end
|
53
39
|
end
|
54
40
|
|
55
41
|
context "capistrano-ish methods" do
|
56
42
|
it "has them" do
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
43
|
+
deploy_hook.eval_hook('respond_to?(:latest_release) ').should be_true
|
44
|
+
deploy_hook.eval_hook('respond_to?(:previous_release) ').should be_true
|
45
|
+
deploy_hook.eval_hook('respond_to?(:all_releases) ').should be_true
|
46
|
+
deploy_hook.eval_hook('respond_to?(:current_path) ').should be_true
|
47
|
+
deploy_hook.eval_hook('respond_to?(:shared_path) ').should be_true
|
48
|
+
deploy_hook.eval_hook('respond_to?(:release_dir) ').should be_true
|
49
|
+
deploy_hook.eval_hook('respond_to?(:failed_release_dir)').should be_true
|
50
|
+
deploy_hook.eval_hook('respond_to?(:release_path) ').should be_true
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
context "access to command line options that should be handed through to the config" do
|
55
|
+
before do
|
56
|
+
@hook = deploy_hook({'app' => 'app', 'environment_name' => 'env', 'account_name' => 'acc'})
|
57
|
+
end
|
58
|
+
|
59
|
+
it "has account_name" do
|
60
|
+
@hook.eval_hook('account_name').should == 'acc'
|
61
|
+
end
|
62
|
+
|
63
|
+
it "has environment_name" do
|
64
|
+
@hook.eval_hook('environment_name').should == 'env'
|
65
|
+
end
|
66
|
+
|
67
|
+
it "has app_name" do
|
68
|
+
@hook.eval_hook('app_name').should == 'app'
|
65
69
|
end
|
66
70
|
end
|
67
71
|
|
@@ -79,34 +83,34 @@ describe "the deploy-hook API" do
|
|
79
83
|
end
|
80
84
|
|
81
85
|
it "is available" do
|
82
|
-
|
86
|
+
deploy_hook.eval_hook('@node.nil?').should be_false
|
83
87
|
end
|
84
88
|
|
85
89
|
it "has indifferent access" do
|
86
|
-
|
87
|
-
|
90
|
+
deploy_hook.eval_hook('@node[:instance_role] ').should == 'solo'
|
91
|
+
deploy_hook.eval_hook('@node["instance_role"]').should == 'solo'
|
88
92
|
end
|
89
93
|
|
90
94
|
it "has deep indifferent access" do
|
91
|
-
|
92
|
-
|
93
|
-
|
95
|
+
deploy_hook.eval_hook('@node["applications"]["myapp"]["type"]').should == 'rails'
|
96
|
+
deploy_hook.eval_hook('@node[:applications]["myapp"][:type] ').should == 'rails'
|
97
|
+
deploy_hook.eval_hook('@node[:applications][:myapp][:type] ').should == 'rails'
|
94
98
|
end
|
95
99
|
end
|
96
100
|
|
97
101
|
context "the @configuration ivar" do
|
98
102
|
it "is available" do
|
99
|
-
|
103
|
+
deploy_hook.eval_hook('@configuration.nil?').should be_false
|
100
104
|
end
|
101
105
|
|
102
106
|
it "has the configuration in it" do
|
103
|
-
|
107
|
+
deploy_hook('bert' => 'ernie').eval_hook('@configuration.bert').should == 'ernie'
|
104
108
|
end
|
105
109
|
|
106
110
|
it "can be accessed with method calls, with [:symbols], or ['strings']" do
|
107
|
-
|
108
|
-
|
109
|
-
|
111
|
+
deploy_hook('bert' => 'ernie').eval_hook('@configuration.bert ').should == 'ernie'
|
112
|
+
deploy_hook('bert' => 'ernie').eval_hook('@configuration[:bert] ').should == 'ernie'
|
113
|
+
deploy_hook('bert' => 'ernie').eval_hook('@configuration["bert"]').should == 'ernie'
|
110
114
|
end
|
111
115
|
|
112
116
|
[:repository_cache,
|
@@ -118,7 +122,7 @@ describe "the deploy-hook API" do
|
|
118
122
|
:revision,
|
119
123
|
:environment].each do |attribute|
|
120
124
|
it "has the #{attribute.inspect} attribute for compatibility with chef-deploy" do
|
121
|
-
|
125
|
+
deploy_hook.eval_hook("@configuration.has_key?(#{attribute.inspect})").should be_true
|
122
126
|
end
|
123
127
|
end
|
124
128
|
end
|
@@ -126,62 +130,58 @@ describe "the deploy-hook API" do
|
|
126
130
|
context "has methods to run code only on certain instances" do
|
127
131
|
def scenarios
|
128
132
|
[
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
133
|
+
['solo' ],
|
134
|
+
['app_master' ],
|
135
|
+
['app' ],
|
136
|
+
['db_master' ],
|
137
|
+
['db_slave' ],
|
138
|
+
['multi_role,app'],
|
139
|
+
['multi,util' ],
|
140
|
+
['util', 'alpha' ],
|
141
|
+
['util', 'beta' ],
|
142
|
+
['util', 'gamma' ],
|
139
143
|
]
|
140
144
|
end
|
141
145
|
|
142
|
-
def where_code_runs_with(
|
143
|
-
scenarios.
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
result = s[:instance_role]
|
149
|
-
result << "_#{s[:name]}" if s[:name]
|
150
|
-
result
|
151
|
-
end
|
146
|
+
def where_code_runs_with(code)
|
147
|
+
scenarios.select do |role, name|
|
148
|
+
hook = deploy_hook(:current_roles => role.split(','), :current_name => name)
|
149
|
+
hook.eval_hook("#{code} { 'ran' } == 'ran'")
|
150
|
+
end.map do |scenario|
|
151
|
+
scenario.compact.join("_")
|
152
152
|
end.compact
|
153
153
|
end
|
154
154
|
|
155
155
|
it "#on_app_master runs on app masters and solos" do
|
156
|
-
where_code_runs_with(
|
156
|
+
where_code_runs_with("on_app_master").should == %w(solo app_master)
|
157
157
|
end
|
158
158
|
|
159
159
|
it "#on_app_servers runs on app masters, app slaves, and solos" do
|
160
|
-
where_code_runs_with(
|
160
|
+
where_code_runs_with("on_app_servers").should == %w(solo app_master app multi_role,app)
|
161
161
|
end
|
162
162
|
|
163
163
|
it "#on_app_servers_and_utilities does what it says on the tin" do
|
164
|
-
where_code_runs_with(
|
164
|
+
where_code_runs_with("on_app_servers_and_utilities").should ==
|
165
165
|
%w(solo app_master app multi_role,app multi,util util_alpha util_beta util_gamma)
|
166
166
|
end
|
167
167
|
|
168
168
|
it "#on_utilities() runs on all utility instances" do
|
169
|
-
where_code_runs_with(
|
169
|
+
where_code_runs_with("on_utilities").should ==
|
170
170
|
%w(multi,util util_alpha util_beta util_gamma)
|
171
171
|
end
|
172
172
|
|
173
173
|
it "#on_utilities('sometype') runs on only utilities of type 'sometype'" do
|
174
|
-
where_code_runs_with(
|
174
|
+
where_code_runs_with("on_utilities('alpha')").should == %w(util_alpha)
|
175
175
|
end
|
176
176
|
|
177
177
|
it "#on_utilities('type1', 'type2') runs on utilities of both types" do
|
178
|
-
where_code_runs_with(
|
178
|
+
where_code_runs_with("on_utilities('alpha', 'beta')").should ==
|
179
179
|
%w(util_alpha util_beta)
|
180
180
|
end
|
181
181
|
|
182
182
|
it "#on_utilities can be invoked with (['a', 'b']) or ('a', 'b')" do
|
183
|
-
where_code_runs_with(
|
184
|
-
where_code_runs_with(
|
183
|
+
where_code_runs_with("on_utilities(%w[alpha beta])").should ==
|
184
|
+
where_code_runs_with("on_utilities('alpha', 'beta')")
|
185
185
|
end
|
186
186
|
|
187
187
|
end
|
@@ -189,20 +189,19 @@ describe "the deploy-hook API" do
|
|
189
189
|
context "#syntax_error" do
|
190
190
|
it "returns nil for hook files containing valid Ruby syntax" do
|
191
191
|
hook_path = File.expand_path('../fixtures/valid_hook.rb', __FILE__)
|
192
|
-
|
192
|
+
deploy_hook.syntax_error(hook_path).should be_nil
|
193
193
|
end
|
194
194
|
|
195
195
|
it "returns a brief problem description for hook files containing valid Ruby syntax" do
|
196
196
|
hook_path = File.expand_path('../fixtures/invalid_hook.rb', __FILE__)
|
197
|
-
|
198
|
-
|
199
|
-
@hook.syntax_error(hook_path).should =~ match
|
197
|
+
error = Regexp.escape("spec/fixtures/invalid_hook.rb:1: syntax error, unexpected '^'")
|
198
|
+
deploy_hook.syntax_error(hook_path).should =~ /#{error}/
|
200
199
|
end
|
201
200
|
end
|
202
201
|
|
203
202
|
context "is compatible with older deploy hook scripts" do
|
204
203
|
it "#current_role returns the first role" do
|
205
|
-
|
204
|
+
deploy_hook(:current_roles => %w(a b)).eval_hook('current_role').should == 'a'
|
206
205
|
end
|
207
206
|
end
|
208
207
|
end
|
data/spec/deprecation_spec.rb
CHANGED
@@ -12,34 +12,12 @@ describe EY::Serverside do
|
|
12
12
|
$stderr = @original_stderr
|
13
13
|
end
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
@warnings.string.should include(old_name) if prints_warning
|
19
|
-
end
|
20
|
-
|
21
|
-
it "preserves the old constants" do
|
22
|
-
names = %w[CLI Deploy DeployBase Deploy::Configuration
|
23
|
-
DeployHook LockfileParser LoggedOutput Server Task
|
24
|
-
Strategies Strategies::Git]
|
25
|
-
|
26
|
-
names.map do |name|
|
27
|
-
const = eval("::EY::Serverside::#{name}")
|
28
|
-
# The way deprecations are implemented currently, we don't print
|
29
|
-
# warning messages for constants that aren't directly under EY::
|
30
|
-
prints_warning = name.include?('::') ? false : true
|
31
|
-
check_deprecation(const, prints_warning)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
it "deprecates EY.dna_json and EY.node" do
|
36
|
-
EY.dna_json.should == EY::Serverside.dna_json
|
37
|
-
@warnings.string.should include("EY.dna_json")
|
38
|
-
EY.node.should == EY::Serverside.node
|
39
|
-
@warnings.string.should include("EY.node")
|
15
|
+
it "deprecates EY::Serverside::LoggedOutput for EY::Serverside::Shell::Helpers" do
|
16
|
+
EY::Serverside::LoggedOutput.should == EY::Serverside::Shell::Helpers
|
17
|
+
@warnings.string.should include("EY::Serverside::LoggedOutput")
|
40
18
|
end
|
41
19
|
|
42
20
|
it "doesn't interfere with unrelated constants" do
|
43
|
-
lambda{ EY::WTFNotDefined }.should raise_error(NameError, /uninitialized constant.*
|
21
|
+
lambda{ EY::Serverside::WTFNotDefined }.should raise_error(NameError, /uninitialized constant.*WTFNotDefined/)
|
44
22
|
end
|
45
23
|
end
|
data/spec/git_strategy_spec.rb
CHANGED
@@ -2,8 +2,12 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe "the git deploy strategy" do
|
4
4
|
subject do
|
5
|
-
EY::Serverside::Strategies::Git.new(
|
6
|
-
|
5
|
+
EY::Serverside::Strategies::Git.new(
|
6
|
+
test_shell,
|
7
|
+
:repo => File.join(GITREPO_DIR, 'git'),
|
8
|
+
:repository_cache => GITREPO_DIR,
|
9
|
+
:ref => "master"
|
10
|
+
)
|
7
11
|
end
|
8
12
|
|
9
13
|
before { subject.checkout }
|
data/spec/nodejs_deploy_spec.rb
CHANGED
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe "Deploying an application that uses Node.js and NPM" do
|
4
4
|
def deploy_test_application
|
5
|
-
@deploy_dir =
|
5
|
+
@deploy_dir = Pathname.new(Dir.tmpdir).join("serverside-deploy-#{Time.now.to_i}-#{$$}")
|
6
6
|
|
7
7
|
# set up EY::Serverside::Server like we're on a solo
|
8
8
|
EY::Serverside::Server.reset
|
@@ -19,7 +19,7 @@ describe "Deploying an application that uses Node.js and NPM" do
|
|
19
19
|
})
|
20
20
|
|
21
21
|
@binpath = File.expand_path(File.join(File.dirname(__FILE__), '..', 'bin', 'engineyard-serverside'))
|
22
|
-
@deployer = FullTestDeploy.new(config)
|
22
|
+
@deployer = FullTestDeploy.new(config, test_shell)
|
23
23
|
@deployer.deploy do
|
24
24
|
FileUtils.mkdir_p(config.repository_cache) # block runs before deploy
|
25
25
|
@deployer.generate_package_json_in(config.repository_cache)
|