engineyard-serverside 1.5.35.pre.2 → 1.6.0.pre

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. data/lib/engineyard-serverside.rb +3 -1
  2. data/lib/engineyard-serverside/cli.rb +73 -38
  3. data/lib/engineyard-serverside/configuration.rb +38 -12
  4. data/lib/engineyard-serverside/deploy.rb +63 -51
  5. data/lib/engineyard-serverside/deploy_hook.rb +21 -18
  6. data/lib/engineyard-serverside/deprecation.rb +9 -17
  7. data/lib/engineyard-serverside/lockfile_parser.rb +1 -1
  8. data/lib/engineyard-serverside/rails_asset_support.rb +5 -5
  9. data/lib/engineyard-serverside/server.rb +8 -11
  10. data/lib/engineyard-serverside/shell.rb +101 -0
  11. data/lib/engineyard-serverside/shell/formatter.rb +70 -0
  12. data/lib/engineyard-serverside/shell/helpers.rb +29 -0
  13. data/lib/engineyard-serverside/strategies/git.rb +12 -15
  14. data/lib/engineyard-serverside/task.rb +28 -5
  15. data/lib/engineyard-serverside/version.rb +1 -1
  16. data/lib/vendor/open4/lib/open4.rb +432 -0
  17. data/spec/basic_deploy_spec.rb +9 -9
  18. data/spec/bundler_deploy_spec.rb +1 -1
  19. data/spec/custom_deploy_spec.rb +45 -4
  20. data/spec/deploy_hook_spec.rb +77 -78
  21. data/spec/deprecation_spec.rb +4 -26
  22. data/spec/git_strategy_spec.rb +6 -2
  23. data/spec/nodejs_deploy_spec.rb +2 -2
  24. data/spec/services_deploy_spec.rb +11 -10
  25. data/spec/shell_spec.rb +48 -0
  26. data/spec/spec_helper.rb +48 -25
  27. data/spec/sqlite3_deploy_spec.rb +1 -2
  28. data/spec/support/integration.rb +1 -13
  29. metadata +57 -97
  30. data/lib/engineyard-serverside/logged_output.rb +0 -91
  31. data/lib/vendor/systemu/LICENSE +0 -3
  32. data/lib/vendor/systemu/lib/systemu.rb +0 -363
  33. data/lib/vendor/systemu/systemu.gemspec +0 -45
  34. data/spec/fixtures/gitrepo/bar +0 -0
  35. data/spec/logged_output_spec.rb +0 -55
@@ -20,12 +20,13 @@ describe "Deploying an application with services" do
20
20
  "stack" => 'nginx_passenger',
21
21
  "migrate" => nil,
22
22
  'app' => 'foo',
23
+ 'environment' => 'env',
24
+ 'account' => 'acc',
23
25
  'framework_env' => 'staging'
24
26
  })
25
27
 
26
- EY::Serverside::LoggedOutput.verbose = true
27
28
  @binpath = File.expand_path(File.join(File.dirname(__FILE__), '..', 'bin', 'engineyard-serverside'))
28
- FullTestDeploy.new(config)
29
+ FullTestDeploy.new(config, test_shell)
29
30
  end
30
31
 
31
32
  def exist
@@ -65,7 +66,7 @@ DEPENDENCIES
65
66
  end
66
67
 
67
68
  it "warns about missing ey_config" do
68
- @deployer.infos.should be_any { |info| info =~ /WARNING: Gemfile.lock does not contain ey_config/ }
69
+ read_stderr.should include("WARNING: Gemfile.lock does not contain ey_config")
69
70
  end
70
71
 
71
72
  end
@@ -75,7 +76,7 @@ DEPENDENCIES
75
76
  end
76
77
 
77
78
  it "works without warnings" do
78
- @deployer.infos.should_not be_any { |info| info =~ /WARNING/ }
79
+ read_output.should_not =~ /WARNING/
79
80
  end
80
81
 
81
82
  end
@@ -101,7 +102,7 @@ DEPENDENCIES
101
102
  @symlinked_services_file.should be_symlink
