engineyard-serverside 2.0.0.rc1 → 2.0.0

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.
@@ -118,6 +118,7 @@ To fix this problem, commit your Gemfile.lock to your repository and redeploy.
118
118
 
119
119
  def restart_with_maintenance_page
120
120
  require_custom_tasks
121
+ load_ey_yml
121
122
  enable_maintenance_page
122
123
  restart
123
124
  disable_maintenance_page
@@ -387,7 +388,7 @@ WRAP
387
388
  # Rollback doesn't know about the repository location (nor
388
389
  # should it need to), but it would like to use #short_log_message.
389
390
  def strategy
390
- ENV['GIT_SSH'] = ssh_executable
391
+ ENV['GIT_SSH'] = ssh_executable.to_s
391
392
  @strategy ||= config.strategy_class.new(
392
393
  shell,
393
394
  :repository_cache => config.paths.repository_cache.to_s,
@@ -447,6 +448,7 @@ WRAP
447
448
  rescue Exception
448
449
  shell.status "Release #{config.paths.active_release} failed, saving release to #{config.paths.releases_failed}."
449
450
  sudo "mv #{config.paths.active_release} #{config.paths.releases_failed}"
451
+ clean_release_directory(config.paths.releases_failed)
450
452
  raise
451
453
  end
452
454
 
@@ -87,10 +87,18 @@ Please fix this error before retrying.
87
87
  shell.logged_system(Escape.shell_command(["sh", "-l", "-c", cmd])).success?
88
88
  end
89
89
 
90
+ def run!(cmd)
91
+ run(cmd) or raise("run!: Command failed. #{cmd}")
92
+ end
93
+
90
94
  def sudo(cmd)
91
95
  shell.logged_system(Escape.shell_command(["sudo", "sh", "-l", "-c", cmd])).success?
92
96
  end
93
97
 
98
+ def sudo!(cmd)
99
+ sudo(cmd) or raise("sudo!: Command failed. #{cmd}")
100
+ end
101
+
94
102
  # convenience functions for running on certain instance types
95
103
  def on_app_master(&blk) on_roles(%w[solo app_master], &blk) end
96
104
  def on_app_servers(&blk) on_roles(%w[solo app_master app], &blk) end
@@ -2,7 +2,7 @@ require 'yaml'
2
2
  module EY
3
3
  module Serverside
4
4
  class LockfileParser
5
- DEFAULT = "1.1.3"
5
+ DEFAULT = "1.1.5"
6
6
 
7
7
  def self.default_version
8
8
  DEFAULT
@@ -17,7 +17,7 @@ module EY
17
17
  def manually_enable
18
18
  if paths.deployed?
19
19
  enable
20
- shell.info "Maintenance page enabled"
20
+ shell.status "Maintenance page enabled"
21
21
  else
22
22
  shell.fatal "Cannot enabled maintenance page. Application #{config.app_name} has never been deployed."
23
23
  false
@@ -27,7 +27,7 @@ module EY
27
27
  def manually_disable
28
28
  if paths.deployed?
29
29
  disable
30
- shell.info "Maintenance page disabled"
30
+ shell.status "Maintenance page disabled"
31
31
  else
32
32
  shell.fatal "Cannot enabled maintenance page. Application #{config.app_name} has never been deployed."
33
33
  false
@@ -51,7 +51,7 @@ module EY
51
51
  # method and it doesn't yield and it's better than raising)
52
52
  def roles(*select_roles, &block)
53
53
  if block_given?
54
- return yield roles(*select_roles)
54
+ return yield(roles(*select_roles))
55
55
  end
56
56
 
57
57
  roles_set = Set.new select_roles.flatten.compact.map{|r| r.to_sym}
@@ -2,34 +2,12 @@ require 'logger'
2
2
  require 'pathname'
3
3
  require 'systemu'
4
4
  require 'engineyard-serverside/shell/formatter'
5
+ require 'engineyard-serverside/shell/command_result'
6
+ require 'engineyard-serverside/shell/yieldio'
5
7
 
6
8
  module EY
7
9
  module Serverside
8
10
  class Shell
9
- class YieldIO
10
- def initialize(&block)
11
- @block = block
12
- end
13
- def <<(str)
14
- @block.call str
15
- end
16
- end
17
-
18
- class CommandResult < Struct.new(:command, :exitstatus, :output)
19
- def success?
20
- exitstatus.zero?
21
- end
22
-
23
- def inspect
24
- <<-EOM
25
- $ #{command}
26
- #{output}
27
-
28
- # => #{exitstatus}
29
- EOM
30
- end
31
- end
32
-
33
11
  attr_reader :logger
34
12
 
35
13
  def initialize(options)
@@ -0,0 +1,20 @@
1
+ module EY
2
+ module Serverside
3
+ class Shell
4
+ class CommandResult < Struct.new(:command, :exitstatus, :output)
5
+ def success?
6
+ exitstatus.zero?
7
+ end
8
+
9
+ def inspect
10
+ <<-EOM
11
+ $ #{command}
12
+ #{output}
13
+
14
+ ($?: #{exitstatus})
15
+ EOM
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,14 @@
1
+ module EY
2
+ module Serverside
3
+ class Shell
4
+ class YieldIO
5
+ def initialize(&block)
6
+ @block = block
7
+ end
8
+ def <<(str)
9
+ @block.call str
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -28,9 +28,6 @@ module EY
28
28
  if deploy_file
29
29
  shell.status "Loading deployment task overrides from #{deploy_file}"
30
30
  instance_eval(deploy_file.read)
31
- true
32
- else
33
- false
34
31
  end
35
32
  end
36
33
 
@@ -45,8 +42,6 @@ module EY
45
42
  shell.status "Loading deploy configuration in #{ey_yml}"
46
43
  data = YAML.load_file(ey_yml.to_s)
47
44
  config.load_ey_yml_data(data, shell)
48
- else
49
- false
50
45
  end
51
46
  rescue Exception
52
47
  shell.error "Error loading YAML in #{ey_yml}"
@@ -1,5 +1,5 @@
1
1
  module EY
2
2
  module Serverside
3
- VERSION = '2.0.0.rc1'
3
+ VERSION = '2.0.0'
4
4
  end
5
5
  end
@@ -90,13 +90,13 @@ describe "the EY::Serverside::Deploy API" do
90
90
 
91
91
  it "requires 'eydeploy.rb' and adds any defined methods to the deploy" do
92
92
  write_eydeploy 'eydeploy.rb'
93
- @deploy.require_custom_tasks.should be_true
93
+ @deploy.require_custom_tasks
94
94
  @deploy.got_new_methods.should == 'from the file on disk'
95
95
  end
96
96
 
97
97
  it "falls back to 'config/eydeploy.rb'" do
98
98
  write_eydeploy 'config/eydeploy.rb'
99
- @deploy.require_custom_tasks.should be_true
99
+ @deploy.require_custom_tasks
100
100
  @deploy.got_new_methods.should == 'from the file on disk'
101
101
  end
102
102
 
@@ -108,7 +108,7 @@ describe "the EY::Serverside::Deploy API" do
108
108
  end
109
109
 
110
110
  deploy = TestDeploySuper.new(test_servers, @config, test_shell)
111
- deploy.require_custom_tasks.should be_true
111
+ deploy.require_custom_tasks
112
112
  deploy.value.should == "base + derived"
113
113
  end
114
114
  end
@@ -63,6 +63,16 @@ describe "deploy hooks" do
63
63
  deploy_hook.eval_hook('run("true")').should be_true
64
64
  deploy_hook.eval_hook('run("false")').should be_false
65
65
  end
66
+
67
+ it "raises when the bang method alternative is used" do
68
+ lambda {
69
+ deploy_hook.eval_hook('run!("false")')
70
+ }.should raise_error(RuntimeError)
71
+ out = read_output
72
+ out.should =~ %r|FATAL: Exception raised in deploy hook /data/app_name/releases/\d+/deploy/fake_test_hook.rb.|
73
+ out.should =~ %r|RuntimeError: .*run!.*Command failed. false|
74
+ out.should =~ %r|Please fix this error before retrying.|
75
+ end
66
76
  end
67
77
 
68
78
  context "#sudo" do
@@ -77,6 +87,20 @@ describe "deploy hooks" do
77
87
  hook.callback_context.shell.should_receive(:logged_system).with(cmd).and_return(result)
78
88
  hook.eval_hook('sudo("do it as root") || raise("failed")')
79
89
  end
90
+
91
+ it "raises when the bang method alternative is used" do
92
+ hook = deploy_hook
93
+ cmd = "sudo sh -l -c false"
94
+ result = EY::Serverside::Shell::CommandResult.new(cmd, 1, "fail")
95
+ hook.callback_context.shell.should_receive(:logged_system).with(cmd).and_return(result)
96
+ lambda {
97
+ hook.eval_hook('sudo!("false")')
98
+ }.should raise_error(RuntimeError)
99
+ out = read_output
100
+ out.should =~ %r|FATAL: Exception raised in deploy hook /data/app_name/releases/\d+/deploy/fake_test_hook.rb.|
101
+ out.should =~ %r|RuntimeError: .*sudo!.*Command failed. false|
102
+ out.should =~ %r|Please fix this error before retrying.|
103
+ end
80
104
  end
81
105
 
82
106
  context "capistrano-ish methods" do
@@ -19,8 +19,8 @@ describe "the bundler version retrieved from the lockfile" do
19
19
  end
20
20
 
21
21
  it "has a default version" do
22
- EY::Serverside::LockfileParser.default_version.should == "1.1.3"
23
- EY::Serverside::LockfileParser::DEFAULT.should == "1.1.3"
22
+ EY::Serverside::LockfileParser.default_version.should == "1.1.5"
23
+ EY::Serverside::LockfileParser::DEFAULT.should == "1.1.5"
24
24
  end
25
25
 
26
26
  it "returns the default version for a 1.0 lockfile without a bundler dependency" do
metadata CHANGED
@@ -1,108 +1,119 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: engineyard-serverside
3
- version: !ruby/object:Gem::Version
4
- hash: 2346291293
5
- prerelease: 6
6
- segments:
7
- - 2
8
- - 0
9
- - 0
10
- - rc
11
- - 1
12
- version: 2.0.0.rc1
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.0
5
+ prerelease:
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-06-21 00:00:00 Z
21
- dependencies:
22
- - !ruby/object:Gem::Dependency
12
+ date: 2012-08-16 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: !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: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - '='
28
+ - !ruby/object:Gem::Version
29
+ version: 1.3.2
30
+ - !ruby/object:Gem::Dependency
31
+ name: rake
32
+ requirement: !ruby/object:Gem::Requirement
42
33
  none: false
43
- requirements:
44
- - - ">="
45
- - !ruby/object:Gem::Version
46
- hash: 11
47
- segments:
48
- - 0
49
- - 9
50
- - 2
51
- - 2
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
52
37
  version: 0.9.2.2
53
38
  type: :development
54
- version_requirements: *id002
55
- - !ruby/object:Gem::Dependency
56
- name: rdoc
57
39
  prerelease: false
58
- requirement: &id003 !ruby/object:Gem::Requirement
40
+ version_requirements: !ruby/object:Gem::Requirement
59
41
  none: false
60
- requirements:
61
- - - ">="
62
- - !ruby/object:Gem::Version
63
- hash: 3
64
- segments:
65
- - 0
66
- version: "0"
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 0.9.2.2
46
+ - !ruby/object:Gem::Dependency
47
+ name: rdoc
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
67
54
  type: :development
68
- version_requirements: *id003
69
- - !ruby/object:Gem::Dependency
70
- name: timecop
71
55
  prerelease: false
72
- requirement: &id004 !ruby/object:Gem::Requirement
56
+ version_requirements: !ruby/object:Gem::Requirement
73
57
  none: false
74
- requirements:
75
- - - ">="
76
- - !ruby/object:Gem::Version
77
- hash: 3
78
- segments:
79
- - 0
80
- version: "0"
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: timecop
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
81
70
  type: :development
82
- version_requirements: *id004
83
- - !ruby/object:Gem::Dependency
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
84
79
  name: simplecov
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
85
87
  prerelease: false
86
- requirement: &id005 !ruby/object:Gem::Requirement
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: engineyard-cloud-client
96
+ requirement: !ruby/object:Gem::Requirement
87
97
  none: false
88
- requirements:
89
- - - ">="
90
- - !ruby/object:Gem::Version
91
- hash: 3
92
- segments:
93
- - 0
94
- version: "0"
98
+ requirements:
99
+ - - ~>
100
+ - !ruby/object:Gem::Version
101
+ version: 1.0.5
95
102
  type: :development
96
- version_requirements: *id005
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 1.0.5
97
110
  description:
98
111
  email: cloud@engineyard.com
99
- executables:
112
+ executables:
100
113
  - engineyard-serverside
101
114
  extensions: []
102
-
103
115
  extra_rdoc_files: []
104
-
105
- files:
116
+ files:
106
117
  - bin/engineyard-serverside
107
118
  - lib/engineyard-serverside/cli.rb
108
119
  - lib/engineyard-serverside/cli_helpers.rb
@@ -120,8 +131,10 @@ files:
120
131
  - lib/engineyard-serverside/rails_asset_support.rb
121
132
  - lib/engineyard-serverside/server.rb
122
133
  - lib/engineyard-serverside/servers.rb
134
+ - lib/engineyard-serverside/shell/command_result.rb
123
135
  - lib/engineyard-serverside/shell/formatter.rb
124
136
  - lib/engineyard-serverside/shell/helpers.rb
137
+ - lib/engineyard-serverside/shell/yieldio.rb
125
138
  - lib/engineyard-serverside/shell.rb
126
139
  - lib/engineyard-serverside/strategies/git.rb
127
140
  - lib/engineyard-serverside/task.rb
@@ -451,40 +464,32 @@ files:
451
464
  - spec/support/integration.rb
452
465
  homepage: http://github.com/engineyard/engineyard-serverside
453
466
  licenses: []
454
-
455
467
  post_install_message:
456
468
  rdoc_options: []
457
-
458
- require_paths:
469
+ require_paths:
459
470
  - lib
460
- required_ruby_version: !ruby/object:Gem::Requirement
471
+ required_ruby_version: !ruby/object:Gem::Requirement
461
472
  none: false
462
- requirements:
463
- - - ">="
464
- - !ruby/object:Gem::Version
465
- hash: 3
466
- segments:
473
+ requirements:
474
+ - - ! '>='
475
+ - !ruby/object:Gem::Version
476
+ version: '0'
477
+ segments:
467
478
  - 0
468
- version: "0"
469
- required_rubygems_version: !ruby/object:Gem::Requirement
479
+ hash: -2659746554228302927
480
+ required_rubygems_version: !ruby/object:Gem::Requirement
470
481
  none: false
471
- requirements:
472
- - - ">="
473
- - !ruby/object:Gem::Version
474
- hash: 23
475
- segments:
476
- - 1
477
- - 3
478
- - 6
482
+ requirements:
483
+ - - ! '>='
484
+ - !ruby/object:Gem::Version
479
485
  version: 1.3.6
480
486
  requirements: []
481
-
482
487
  rubyforge_project:
483
488
  rubygems_version: 1.8.24
484
489
  signing_key:
485
490
  specification_version: 3
486
491
  summary: A gem that deploys ruby applications on EY Cloud instances
487
- test_files:
492
+ test_files:
488
493
  - spec/basic_deploy_spec.rb
489
494
  - spec/bundler_deploy_spec.rb
490
495
  - spec/configuration_spec.rb