engineyard 1.3.18 → 1.3.19
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/engineyard/api.rb +2 -2
- data/lib/engineyard/cli.rb +30 -6
- data/lib/engineyard/cli/ui.rb +32 -3
- data/lib/engineyard/collection/abstract.rb +3 -3
- data/lib/engineyard/error.rb +6 -6
- data/lib/engineyard/model/app.rb +4 -0
- data/lib/engineyard/model/deployment.rb +37 -11
- data/lib/engineyard/repo.rb +34 -13
- data/lib/engineyard/resolver.rb +2 -2
- data/lib/engineyard/thor.rb +2 -10
- data/lib/engineyard/version.rb +1 -1
- data/spec/engineyard/repo_spec.rb +29 -21
- data/spec/engineyard/resolver_spec.rb +3 -1
- data/spec/ey/status_spec.rb +22 -0
- data/spec/support/fake_awsm.ru +16 -0
- metadata +72 -70
data/lib/engineyard/api.rb
CHANGED
@@ -37,8 +37,8 @@ module EY
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def apps_for_repo(repo)
|
40
|
-
|
41
|
-
apps.find_all {|a| repo.
|
40
|
+
repo.fail_on_no_remotes!
|
41
|
+
apps.find_all {|a| repo.has_remote?(a.repository_uri) }
|
42
42
|
end
|
43
43
|
|
44
44
|
class InvalidCredentials < EY::Error; end
|
data/lib/engineyard/cli.rb
CHANGED
@@ -78,6 +78,27 @@ module EY
|
|
78
78
|
raise exists ? EnvironmentUnlinkedError.new(options[:environment]) : e
|
79
79
|
end
|
80
80
|
|
81
|
+
desc "status", "Show the deployment status of the app"
|
82
|
+
long_desc <<-DESC
|
83
|
+
Show the current status of most recent deployment of the specified
|
84
|
+
application and environment.
|
85
|
+
DESC
|
86
|
+
method_option :environment, :type => :string, :aliases => %w(-e),
|
87
|
+
:desc => "Environment where the application is deployed"
|
88
|
+
method_option :app, :type => :string, :aliases => %w(-a),
|
89
|
+
:desc => "Name of the application"
|
90
|
+
method_option :account, :type => :string, :aliases => %w(-c),
|
91
|
+
:desc => "Name of the account in which the application can be found"
|
92
|
+
def status
|
93
|
+
app, environment = fetch_app_and_environment(options[:app], options[:environment], options[:account])
|
94
|
+
deployment = app.last_deployment_on(environment)
|
95
|
+
if deployment
|
96
|
+
EY.ui.show_deployment(deployment)
|
97
|
+
else
|
98
|
+
raise EY::Error, "Application #{app.name} hass not been deployed on #{environment.name}."
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
81
102
|
desc "environments [--all]", "List environments for this app; use --all to list all environments."
|
82
103
|
long_desc <<-DESC
|
83
104
|
By default, environments for this app are displayed. The --all option will
|
@@ -89,18 +110,21 @@ module EY
|
|
89
110
|
def environments
|
90
111
|
if options[:all] && options[:simple]
|
91
112
|
# just put each env
|
92
|
-
api.environments.
|
93
|
-
|
94
|
-
|
113
|
+
puts api.environments.map {|env| env.name}
|
114
|
+
elsif options[:all]
|
115
|
+
EY.ui.print_envs(api.apps, EY.config.default_environment, options[:simple])
|
95
116
|
else
|
96
|
-
apps =
|
97
|
-
|
117
|
+
apps = api.apps_for_repo(repo)
|
118
|
+
|
119
|
+
if apps.size > 1
|
98
120
|
message = "This git repo matches multiple Applications in AppCloud:\n"
|
99
121
|
apps.each { |app| message << "\t#{app.name}\n" }
|
100
122
|
message << "The following environments contain those applications:\n\n"
|
101
123
|
EY.ui.warn(message)
|
124
|
+
elsif apps.empty?
|
125
|
+
EY.ui.warn(NoAppError.new(repo).message)
|
102
126
|
end
|
103
|
-
|
127
|
+
|
104
128
|
EY.ui.print_envs(apps, EY.config.default_environment, options[:simple])
|
105
129
|
end
|
106
130
|
end
|
data/lib/engineyard/cli/ui.rb
CHANGED
@@ -75,9 +75,7 @@ module EY
|
|
75
75
|
def print_envs(apps, default_env_name = nil, simple = false)
|
76
76
|
if simple
|
77
77
|
envs = apps.map{ |a| a.environments }
|
78
|
-
envs.flatten.map{|x| x.name}.uniq
|
79
|
-
puts env
|
80
|
-
end
|
78
|
+
puts envs.flatten.map{|x| x.name}.uniq
|
81
79
|
else
|
82
80
|
apps.each do |app|
|
83
81
|
puts "#{app.name} (#{app.account.name})"
|
@@ -101,6 +99,37 @@ module EY
|
|
101
99
|
end
|
102
100
|
end
|
103
101
|
|
102
|
+
def show_deployment(dep)
|
103
|
+
puts "# Status of last deployment of #{dep.app.account.name}/#{dep.app.name}/#{dep.environment.name}:"
|
104
|
+
puts "#"
|
105
|
+
|
106
|
+
output = []
|
107
|
+
output << ["Account", dep.app.account.name]
|
108
|
+
output << ["Application", dep.app.name]
|
109
|
+
output << ["Environment", dep.environment.name]
|
110
|
+
output << ["Input Ref", dep.ref]
|
111
|
+
output << ["Resolved Ref", dep.ref]
|
112
|
+
output << ["Commit", dep.commit || '(Unable to resolve)']
|
113
|
+
output << ["Migrate", dep.migrate]
|
114
|
+
output << ["Migrate command", dep.migrate_command] if dep.migrate
|
115
|
+
output << ["Deployed by", dep.user_name]
|
116
|
+
output << ["Created at", dep.created_at]
|
117
|
+
output << ["Finished at", dep.finished_at]
|
118
|
+
|
119
|
+
output.each do |att, val|
|
120
|
+
puts "# %-15s %s" % ["#{att}:", val.to_s]
|
121
|
+
end
|
122
|
+
puts "#"
|
123
|
+
|
124
|
+
if dep.successful?
|
125
|
+
info 'Deployment was successful.'
|
126
|
+
elsif dep.finished_at.nil?
|
127
|
+
warn 'Deployment is not finished.'
|
128
|
+
else
|
129
|
+
say_with_status('Deployment failed.', nil, :red)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
104
133
|
def print_exception(e)
|
105
134
|
if e.message.empty? || (e.message == e.class.to_s)
|
106
135
|
message = nil
|
@@ -4,9 +4,9 @@ module EY
|
|
4
4
|
module Collection
|
5
5
|
class Abstract < Array
|
6
6
|
COLLAB_MESSAGE = <<-MSG
|
7
|
-
\nThis error is due to having access to another account's resources via the
|
8
|
-
|
9
|
-
MSG
|
7
|
+
\nThis error is due to having access to another account's resources via the collaboration feature.
|
8
|
+
Specify --account ACCOUNT_NAME to resolve this ambiguity.
|
9
|
+
MSG
|
10
10
|
|
11
11
|
def named(name, account_name=nil)
|
12
12
|
candidates = find_all do |x|
|
data/lib/engineyard/error.rb
CHANGED
@@ -25,17 +25,17 @@ module EY
|
|
25
25
|
|
26
26
|
class NoAppError < Error
|
27
27
|
def initialize(repo)
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
28
|
+
super <<-ERROR
|
29
|
+
There is no application configured for any of the following remotes:
|
30
|
+
\t#{repo ? repo.urls.join("\n\t") : "No remotes found."}
|
31
|
+
You can add this application at #{EY.config.endpoint}
|
32
|
+
ERROR
|
32
33
|
end
|
33
34
|
end
|
34
35
|
|
35
36
|
class InvalidAppError < Error
|
36
37
|
def initialize(name)
|
37
|
-
|
38
|
-
super error
|
38
|
+
super %|There is no app configured with the name "#{name}"|
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
data/lib/engineyard/model/app.rb
CHANGED
@@ -2,7 +2,28 @@ require 'escape'
|
|
2
2
|
|
3
3
|
module EY
|
4
4
|
module Model
|
5
|
-
class Deployment < ApiStruct.new(:id, :app, :created_at, :commit, :environment, :finished_at, :migrate_command, :output, :ref, :resolved_ref, :successful)
|
5
|
+
class Deployment < ApiStruct.new(:id, :app, :created_at, :commit, :environment, :finished_at, :migrate_command, :output, :ref, :resolved_ref, :successful, :user_name)
|
6
|
+
def self.api_root(app_id, environment_id)
|
7
|
+
"/apps/#{app_id}/environments/#{environment_id}/deployments"
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.last(app, environment, api)
|
11
|
+
get(app, environment, 'last', api)
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.get(app, environment, id, api)
|
15
|
+
response = api.request(api_root(app.id, environment.id) + "/#{id}", :method => :get)
|
16
|
+
load_from_response app, environment, response
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.load_from_response(app, environment, response)
|
20
|
+
dep = new
|
21
|
+
dep.app = app
|
22
|
+
dep.environment = environment
|
23
|
+
dep.update_with_response(response)
|
24
|
+
dep
|
25
|
+
end
|
26
|
+
|
6
27
|
def self.started(environment, app, ref, migrate_command)
|
7
28
|
deployment = from_hash({
|
8
29
|
:app => app,
|
@@ -14,9 +35,15 @@ module EY
|
|
14
35
|
deployment
|
15
36
|
end
|
16
37
|
|
38
|
+
def migrate
|
39
|
+
!!migrate_command
|
40
|
+
end
|
41
|
+
|
42
|
+
alias successful? successful
|
43
|
+
|
17
44
|
def start
|
18
45
|
post_to_api({
|
19
|
-
:migrate =>
|
46
|
+
:migrate => migrate,
|
20
47
|
:migrate_command => migrate_command,
|
21
48
|
:output => output,
|
22
49
|
:ref => ref,
|
@@ -29,6 +56,12 @@ module EY
|
|
29
56
|
put_to_api({:successful => successful, :output => output})
|
30
57
|
end
|
31
58
|
|
59
|
+
def update_with_response(response)
|
60
|
+
response['deployment'].each do |key,val|
|
61
|
+
send("#{key}=", val) if respond_to?("#{key}=")
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
32
65
|
private
|
33
66
|
|
34
67
|
def post_to_api(params)
|
@@ -39,19 +72,12 @@ module EY
|
|
39
72
|
update_with_response api.request(member_uri("/finished"), :method => :put, :params => {:deployment => params})
|
40
73
|
end
|
41
74
|
|
42
|
-
def update_with_response(response)
|
43
|
-
data = response['deployment']
|
44
|
-
data.each do |key,val|
|
45
|
-
self.send("#{key}=", val) if respond_to?("#{key}=")
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
75
|
def collection_uri
|
50
|
-
|
76
|
+
self.class.api_root(app.id, environment.id)
|
51
77
|
end
|
52
78
|
|
53
79
|
def member_uri(path = nil)
|
54
|
-
"
|
80
|
+
collection_uri + "/#{id}#{path}"
|
55
81
|
end
|
56
82
|
|
57
83
|
def api
|
data/lib/engineyard/repo.rb
CHANGED
@@ -1,34 +1,55 @@
|
|
1
|
+
require 'engineyard/error'
|
1
2
|
require 'escape'
|
3
|
+
require 'pathname'
|
2
4
|
|
3
5
|
module EY
|
4
6
|
class Repo
|
5
7
|
|
6
8
|
attr_reader :path
|
7
9
|
|
8
|
-
def initialize(
|
9
|
-
|
10
|
+
def initialize(repo_path='.')
|
11
|
+
self.path = repo_path
|
10
12
|
end
|
11
13
|
|
12
|
-
def
|
13
|
-
|
14
|
+
def path=(new_path)
|
15
|
+
@path = Pathname.new(new_path).expand_path
|
16
|
+
end
|
17
|
+
|
18
|
+
def exist?
|
19
|
+
dotgit.directory?
|
14
20
|
end
|
15
21
|
|
16
22
|
def current_branch
|
17
|
-
if
|
18
|
-
head
|
19
|
-
if head.gsub!("ref: refs/heads/", "")
|
20
|
-
head
|
21
|
-
else
|
22
|
-
nil
|
23
|
-
end
|
23
|
+
if exist? && (head = dotgit("HEAD").read.chomp) && head.gsub!("ref: refs/heads/", "")
|
24
|
+
head
|
24
25
|
else
|
25
26
|
nil
|
26
27
|
end
|
27
28
|
end
|
28
29
|
|
29
30
|
def urls
|
30
|
-
|
31
|
-
|
31
|
+
@urls ||= config('remote.*.url').map { |c| c.split.last }
|
32
|
+
end
|
33
|
+
|
34
|
+
def has_remote?(repository_uri)
|
35
|
+
urls.include?(repository_uri)
|
36
|
+
end
|
37
|
+
|
38
|
+
def fail_on_no_remotes!
|
39
|
+
if urls.empty?
|
40
|
+
raise NoRemotesError.new(path)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def dotgit(child='')
|
47
|
+
path.join('.git', child)
|
48
|
+
end
|
49
|
+
|
50
|
+
def config(pattern)
|
51
|
+
config_file = Escape.shell_command([dotgit('config').to_s])
|
52
|
+
`git config -f #{config_file} --get-regexp '#{pattern}'`.split(/\n/)
|
32
53
|
end
|
33
54
|
|
34
55
|
end # Repo
|
data/lib/engineyard/resolver.rb
CHANGED
@@ -110,8 +110,8 @@ module EY
|
|
110
110
|
end
|
111
111
|
|
112
112
|
def filter_by_repo(candidates, repo)
|
113
|
-
results = candidates.select do |
|
114
|
-
repo.
|
113
|
+
results = candidates.select do |candidate|
|
114
|
+
repo.has_remote?(candidate[:repository_uri])
|
115
115
|
end
|
116
116
|
|
117
117
|
if results.empty?
|
data/lib/engineyard/thor.rb
CHANGED
@@ -17,7 +17,7 @@ module EY
|
|
17
17
|
:environment_name => environment_name,
|
18
18
|
:account_name => account_name
|
19
19
|
}
|
20
|
-
options.merge! :repo => repo if repo.
|
20
|
+
options.merge! :repo => repo if repo.exist?
|
21
21
|
api.resolver.environment(options)
|
22
22
|
end
|
23
23
|
|
@@ -27,18 +27,10 @@ module EY
|
|
27
27
|
:environment_name => environment_name,
|
28
28
|
:account_name => account_name
|
29
29
|
}
|
30
|
-
options.merge! :repo => repo if repo.
|
30
|
+
options.merge! :repo => repo if repo.exist?
|
31
31
|
api.resolver.app_and_environment(options)
|
32
32
|
end
|
33
33
|
|
34
|
-
def get_apps(all_apps = false)
|
35
|
-
if all_apps
|
36
|
-
api.apps
|
37
|
-
else
|
38
|
-
api.apps_for_repo(repo)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
34
|
end # UtilityMethods
|
43
35
|
|
44
36
|
class Thor < ::Thor
|
data/lib/engineyard/version.rb
CHANGED
@@ -2,9 +2,29 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe EY::Repo do
|
4
4
|
before(:all) do
|
5
|
-
|
5
|
+
FakeFS.deactivate!
|
6
|
+
@path = Pathname.new("/tmp/ey-test/.git/")
|
6
7
|
@r = EY::Repo.new("/tmp/ey-test")
|
7
8
|
end
|
9
|
+
after(:all) { FakeFS.activate! }
|
10
|
+
after(:each) { clear_urls }
|
11
|
+
|
12
|
+
def set_head(head)
|
13
|
+
@path.join("HEAD").open('w') {|f| f.write(head) }
|
14
|
+
end
|
15
|
+
|
16
|
+
def config_path
|
17
|
+
@path.join("config")
|
18
|
+
end
|
19
|
+
|
20
|
+
def set_url(url, remote)
|
21
|
+
system("mkdir -p #{@path} && cd #{@path} && git init -q")
|
22
|
+
system("git config -f #{config_path} remote.#{remote}.url #{url}")
|
23
|
+
end
|
24
|
+
|
25
|
+
def clear_urls
|
26
|
+
system("rm -rf #{config_path}")
|
27
|
+
end
|
8
28
|
|
9
29
|
describe "current_branch method" do
|
10
30
|
it "returns the name of the current branch" do
|
@@ -16,34 +36,22 @@ describe EY::Repo do
|
|
16
36
|
set_head "20bf478ab6a91ec5771130aa4c8cfd3d150c4146"
|
17
37
|
@r.current_branch.should be_nil
|
18
38
|
end
|
39
|
+
end # current_branch
|
19
40
|
|
20
|
-
|
21
|
-
|
41
|
+
describe "#fail_on_no_remotes!" do
|
42
|
+
it "raises when there are no remotes" do
|
43
|
+
lambda { @r.fail_on_no_remotes! }.should raise_error(EY::NoRemotesError)
|
22
44
|
end
|
23
|
-
end
|
45
|
+
end
|
24
46
|
|
25
|
-
describe "
|
47
|
+
describe "#has_remote?" do
|
26
48
|
it "returns the urls of the remotes" do
|
27
49
|
origin_url = "git://github.com/engineyard/engineyard.git"
|
28
50
|
other_url = "git@github.com:engineyard/engineyard.git"
|
29
51
|
set_url origin_url, "origin"
|
30
52
|
set_url other_url, "other"
|
31
|
-
@r.
|
32
|
-
@r.
|
33
|
-
end
|
34
|
-
|
35
|
-
def config_path
|
36
|
-
@path+"config"
|
37
|
-
end
|
38
|
-
|
39
|
-
# This has to all shell out because FakeFS is enabled
|
40
|
-
def set_url(url, remote)
|
41
|
-
system("mkdir -p #{@path} && cd #{@path} && git init -q")
|
42
|
-
system("git config -f #{config_path} remote.#{remote}.url #{url}")
|
43
|
-
end
|
44
|
-
|
45
|
-
def clear_urls
|
46
|
-
system("rm -rf #{config_path}")
|
53
|
+
@r.should be_has_remote(origin_url)
|
54
|
+
@r.should be_has_remote(other_url)
|
47
55
|
end
|
48
56
|
end # url
|
49
57
|
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "ey environments" do
|
4
|
+
|
5
|
+
given "integration"
|
6
|
+
|
7
|
+
before(:all) do
|
8
|
+
api_scenario "one app, many environments"
|
9
|
+
end
|
10
|
+
|
11
|
+
it "outputs the status of the deployment" do
|
12
|
+
ey %w[status -e giblets]
|
13
|
+
@out.should =~ /Application:\s+rails232app/
|
14
|
+
@out.should =~ /Environment:\s+giblets/
|
15
|
+
@out.should =~ /Ref:\s+HEAD/
|
16
|
+
@out.should =~ /Resolved Ref:\s+HEAD/
|
17
|
+
@out.should =~ /Deployed by:\s+User/
|
18
|
+
@out.should =~ /Created at:/
|
19
|
+
@out.should =~ /Finished at:/
|
20
|
+
@out.should =~ /Deployment was successful/
|
21
|
+
end
|
22
|
+
end
|
data/spec/support/fake_awsm.ru
CHANGED
@@ -100,6 +100,22 @@ class FakeAwsm < Sinatra::Base
|
|
100
100
|
""
|
101
101
|
end
|
102
102
|
|
103
|
+
get "/api/v2/apps/:app_id/environments/:environment_id/deployments/last" do
|
104
|
+
{
|
105
|
+
"deployment" => {
|
106
|
+
"id" => 3,
|
107
|
+
"ref" => "HEAD",
|
108
|
+
"resolved_ref" => "HEAD",
|
109
|
+
"commit" => 'a'*40,
|
110
|
+
"user_name" => "User",
|
111
|
+
"migrate_command" => "rake db:migrate --trace",
|
112
|
+
"created_at" => Time.now.utc - 3600,
|
113
|
+
"finished_at" => Time.now.utc - 3400,
|
114
|
+
"successful" => true,
|
115
|
+
}
|
116
|
+
}.to_json
|
117
|
+
end
|
118
|
+
|
103
119
|
post "/api/v2/apps/:app_id/environments/:environment_id/deployments" do
|
104
120
|
{"deployment" => params[:deployment].merge({"id" => 2, "commit" => 'a'*40, "resolved_ref" => "resolved-#{params[:deployment][:ref]}"})}.to_json
|
105
121
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: engineyard
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 61
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 1.3.
|
9
|
+
- 19
|
10
|
+
version: 1.3.19
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- EY Cloud Team
|
@@ -15,14 +15,11 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-05-
|
18
|
+
date: 2011-05-23 00:00:00 -07:00
|
19
19
|
default_executable: ey
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
-
|
23
|
-
prerelease: false
|
24
|
-
type: :runtime
|
25
|
-
version_requirements: &id001 !ruby/object:Gem::Requirement
|
22
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
26
23
|
none: false
|
27
24
|
requirements:
|
28
25
|
- - ~>
|
@@ -33,12 +30,12 @@ dependencies:
|
|
33
30
|
- 14
|
34
31
|
- 6
|
35
32
|
version: 0.14.6
|
36
|
-
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: rest-client
|
33
|
+
name: thor
|
39
34
|
prerelease: false
|
40
35
|
type: :runtime
|
41
|
-
version_requirements:
|
36
|
+
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
42
39
|
none: false
|
43
40
|
requirements:
|
44
41
|
- - ~>
|
@@ -49,12 +46,12 @@ dependencies:
|
|
49
46
|
- 6
|
50
47
|
- 0
|
51
48
|
version: 1.6.0
|
52
|
-
|
53
|
-
- !ruby/object:Gem::Dependency
|
54
|
-
name: highline
|
49
|
+
name: rest-client
|
55
50
|
prerelease: false
|
56
51
|
type: :runtime
|
57
|
-
version_requirements:
|
52
|
+
version_requirements: *id002
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
58
55
|
none: false
|
59
56
|
requirements:
|
60
57
|
- - ~>
|
@@ -65,12 +62,12 @@ dependencies:
|
|
65
62
|
- 6
|
66
63
|
- 1
|
67
64
|
version: 1.6.1
|
68
|
-
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: json_pure
|
65
|
+
name: highline
|
71
66
|
prerelease: false
|
72
67
|
type: :runtime
|
73
|
-
version_requirements:
|
68
|
+
version_requirements: *id003
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
74
71
|
none: false
|
75
72
|
requirements:
|
76
73
|
- - ">="
|
@@ -79,12 +76,12 @@ dependencies:
|
|
79
76
|
segments:
|
80
77
|
- 0
|
81
78
|
version: "0"
|
82
|
-
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: escape
|
79
|
+
name: json_pure
|
85
80
|
prerelease: false
|
86
81
|
type: :runtime
|
87
|
-
version_requirements:
|
82
|
+
version_requirements: *id004
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
88
85
|
none: false
|
89
86
|
requirements:
|
90
87
|
- - ~>
|
@@ -95,12 +92,12 @@ dependencies:
|
|
95
92
|
- 0
|
96
93
|
- 4
|
97
94
|
version: 0.0.4
|
98
|
-
|
99
|
-
- !ruby/object:Gem::Dependency
|
100
|
-
name: engineyard-serverside-adapter
|
95
|
+
name: escape
|
101
96
|
prerelease: false
|
102
97
|
type: :runtime
|
103
|
-
version_requirements:
|
98
|
+
version_requirements: *id005
|
99
|
+
- !ruby/object:Gem::Dependency
|
100
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
104
101
|
none: false
|
105
102
|
requirements:
|
106
103
|
- - "="
|
@@ -111,12 +108,12 @@ dependencies:
|
|
111
108
|
- 4
|
112
109
|
- 1
|
113
110
|
version: 1.4.1
|
114
|
-
|
115
|
-
- !ruby/object:Gem::Dependency
|
116
|
-
name: net-ssh
|
111
|
+
name: engineyard-serverside-adapter
|
117
112
|
prerelease: false
|
118
113
|
type: :runtime
|
119
|
-
version_requirements:
|
114
|
+
version_requirements: *id006
|
115
|
+
- !ruby/object:Gem::Dependency
|
116
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
120
117
|
none: false
|
121
118
|
requirements:
|
122
119
|
- - ~>
|
@@ -127,12 +124,12 @@ dependencies:
|
|
127
124
|
- 1
|
128
125
|
- 0
|
129
126
|
version: 2.1.0
|
130
|
-
|
131
|
-
- !ruby/object:Gem::Dependency
|
132
|
-
name: rspec
|
127
|
+
name: net-ssh
|
133
128
|
prerelease: false
|
134
|
-
type: :
|
135
|
-
version_requirements:
|
129
|
+
type: :runtime
|
130
|
+
version_requirements: *id007
|
131
|
+
- !ruby/object:Gem::Dependency
|
132
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
136
133
|
none: false
|
137
134
|
requirements:
|
138
135
|
- - "="
|
@@ -143,12 +140,12 @@ dependencies:
|
|
143
140
|
- 3
|
144
141
|
- 0
|
145
142
|
version: 1.3.0
|
146
|
-
|
147
|
-
- !ruby/object:Gem::Dependency
|
148
|
-
name: rake
|
143
|
+
name: rspec
|
149
144
|
prerelease: false
|
150
145
|
type: :development
|
151
|
-
version_requirements:
|
146
|
+
version_requirements: *id008
|
147
|
+
- !ruby/object:Gem::Dependency
|
148
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
152
149
|
none: false
|
153
150
|
requirements:
|
154
151
|
- - ">="
|
@@ -157,12 +154,12 @@ dependencies:
|
|
157
154
|
segments:
|
158
155
|
- 0
|
159
156
|
version: "0"
|
160
|
-
|
161
|
-
- !ruby/object:Gem::Dependency
|
162
|
-
name: fakeweb
|
157
|
+
name: rake
|
163
158
|
prerelease: false
|
164
159
|
type: :development
|
165
|
-
version_requirements:
|
160
|
+
version_requirements: *id009
|
161
|
+
- !ruby/object:Gem::Dependency
|
162
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
166
163
|
none: false
|
167
164
|
requirements:
|
168
165
|
- - ">="
|
@@ -171,12 +168,12 @@ dependencies:
|
|
171
168
|
segments:
|
172
169
|
- 0
|
173
170
|
version: "0"
|
174
|
-
|
175
|
-
- !ruby/object:Gem::Dependency
|
176
|
-
name: fakeweb-matcher
|
171
|
+
name: fakeweb
|
177
172
|
prerelease: false
|
178
173
|
type: :development
|
179
|
-
version_requirements:
|
174
|
+
version_requirements: *id010
|
175
|
+
- !ruby/object:Gem::Dependency
|
176
|
+
requirement: &id011 !ruby/object:Gem::Requirement
|
180
177
|
none: false
|
181
178
|
requirements:
|
182
179
|
- - ">="
|
@@ -185,12 +182,12 @@ dependencies:
|
|
185
182
|
segments:
|
186
183
|
- 0
|
187
184
|
version: "0"
|
188
|
-
|
189
|
-
- !ruby/object:Gem::Dependency
|
190
|
-
name: fakefs
|
185
|
+
name: fakeweb-matcher
|
191
186
|
prerelease: false
|
192
187
|
type: :development
|
193
|
-
version_requirements:
|
188
|
+
version_requirements: *id011
|
189
|
+
- !ruby/object:Gem::Dependency
|
190
|
+
requirement: &id012 !ruby/object:Gem::Requirement
|
194
191
|
none: false
|
195
192
|
requirements:
|
196
193
|
- - ">="
|
@@ -199,12 +196,12 @@ dependencies:
|
|
199
196
|
segments:
|
200
197
|
- 0
|
201
198
|
version: "0"
|
202
|
-
|
203
|
-
- !ruby/object:Gem::Dependency
|
204
|
-
name: bundler
|
199
|
+
name: fakefs
|
205
200
|
prerelease: false
|
206
201
|
type: :development
|
207
|
-
version_requirements:
|
202
|
+
version_requirements: *id012
|
203
|
+
- !ruby/object:Gem::Dependency
|
204
|
+
requirement: &id013 !ruby/object:Gem::Requirement
|
208
205
|
none: false
|
209
206
|
requirements:
|
210
207
|
- - ~>
|
@@ -215,12 +212,12 @@ dependencies:
|
|
215
212
|
- 0
|
216
213
|
- 0
|
217
214
|
version: 1.0.0
|
218
|
-
|
219
|
-
- !ruby/object:Gem::Dependency
|
220
|
-
name: sinatra
|
215
|
+
name: bundler
|
221
216
|
prerelease: false
|
222
217
|
type: :development
|
223
|
-
version_requirements:
|
218
|
+
version_requirements: *id013
|
219
|
+
- !ruby/object:Gem::Dependency
|
220
|
+
requirement: &id014 !ruby/object:Gem::Requirement
|
224
221
|
none: false
|
225
222
|
requirements:
|
226
223
|
- - ">="
|
@@ -229,12 +226,12 @@ dependencies:
|
|
229
226
|
segments:
|
230
227
|
- 0
|
231
228
|
version: "0"
|
232
|
-
|
233
|
-
- !ruby/object:Gem::Dependency
|
234
|
-
name: realweb
|
229
|
+
name: sinatra
|
235
230
|
prerelease: false
|
236
231
|
type: :development
|
237
|
-
version_requirements:
|
232
|
+
version_requirements: *id014
|
233
|
+
- !ruby/object:Gem::Dependency
|
234
|
+
requirement: &id015 !ruby/object:Gem::Requirement
|
238
235
|
none: false
|
239
236
|
requirements:
|
240
237
|
- - ~>
|
@@ -245,12 +242,12 @@ dependencies:
|
|
245
242
|
- 1
|
246
243
|
- 6
|
247
244
|
version: 0.1.6
|
248
|
-
|
249
|
-
- !ruby/object:Gem::Dependency
|
250
|
-
name: open4
|
245
|
+
name: realweb
|
251
246
|
prerelease: false
|
252
247
|
type: :development
|
253
|
-
version_requirements:
|
248
|
+
version_requirements: *id015
|
249
|
+
- !ruby/object:Gem::Dependency
|
250
|
+
requirement: &id016 !ruby/object:Gem::Requirement
|
254
251
|
none: false
|
255
252
|
requirements:
|
256
253
|
- - ~>
|
@@ -261,7 +258,10 @@ dependencies:
|
|
261
258
|
- 0
|
262
259
|
- 1
|
263
260
|
version: 1.0.1
|
264
|
-
|
261
|
+
name: open4
|
262
|
+
prerelease: false
|
263
|
+
type: :development
|
264
|
+
version_requirements: *id016
|
265
265
|
description: This gem allows you to deploy your rails application to the Engine Yard cloud directly from the command line.
|
266
266
|
email: cloud@engineyard.com
|
267
267
|
executables:
|
@@ -322,6 +322,7 @@ files:
|
|
322
322
|
- spec/ey/recipes/upload_spec.rb
|
323
323
|
- spec/ey/rollback_spec.rb
|
324
324
|
- spec/ey/ssh_spec.rb
|
325
|
+
- spec/ey/status_spec.rb
|
325
326
|
- spec/ey/web/disable_spec.rb
|
326
327
|
- spec/ey/web/enable_spec.rb
|
327
328
|
- spec/spec_helper.rb
|
@@ -402,6 +403,7 @@ test_files:
|
|
402
403
|
- spec/ey/recipes/upload_spec.rb
|
403
404
|
- spec/ey/rollback_spec.rb
|
404
405
|
- spec/ey/ssh_spec.rb
|
406
|
+
- spec/ey/status_spec.rb
|
405
407
|
- spec/ey/web/disable_spec.rb
|
406
408
|
- spec/ey/web/enable_spec.rb
|
407
409
|
- spec/spec_helper.rb
|