102
103
  @shared_services_file.read.should == "#{@invalid_services_yml}\n"
103
104
 
104
- @deployer.infos.should_not be_any { |info| info =~ /WARNING/ }
105
+ read_output.should_not =~ /WARNING/
105
106
  end
106
107
  end
107
108
 
@@ -125,7 +126,7 @@ DEPENDENCIES
125
126
  @symlinked_services_file.should be_symlink
126
127
  @shared_services_file.read.should == "#{@services_yml}\n"
127
128
 
128
- @deployer.infos.should_not be_any { |info| info =~ /WARNING/ }
129
+ read_output.should_not =~ /WARNING/
129
130
  end
130
131
 
131
132
  describe "followed by a deploy that can't find the command" do
@@ -144,7 +145,7 @@ DEPENDENCIES
144
145
  @symlinked_services_file.should be_symlink
145
146
  @shared_services_file.read.should == "#{@services_yml}\n"
146
147
 
147
- @deployer.infos.should_not be_any { |info| info =~ /WARNING/ }
148
+ read_output.should_not =~ /WARNING/
148
149
  end
149
150
 
150
151
  end
@@ -166,7 +167,7 @@ DEPENDENCIES
166
167
  @symlinked_services_file.should be_symlink
167
168
  @shared_services_file.read.should == "#{@services_yml}\n"
168
169
 
169
- @deployer.infos.should be_any { |info| info =~ /WARNING: External services configuration not updated/ }
170
+ read_stderr.should include('WARNING: External services configuration not updated')
170
171
  end
171
172
 
172
173
  it "does not log a warning or symlink a config file when there is no existing services file" do
@@ -176,7 +177,7 @@ DEPENDENCIES
176
177
  @shared_services_file.should_not exist
177
178
  @symlinked_services_file.should_not exist
178
179
 
179
- @deployer.infos.should_not be_any { |info| info =~ /WARNING/ }
180
+ read_output.should_not =~ /WARNING/
180
181
  end
181
182
 
182
183
  end
@@ -199,7 +200,7 @@ DEPENDENCIES
199
200
  @symlinked_services_file.should be_symlink
200
201
  @shared_services_file.read.should == "#{@services_yml}\n"
201
202
 
202
- @deployer.infos.should_not be_any { |info| info =~ /WARNING/ }
203
+ read_output.should_not =~ /WARNING/
203
204
  end
204
205
 
205
206
  end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+ require 'tempfile'
