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.
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