engineyard-serverside 1.6.5 → 1.7.0.pre2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (99) hide show
  1. data/lib/engineyard-serverside.rb +2 -0
  2. data/lib/engineyard-serverside/cli.rb +83 -48
  3. data/lib/engineyard-serverside/configuration.rb +85 -18
  4. data/lib/engineyard-serverside/deploy.rb +105 -91
  5. data/lib/engineyard-serverside/deploy_hook.rb +22 -20
  6. data/lib/engineyard-serverside/deprecation.rb +9 -17
  7. data/lib/engineyard-serverside/future.rb +10 -4
  8. data/lib/engineyard-serverside/futures/celluloid.rb +3 -13
  9. data/lib/engineyard-serverside/futures/dataflow.rb +8 -13
  10. data/lib/engineyard-serverside/lockfile_parser.rb +1 -1
  11. data/lib/engineyard-serverside/rails_asset_support.rb +26 -10
  12. data/lib/engineyard-serverside/server.rb +17 -12
  13. data/lib/engineyard-serverside/shell.rb +98 -0
  14. data/lib/engineyard-serverside/shell/formatter.rb +71 -0
  15. data/lib/engineyard-serverside/shell/helpers.rb +29 -0
  16. data/lib/engineyard-serverside/strategies/git.rb +33 -63
  17. data/lib/engineyard-serverside/task.rb +34 -13
  18. data/lib/engineyard-serverside/version.rb +1 -1
  19. data/spec/basic_deploy_spec.rb +15 -50
  20. data/spec/bundler_deploy_spec.rb +3 -44
  21. data/spec/configuration_spec.rb +72 -0
  22. data/spec/custom_deploy_spec.rb +3 -4
  23. data/spec/deploy_hook_spec.rb +210 -162
  24. data/spec/deprecation_spec.rb +4 -26
  25. data/spec/ey_yml_customized_deploy_spec.rb +68 -0
  26. data/spec/fixtures/repos/assets_disabled/Gemfile +6 -0
  27. data/spec/fixtures/repos/assets_disabled/Gemfile.lock +90 -0
  28. data/spec/fixtures/repos/assets_disabled/README +1 -0
  29. data/spec/fixtures/repos/assets_disabled/Rakefile +5 -0
  30. data/spec/fixtures/repos/assets_disabled/config/application.rb +5 -0
  31. data/spec/fixtures/repos/assets_disabled_in_ey_yml/Gemfile +6 -0
  32. data/spec/fixtures/repos/assets_disabled_in_ey_yml/Gemfile.lock +90 -0
  33. data/spec/fixtures/repos/assets_disabled_in_ey_yml/README +1 -0
  34. data/spec/fixtures/repos/assets_disabled_in_ey_yml/Rakefile +5 -0
  35. data/spec/fixtures/repos/assets_disabled_in_ey_yml/config/application.rb +5 -0
  36. data/spec/fixtures/repos/assets_disabled_in_ey_yml/config/ey.yml +4 -0
  37. data/spec/fixtures/repos/assets_enabled/Gemfile +6 -0
  38. data/spec/fixtures/repos/assets_enabled/Gemfile.lock +90 -0
  39. data/spec/fixtures/repos/assets_enabled/README +1 -0
  40. data/spec/fixtures/repos/assets_enabled/Rakefile +5 -0
  41. data/spec/fixtures/repos/assets_enabled/config/application.rb +5 -0
  42. data/spec/fixtures/repos/assets_enabled_in_ey_yml/README +1 -0
  43. data/spec/fixtures/repos/assets_enabled_in_ey_yml/Rakefile +5 -0
  44. data/spec/fixtures/repos/assets_enabled_in_ey_yml/config/ey.yml +4 -0
  45. data/spec/fixtures/repos/assets_in_hook/Gemfile +6 -0
  46. data/spec/fixtures/repos/assets_in_hook/Gemfile.lock +90 -0
  47. data/spec/fixtures/repos/assets_in_hook/README +2 -0
  48. data/spec/fixtures/repos/assets_in_hook/Rakefile +5 -0
  49. data/spec/fixtures/repos/assets_in_hook/config/application.rb +5 -0
  50. data/spec/fixtures/repos/assets_in_hook/deploy/before_migrate.rb +1 -0
  51. data/spec/fixtures/repos/default/Gemfile +5 -0
  52. data/spec/fixtures/repos/default/Gemfile.lock +14 -0
  53. data/spec/fixtures/repos/default/README +5 -0
  54. data/spec/fixtures/repos/ey_yml/Gemfile +4 -0
  55. data/spec/fixtures/repos/ey_yml/Gemfile.lock +12 -0
  56. data/spec/fixtures/repos/ey_yml/README +1 -0
  57. data/spec/fixtures/repos/ey_yml/config/ey.yml +12 -0
  58. data/spec/fixtures/repos/ey_yml/deploy/before_migrate.rb +6 -0
  59. data/spec/fixtures/repos/ey_yml_alt/Gemfile +4 -0
  60. data/spec/fixtures/repos/ey_yml_alt/Gemfile.lock +12 -0
  61. data/spec/fixtures/repos/ey_yml_alt/README +1 -0
  62. data/spec/fixtures/repos/ey_yml_alt/deploy/before_migrate.rb +6 -0
  63. data/spec/fixtures/repos/ey_yml_alt/ey.yml +12 -0
  64. data/spec/fixtures/repos/hook_fails/README +1 -0
  65. data/spec/fixtures/repos/hook_fails/deploy/before_migrate.rb +1 -0
  66. data/spec/fixtures/repos/hooks/README +1 -0
  67. data/spec/fixtures/repos/hooks/deploy/after_bundle.rb +1 -0
  68. data/spec/fixtures/repos/hooks/deploy/after_compile_assets.rb +1 -0
  69. data/spec/fixtures/repos/hooks/deploy/after_migrate.rb +1 -0
  70. data/spec/fixtures/repos/hooks/deploy/after_restart.rb +1 -0
  71. data/spec/fixtures/repos/hooks/deploy/after_symlink.rb +1 -0
  72. data/spec/fixtures/repos/hooks/deploy/before_bundle.rb +1 -0
  73. data/spec/fixtures/repos/hooks/deploy/before_compile_assets.rb +1 -0
  74. data/spec/fixtures/repos/hooks/deploy/before_migrate.rb +1 -0
  75. data/spec/fixtures/repos/hooks/deploy/before_restart.rb +1 -0
  76. data/spec/fixtures/repos/hooks/deploy/before_symlink.rb +1 -0
  77. data/spec/fixtures/repos/no_ey_config/Gemfile +4 -0
  78. data/spec/fixtures/repos/no_ey_config/Gemfile.lock +12 -0
  79. data/spec/fixtures/repos/no_ey_config/README +1 -0
  80. data/spec/fixtures/repos/no_gemfile_lock/Gemfile +5 -0
  81. data/spec/fixtures/repos/no_gemfile_lock/README +1 -0
  82. data/spec/fixtures/repos/nodejs/README +1 -0
  83. data/spec/fixtures/repos/nodejs/package.json +7 -0
  84. data/spec/fixtures/repos/not_bundled/README +1 -0
  85. data/spec/fixtures/{gemfiles/1.0.21-rails-31-with-sqlite → repos/sqlite3/Gemfile} +0 -0
  86. data/spec/fixtures/{lockfiles/1.0.21-rails-31-with-sqlite → repos/sqlite3/Gemfile.lock} +0 -0
  87. data/spec/fixtures/repos/sqlite3/README +1 -0
  88. data/spec/git_strategy_spec.rb +11 -2
  89. data/spec/lockfile_parser_spec.rb +8 -3
  90. data/spec/nodejs_deploy_spec.rb +1 -26
  91. data/spec/rails31_deploy_spec.rb +23 -31
  92. data/spec/services_deploy_spec.rb +41 -100
  93. data/spec/shell_spec.rb +50 -0
  94. data/spec/spec_helper.rb +80 -66
  95. data/spec/sqlite3_deploy_spec.rb +10 -16
  96. data/spec/support/integration.rb +45 -139
  97. metadata +233 -78
  98. data/lib/engineyard-serverside/logged_output.rb +0 -91
  99. data/spec/logged_output_spec.rb +0 -55