3
+ require 'timecop'
4
+
5
+ describe EY::Serverside::Shell do
6
+ it "has a timestamp before each line" do
7
+ time1 = Time.local(2008, 9, 1, 12, 0, 0)
8
+ time2 = Time.local(2008, 9, 1, 12, 3, 5)
9
+ time3 = Time.local(2008, 9, 1, 12, 10, 25)
10
+
11
+ @output = StringIO.new
12
+ @shell = EY::Serverside::Shell.new(:verbose => true, :stdout => @output, :stderr => @output, :log_path => Pathname.new(Dir.tmpdir).join("engineyard-serverside-#{Time.now.to_i}-${$$}.log"), :start_time => time1)
13
+
14
+ Timecop.freeze(time1) do
15
+ @shell.debug('test1')
16
+ @shell.warning('test2')
17
+ end
18
+ Timecop.freeze(time2) do
19
+ @shell.status('STATUS')
20
+ @shell.debug("test11\ntest12\ntest13")
21
+ @shell.warning("test21\ntest22\ntest23")
22
+ end
23
+ Timecop.freeze(time3) do
24
+ @shell.substatus("test31\ntest32\ntest33")
25
+ end
26
+
27
+ tstp_1 = "+ 00s "
28
+ tstp_2 = "+ 3m 05s "
29
+ tstp_3 = "+10m 25s "
30
+ notstp = " "
31
+ @output.rewind
32
+ @output.read.should == <<-OUTPUT
33
+ #{notstp} test1
34
+ #{tstp_1} !> WARNING: test2
35
+
36
+ \e[1m#{tstp_2} ~> STATUS
37
+ \e[0m#{notstp} test11
38
+ #{notstp} test12
39
+ #{notstp} test13
40
+ #{tstp_2} !> WARNING: test21
41
+ #{tstp_2} !> test22
42
+ #{tstp_2} !> test23
43
+ #{notstp} ~ test31
44
+ #{notstp} ~ test32
45
+ #{notstp} ~ test33
46
+ OUTPUT
47
+ end
48
+ end
data/spec/spec_helper.rb CHANGED
@@ -17,24 +17,10 @@ module EY
17
17
  @node = nil
18
18
  end
19
19
 
20
- module LoggedOutput
21
- def self.enable_actual_info!
22
- @use_actual_info = true
23
- end
24
-
25
- def self.disable_actual_info!
26
- @use_actual_info = false
27
- end
28
-
29
- def self.use_actual_info?
30
- @use_actual_info
31
- end
32
-
33
- alias old_info info
34
- def info(*args)
35
- if EY::Serverside::LoggedOutput.use_actual_info?
36
- old_info(*args)
37
- end
20
+ class Shell
21
+ def spawn_process(cmd, cmd_stdout, cmd_stderr)
22
+ cmd_stdout << `#{cmd} 2>&1`
23
+ $? == 0
38
24
  end
39
25
  end
40
26
 
@@ -51,8 +37,7 @@ FileUtils.rm_rf GITREPO_DIR if File.exists? GITREPO_DIR
51
37
  Kernel.system "tar xzf #{GITREPO_DIR}.tar.gz -C #{FIXTURES_DIR}"
52
38
 
53
39
  Spec::Runner.configure do |config|
54
- `which npm 2>&1`
55
- $NPM_INSTALLED = ($? == 0)
40
+ $NPM_INSTALLED = system('which npm 2>&1')
56
41
  unless $NPM_INSTALLED
57
42
  $stderr.puts "npm not found; skipping Node.js specs."
58
43
  end
@@ -63,10 +48,46 @@ Spec::Runner.configure do |config|
63
48
  EY::Serverside.dna_json = {}.to_json
64
49
  end
65
50
 
51
+ class VerboseStringIO < StringIO
52
+ def <<(str)
53
+ if ENV['VERBOSE'] || ENV['DEBUG']
54
+ $stderr << str
55
+ end
56
+ super
57
+ end
58
+ end
59
+
60
+ def stdout
61
+ @stdout ||= VerboseStringIO.new
62
+ end
63
+
64
+ def stderr
65
+ @stderr ||= VerboseStringIO.new
66
+ end
67
+
68
+ def read_stdout
69
+ stdout.rewind
70
+ stdout.read
71
+ end
72
+
73
+ def read_stderr
74
+ stderr.rewind
75
+ stderr.read
76
+ end
77
+
78
+ def read_output
79
+ read_stdout + "\n" + read_stderr
80
+ end
81
+
82
+ def test_shell
83
+ log_path = Pathname.new(Dir.tmpdir).join("serverside-deploy-#{Time.now.to_i}-#{$$}.log")
84
+ EY::Serverside::Shell.new(:verbose => true, :log_path => log_path, :stdout => stdout, :stderr => stderr)
85
+ end
86
+
66
87
  def deploy_test_application(assets_enabled = true, &block)
67
88
  $DISABLE_GEMFILE = false
68
89
  $DISABLE_LOCKFILE = false
69
- @deploy_dir = File.join(Dir.tmpdir, "serverside-deploy-#{Time.now.to_i}-#{$$}")
90
+ @deploy_dir = Pathname.new(Dir.tmpdir).join("serverside-deploy-#{Time.now.to_i}-#{$$}")
70
91
 
71
92
  # set up EY::Serverside::Server like we're on a solo
72
93
  EY::Serverside::Server.reset
@@ -75,25 +96,27 @@ Spec::Runner.configure do |config|
75
96
  # run a deploy
76
97
  @config = EY::Serverside::Deploy::Configuration.new({
77
98
  "strategy" => "IntegrationSpec",
78
- "deploy_to" => @deploy_dir,
99
+ "deploy_to" => @deploy_dir.to_s,
79
100
  "group" => `id -gn`.strip,
80
101
  "stack" => 'nginx_passenger',
81
102
  "migrate" => "ruby -e 'puts ENV[\"PATH\"]' > #{@deploy_dir}/path-when-migrating",
82
103
  'app' => 'rails31',
104
+ 'environment' => 'env',
105
+ 'account' => 'acc',
83
106
  'framework_env' => 'staging'
84
107
  })
85
108
 
86
109
  # pretend there is a shared bundled_gems directory
87
- FileUtils.mkdir_p(File.join(@deploy_dir, 'shared', 'bundled_gems'))
110
+ @deploy_dir.join('shared', 'bundled_gems').mkpath
88
111
  %w(RUBY_VERSION SYSTEM_VERSION).each do |name|
89
- File.open(File.join(@deploy_dir, 'shared', 'bundled_gems', name), "w") { |f| f.write("old\n") }
112
+ @deploy_dir.join('shared', 'bundled_gems', name).open("w") { |f| f.write("old\n") }
90
113
  end
91
114
 
92
115
  # Set up the application directory to have the requested asset options.
93
116
  prepare_rails31_app(assets_enabled)
94
117
 
95
118
  @binpath = File.expand_path(File.join(File.dirname(__FILE__), '..', 'bin', 'engineyard-serverside'))
96
- @deployer = FullTestDeploy.new(@config)
119
+ @deployer = FullTestDeploy.new(@config, test_shell)
97
120
  @deployer.deploy(&block)
98
121
  end
99
122
 
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe "Deploying an application with sqlite3 as the only DB adapter in the Gemfile.lock" do
4
- before do
4
+ before(:all) do
5
5
  @release_path = nil
6
6
  @shared_path = nil
7
7
  @framework_env = nil
@@ -17,7 +17,6 @@ describe "Deploying an application with sqlite3 as the only DB adapter in the Ge
17
17
  @framework_env = deployer.framework_env
18
18
  end
19
19
  end
20
-
21
20
 
22
21
  it 'should symlink database.sqlite3.yml' do
23
22
  File.exist?(File.join(@release_path, 'config', 'database.yml')).should be_true
@@ -1,25 +1,13 @@
1
1
  class FullTestDeploy < EY::Serverside::Deploy
2
- attr_reader :infos, :debugs, :commands
2
+ attr_reader :commands
3
3
 
4
4
  def initialize(*)
5
5
  super
6
- @infos = []
7
- @debugs = []
8
6
  @commands = []
9
7
  @gemfile_contents = nil
10
8
  @lockfile_contents = nil
11
9
  end
12
10
 
13
- # stfu
14
- def info(msg)
15
- @infos << msg
16
- end
17
-
18
- # no really, stfu
19
- def debug(msg)
20
- @debugs << msg
21
- end
22
-
23
11
  # passwordless sudo is neither guaranteed nor desired
24
12
  def sudo(cmd)
25
13
  run(cmd)
metadata CHANGED
@@ -1,94 +1,67 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: engineyard-serverside
3
- version: !ruby/object:Gem::Version
4
- hash: -3562360294
5
- prerelease: 7
6
- segments:
7
- - 1
8
- - 5
9
- - 35
10
- - pre
11
- - 2
12
- version: 1.5.35.pre.2
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.6.0.pre
5
+ prerelease: 6
13
6
  platform: ruby
14
- authors:
7
+ authors:
15
8
  - EY Cloud Team
16
9
  autorequire:
17
10
  bindir: bin
18
11
  cert_chain: []
19
-
20
- date: 2012-03-23 00:00:00 Z
21
- dependencies:
22
- - !ruby/object:Gem::Dependency
12
+ date: 2012-02-25 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
23
15
  name: rspec
24
- prerelease: false
25
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &70164047775160 !ruby/object:Gem::Requirement
26
17
  none: false
27
- requirements:
28
- - - "="
29
- - !ruby/object:Gem::Version
30
- hash: 31
31
- segments:
32
- - 1
33
- - 3
34
- - 2
18
+ requirements:
19
+ - - =
20
+ - !ruby/object:Gem::Version
35
21
  version: 1.3.2
36
22
  type: :development
37
- version_requirements: *id001
38
- - !ruby/object:Gem::Dependency
39
- name: rake
40
23
  prerelease: false
41
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *70164047775160
25
+ - !ruby/object:Gem::Dependency
26
+ name: rake
27
+ requirement: &70164047774660 !ruby/object:Gem::Requirement
42
28
  none: false
43
- requirements:
44
- - - ">="
45
- - !ruby/object:Gem::Version
46
- hash: 11
47
- segments:
48
- - 0
49
- - 9
50
- - 2
51
- - 2
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
52
32
  version: 0.9.2.2
53
33
  type: :development
54
- version_requirements: *id002
55
- - !ruby/object:Gem::Dependency
56
- name: rdoc
57
34
  prerelease: false
58
- requirement: &id003 !ruby/object:Gem::Requirement
35
+ version_requirements: *70164047774660
36
+ - !ruby/object:Gem::Dependency
37
+ name: rdoc
38
+ requirement: &70164047774100 !ruby/object:Gem::Requirement
59
39
  none: false
60
- requirements:
61
- - - ">="
62
- - !ruby/object:Gem::Version
63
- hash: 3
64
- segments:
65
- - 0
66
- version: "0"
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
67
44
  type: :development
68
- version_requirements: *id003
69
- - !ruby/object:Gem::Dependency
70
- name: timecop
71
45
  prerelease: false
72
- requirement: &id004 !ruby/object:Gem::Requirement
46
+ version_requirements: *70164047774100
47
+ - !ruby/object:Gem::Dependency
48
+ name: timecop
49
+ requirement: &70164047789780 !ruby/object:Gem::Requirement
73
50
  none: false
74
- requirements:
75
- - - ">="
76
- - !ruby/object:Gem::Version
77
- hash: 3
78
- segments:
79
- - 0
80
- version: "0"
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
81
55
  type: :development
82
- version_requirements: *id004
56
+ prerelease: false
57
+ version_requirements: *70164047789780
83
58
  description:
84
59
  email: cloud@engineyard.com
85
- executables:
60
+ executables:
86
61
  - engineyard-serverside
87
62
  extensions: []
88
-
89
63
  extra_rdoc_files: []
90
-
91
- files:
64
+ files:
92
65
  - bin/engineyard-serverside
93
66
  - lib/engineyard-serverside/cli.rb
94
67
  - lib/engineyard-serverside/configuration.rb
@@ -100,9 +73,11 @@ files:
100
73
  - lib/engineyard-serverside/futures/celluloid.rb
101
74
  - lib/engineyard-serverside/futures/dataflow.rb
102
75
  - lib/engineyard-serverside/lockfile_parser.rb
103
- - lib/engineyard-serverside/logged_output.rb
104
76
  - lib/engineyard-serverside/rails_asset_support.rb
105
77
  - lib/engineyard-serverside/server.rb
78
+ - lib/engineyard-serverside/shell/formatter.rb
79
+ - lib/engineyard-serverside/shell/helpers.rb
80
+ - lib/engineyard-serverside/shell.rb
106
81
  - lib/engineyard-serverside/strategies/git.rb
107
82
  - lib/engineyard-serverside/task.rb
108
83
  - lib/engineyard-serverside/version.rb
@@ -286,9 +261,7 @@ files:
286
261
  - lib/vendor/json_pure/tools/fuzz.rb
287
262
  - lib/vendor/json_pure/tools/server.rb
288
263
  - lib/vendor/json_pure/VERSION
289
- - lib/vendor/systemu/lib/systemu.rb
290
- - lib/vendor/systemu/LICENSE
291
- - lib/vendor/systemu/systemu.gemspec
264
+ - lib/vendor/open4/lib/open4.rb
292
265
  - lib/vendor/thor/bin/rake2thor
293
266
  - lib/vendor/thor/bin/thor
294
267
  - lib/vendor/thor/CHANGELOG.rdoc
@@ -330,7 +303,6 @@ files:
330
303
  - spec/deploy_hook_spec.rb
331
304
  - spec/deprecation_spec.rb
332
305
  - spec/fixtures/gemfiles/1.0.21-rails-31-with-sqlite
333
- - spec/fixtures/gitrepo/bar
334
306
  - spec/fixtures/gitrepo/foo
335
307
  - spec/fixtures/gitrepo.tar.gz
336
308
  - spec/fixtures/invalid_hook.rb
@@ -351,58 +323,46 @@ files:
351
323
  - spec/fixtures/valid_hook.rb
352
324
  - spec/git_strategy_spec.rb
353
325
  - spec/lockfile_parser_spec.rb
354
- - spec/logged_output_spec.rb
355
326
  - spec/nodejs_deploy_spec.rb
356
327
  - spec/rails31_deploy_spec.rb
357
328
  - spec/restart_spec.rb
358
329
  - spec/server_spec.rb
359
330
  - spec/services_deploy_spec.rb
331
+ - spec/shell_spec.rb
360
332
  - spec/spec_helper.rb
361
333
  - spec/sqlite3_deploy_spec.rb
362
334
  - spec/support/integration.rb
363
335
  homepage: http://github.com/engineyard/engineyard-serverside
364
336
  licenses: []
365
-
366
337
  post_install_message:
367
338
  rdoc_options: []
368
-
369
- require_paths:
339
+ require_paths:
370
340
  - lib
371
- required_ruby_version: !ruby/object:Gem::Requirement
341
+ required_ruby_version: !ruby/object:Gem::Requirement
372
342
  none: false
373
- requirements:
374
- - - ">="
375
- - !ruby/object:Gem::Version
376
- hash: 3
377
- segments:
378
- - 0
379
- version: "0"
380
- required_rubygems_version: !ruby/object:Gem::Requirement
343
+ requirements:
344
+ - - ! '>='
345
+ - !ruby/object:Gem::Version
346
+ version: '0'
347
+ required_rubygems_version: !ruby/object:Gem::Requirement
381
348
  none: false
382
- requirements:
383
- - - ">="
384
- - !ruby/object:Gem::Version
385
- hash: 23
386
- segments:
387
- - 1
388
- - 3
389
- - 6
349
+ requirements:
350
+ - - ! '>='
351
+ - !ruby/object:Gem::Version
390
352
  version: 1.3.6
391
353
  requirements: []
392
-
393
354
  rubyforge_project:
394
- rubygems_version: 1.8.19
355
+ rubygems_version: 1.8.15
395
356
  signing_key:
396
357
  specification_version: 3
397
358
  summary: A gem that deploys ruby applications on EY Cloud instances
398
- test_files:
359
+ test_files:
399
360
  - spec/basic_deploy_spec.rb
400
361
  - spec/bundler_deploy_spec.rb
401
362
  - spec/custom_deploy_spec.rb
402
363
  - spec/deploy_hook_spec.rb
403
364
  - spec/deprecation_spec.rb
404
365
  - spec/fixtures/gemfiles/1.0.21-rails-31-with-sqlite
405
- - spec/fixtures/gitrepo/bar
406
366
  - spec/fixtures/gitrepo/foo
407
367
  - spec/fixtures/gitrepo.tar.gz
408
368
  - spec/fixtures/invalid_hook.rb
@@ -423,12 +383,12 @@ test_files:
423
383
  - spec/fixtures/valid_hook.rb
424
384
  - spec/git_strategy_spec.rb
425
385
  - spec/lockfile_parser_spec.rb
426
- - spec/logged_output_spec.rb
427
386
  - spec/nodejs_deploy_spec.rb
428
387
  - spec/rails31_deploy_spec.rb
429
388
  - spec/restart_spec.rb
430
389
  - spec/server_spec.rb
431
390
  - spec/services_deploy_spec.rb
391
+ - spec/shell_spec.rb
432
392
  - spec/spec_helper.rb
433
393
  - spec/sqlite3_deploy_spec.rb
434
394
  - spec/support/integration.rb