@@ -1,91 +0,0 @@
1
- require 'systemu'
2
-
3
- module EY
4
- module Serverside
5
- module LoggedOutput
6
-
7
- class Tee
8
- def initialize(*streams)
9
- @streams = streams.flatten
10
- end
11
-
12
- def <<(output)
13
- @streams.each do |s|
14
- s << output
15
- s.flush
16
- end
17
- self
18
- end
19
- end # Tee
20
-
21
- @@logfile = File.join(ENV['HOME'], 'ey.log')
22
- def self.logfile=(filename)
23
- File.unlink filename if File.exist?(filename) # start fresh
24
- @@logfile = filename
25
- end
26
-
27
- def self.logfile
28
- @@logfile
29
- end
30
-
31
- @@verbose = false
32
- def self.verbose=(v)
33
- @@verbose = !!v
34
- end
35
-
36
- def self.verbose?
37
- @@verbose
38
- end
39
-
40
- def verbose?
41
- EY::Serverside::LoggedOutput.verbose?
42
- end
43
-
44
- def warning(msg)
45
- info "WARNING: #{msg}\n".gsub(/^/,'!> ')
46
- end
47
-
48
- def info(msg)
49
- with_logfile do |log|
50
- Tee.new($stdout, log) << ("#{with_timestamp(msg)}\n")
51
- end
52
- end
53
-
54
- def debug(msg)
55
- with_logfile do |log|
56
- log << "#{with_timestamp(msg)}\n"
57
- end
58
- end
59
-
60
- def logged_system(cmd)
61
- with_logfile do |log|
62
- out = verbose? ? Tee.new($stdout, log) : log
63
- err = Tee.new($stderr, log) # we always want to see errors
64
-
65
- cmd = "sh -l -c #{Escape.shell_command([cmd])}"
66
- puts "running #{cmd}" if ENV['DEBUG']
67
- out << with_timestamp(":: running #{cmd}\n")
68
- status = systemu cmd, 'stdout' => out, 'stderr' => err
69
- puts "exit status= #{status.exitstatus}" if ENV['DEBUG']
70
- status.exitstatus == 0
71
- end
72
- end
73
-
74
- private
75
- def with_logfile
76
- File.open(logfile, 'a') {|f| yield f }
77
- end
78
-
79
- def logfile
80
- EY::Serverside::LoggedOutput.logfile
81
- end
82
-
83
- def with_timestamp(msg)
84
- return msg unless respond_to?(:starting_time)
85
- time_passed = Time.now.to_i - starting_time.to_i
86
- timestamp = "+%2dm %02ds " % time_passed.divmod(60)
87
- msg.gsub(/^/, timestamp)
88
- end
89
- end
90
- end
91
- end
@@ -1,55 +0,0 @@
1
- require 'spec_helper'
2
- require 'tempfile'
3
- require 'timecop'
4
-
5
- class SampleLogUser
6
- include EY::Serverside::LoggedOutput
7
- def initialize
8
- EY::Serverside::LoggedOutput.logfile = tempfile.path
9
- EY::Serverside::LoggedOutput.verbose = true
10
- end
11
-
12
- def starting_time
13
- @starting_time ||= Time.now
14
- end
15
-
16
- def tempfile
17
- @tempfile ||= Tempfile.new('logged_output')
18
- end
19
- end
20
-
21
- describe EY::Serverside::LoggedOutput do
22
- before do
23
- EY::Serverside::LoggedOutput.enable_actual_info!
24
- @log_user = SampleLogUser.new
25
- end
26
-
27
- after do
28
- EY::Serverside::LoggedOutput.disable_actual_info!
29
- end
30
-
31
- it "has a timestamp before each line" do
32
- time1 = Time.local(2008, 9, 1, 12, 0, 0)
33
- time2 = Time.local(2008, 9, 1, 12, 3, 5)
34
- time3 = Time.local(2008, 9, 1, 12, 10, 25)
35
-
36
- Timecop.freeze(time1) do
37
- @log_user.debug('test1')
38
- @log_user.warning('test2')
39
- end
40
- Timecop.freeze(time2) do
41
- @log_user.info('test3')
42
-
43
- @log_user.debug("test11\ntest12\ntest13")
44
- @log_user.warning("test21\ntest22\ntest23")
45
- end
46
- Timecop.freeze(time3) do
47
- @log_user.info("test31\ntest32\ntest33")
48
- end
49
-
50
- timestamp_1 = "+ 0m 00s "
51
- timestamp_2 = "+ 3m 05s "
52
- timestamp_3 = "+10m 25s "
53
- File.read(@log_user.tempfile.path).should == "#{timestamp_1}test1\n#{timestamp_1}!> WARNING: test2\n\n#{timestamp_2}test3\n#{timestamp_2}test11\n#{timestamp_2}test12\n#{timestamp_2}test13\n#{timestamp_2}!> WARNING: test21\n#{timestamp_2}!> test22\n#{timestamp_2}!> test23\n\n#{timestamp_3}test31\n#{timestamp_3}test32\n#{timestamp_3}test33\n"
54
- end
55
- end