engineyard-serverside 2.1.0.rc1 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/engineyard-serverside/configuration.rb +1 -0
- data/lib/engineyard-serverside/dependency_manager.rb +2 -0
- data/lib/engineyard-serverside/dependency_manager/composer.rb +41 -0
- data/lib/engineyard-serverside/deploy.rb +2 -2
- data/lib/engineyard-serverside/paths.rb +2 -0
- data/lib/engineyard-serverside/task.rb +9 -3
- data/lib/engineyard-serverside/version.rb +1 -1
- data/spec/custom_deploy_spec.rb +46 -32
- data/spec/fixtures/repos/php_composer_lock/README +1 -0
- data/spec/fixtures/repos/php_composer_lock/composer.json +5 -0
- data/spec/fixtures/repos/php_composer_lock/composer.lock +462 -0
- data/spec/fixtures/repos/php_composer_lock/public/index.php +4 -0
- data/spec/fixtures/repos/php_no_composer_lock/README +1 -0
- data/spec/fixtures/repos/php_no_composer_lock/composer.json +21 -0
- data/spec/fixtures/repos/php_no_composer_lock/public/index.php +4 -0
- data/spec/php_deploy_spec.rb +59 -0
- data/spec/spec_helper.rb +7 -0
- metadata +45 -30
@@ -78,6 +78,7 @@ module EY
|
|
78
78
|
def_boolean_option :verbose, false
|
79
79
|
def_boolean_option :precompile_unchanged_assets, false
|
80
80
|
def_boolean_option :ignore_database_adapter_warning, false
|
81
|
+
def_boolean_option :eydeploy_rb, true
|
81
82
|
def_boolean_option :maintenance_on_migrate, true
|
82
83
|
def_boolean_option(:maintenance_on_restart) { required_downtime_stack? }
|
83
84
|
|
@@ -2,6 +2,7 @@ require 'engineyard-serverside/dependency_manager/base'
|
|
2
2
|
require 'engineyard-serverside/dependency_manager/bundler'
|
3
3
|
require 'engineyard-serverside/dependency_manager/bundler_lock'
|
4
4
|
require 'engineyard-serverside/dependency_manager/npm'
|
5
|
+
require 'engineyard-serverside/dependency_manager/composer'
|
5
6
|
|
6
7
|
module EY
|
7
8
|
module Serverside
|
@@ -10,6 +11,7 @@ module EY
|
|
10
11
|
Bundler.detect(servers, config, shell, runner) ||
|
11
12
|
BundlerLock.detect(servers, config, shell, runner) ||
|
12
13
|
Npm.detect(servers, config, shell, runner) ||
|
14
|
+
Composer.detect(servers, config, shell, runner) ||
|
13
15
|
Base.new(servers, config, shell, runner)
|
14
16
|
end
|
15
17
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module EY
|
2
|
+
module Serverside
|
3
|
+
module DependencyManager
|
4
|
+
class Composer < Base
|
5
|
+
def detected?
|
6
|
+
composer_lock? || composer_json?
|
7
|
+
end
|
8
|
+
|
9
|
+
def install
|
10
|
+
if composer_available?
|
11
|
+
shell.status "Installing composer packages (composer.#{lock_or_json} detected)"
|
12
|
+
run "composer install --no-interaction --working-dir #{paths.active_release}"
|
13
|
+
else
|
14
|
+
shell.warning "composer.#{lock_or_json} detected but composer not available."
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def lock_or_json
|
19
|
+
composer_lock? ? 'lock' : 'json'
|
20
|
+
end
|
21
|
+
|
22
|
+
def composer_lock?
|
23
|
+
paths.composer_lock.exist?
|
24
|
+
end
|
25
|
+
|
26
|
+
def composer_json?
|
27
|
+
paths.composer_json.exist?
|
28
|
+
end
|
29
|
+
|
30
|
+
def composer_available?
|
31
|
+
begin
|
32
|
+
run "command -v composer > /dev/null"
|
33
|
+
return true
|
34
|
+
rescue EY::Serverside::RemoteFailure
|
35
|
+
return false
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -20,8 +20,8 @@ module EY
|
|
20
20
|
|
21
21
|
def cached_deploy
|
22
22
|
shell.status "Deploying app from cached copy at #{Time.now.asctime}"
|
23
|
-
require_custom_tasks
|
24
23
|
load_ey_yml
|
24
|
+
require_custom_tasks
|
25
25
|
push_code
|
26
26
|
|
27
27
|
shell.status "Starting full deploy"
|
@@ -81,8 +81,8 @@ module EY
|
|
81
81
|
end
|
82
82
|
|
83
83
|
def restart_with_maintenance_page
|
84
|
-
require_custom_tasks
|
85
84
|
load_ey_yml
|
85
|
+
require_custom_tasks
|
86
86
|
enable_maintenance_page
|
87
87
|
restart
|
88
88
|
disable_maintenance_page
|
@@ -82,6 +82,8 @@ module EY
|
|
82
82
|
def_path :public_assets, [:public, 'assets']
|
83
83
|
def_path :public_system, [:public, 'system']
|
84
84
|
def_path :package_json, [:active_release, 'package.json']
|
85
|
+
def_path :composer_json, [:active_release, 'composer.json']
|
86
|
+
def_path :composer_lock, [:active_release, 'composer.lock']
|
85
87
|
def_path :active_release_config, [:active_release, 'config']
|
86
88
|
def_path :active_log, [:active_release, 'log']
|
87
89
|
|
@@ -24,6 +24,8 @@ module EY
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def require_custom_tasks
|
27
|
+
return unless config.eydeploy_rb?
|
28
|
+
|
27
29
|
deploy_file = ["config/eydeploy.rb", "eydeploy.rb"].map do |short_file|
|
28
30
|
paths.repository_cache.join(short_file)
|
29
31
|
end.detect do |file|
|
@@ -31,12 +33,16 @@ module EY
|
|
31
33
|
end
|
32
34
|
|
33
35
|
if deploy_file
|
34
|
-
shell.
|
36
|
+
shell.notice <<-NOTICE
|
37
|
+
NOTICE: Loading deployment task overrides from #{deploy_file}
|
38
|
+
Please consider:
|
39
|
+
* eydeploy.rb files can drastically alter the behavior of deployments.
|
40
|
+
* Internal deployment code may change under this file without warning.
|
41
|
+
NOTICE
|
35
42
|
begin
|
36
43
|
instance_eval(deploy_file.read)
|
37
44
|
rescue Exception => e
|
38
|
-
shell.fatal "Exception while loading #{deploy_file}"
|
39
|
-
shell.fatal [e.to_s, e.backtrace].join("\n")
|
45
|
+
shell.fatal ["Exception while loading #{deploy_file}", e.to_s, e.backtrace].join("\n")
|
40
46
|
raise
|
41
47
|
end
|
42
48
|
end
|
data/spec/custom_deploy_spec.rb
CHANGED
@@ -77,51 +77,65 @@ describe "the EY::Serverside::Deploy API" do
|
|
77
77
|
|
78
78
|
describe "task overrides" do
|
79
79
|
before(:each) do
|
80
|
-
@tempdir = `mktemp -d -t custom_deploy_spec.XXXXX`.strip
|
81
|
-
@config = EY::Serverside::Deploy::Configuration.new('app' => 'app_name', 'repository_cache' => @tempdir)
|
82
|
-
@deploy = FullTestDeploy.realnew(test_servers, @config, test_shell)
|
80
|
+
@tempdir = Pathname.new(`mktemp -d -t custom_deploy_spec.XXXXX`.strip)
|
83
81
|
end
|
84
82
|
|
85
83
|
def write_eydeploy(relative_path, contents = "def got_new_methods() 'from the file on disk' end")
|
86
|
-
|
87
|
-
|
88
|
-
|
84
|
+
path = @tempdir.join(relative_path)
|
85
|
+
path.dirname.mkpath
|
86
|
+
path.open('w') { |f| f << contents }
|
87
|
+
end
|
89
88
|
|
90
|
-
|
91
|
-
|
89
|
+
describe "eydeploy_rb disabled" do
|
90
|
+
before do
|
91
|
+
@config = EY::Serverside::Deploy::Configuration.new('app' => 'app_name', 'repository_cache' => @tempdir.to_s, 'eydeploy_rb' => 'false')
|
92
|
+
@deploy = FullTestDeploy.realnew(test_servers, @config, test_shell)
|
92
93
|
end
|
93
|
-
end
|
94
94
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
95
|
+
it "doesn't load eydeploy_rb file" do
|
96
|
+
write_eydeploy 'eydeploy.rb'
|
97
|
+
@deploy.require_custom_tasks
|
98
|
+
@deploy.should_not respond_to(:got_new_methods)
|
99
|
+
end
|
99
100
|
end
|
100
101
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
102
|
+
describe "eydeploy_rb detect or enabled" do
|
103
|
+
before do
|
104
|
+
@config = EY::Serverside::Deploy::Configuration.new('app' => 'app_name', 'repository_cache' => @tempdir.to_s, 'eydeploy_rb' => 'true')
|
105
|
+
@deploy = FullTestDeploy.realnew(test_servers, @config, test_shell)
|
106
|
+
end
|
106
107
|
|
107
|
-
|
108
|
-
|
108
|
+
it "requires 'eydeploy.rb' and adds any defined methods to the deploy" do
|
109
|
+
write_eydeploy 'eydeploy.rb'
|
110
|
+
@deploy.require_custom_tasks
|
111
|
+
@deploy.got_new_methods.should == 'from the file on disk'
|
112
|
+
end
|
109
113
|
|
110
|
-
|
111
|
-
|
114
|
+
it "falls back to 'config/eydeploy.rb'" do
|
115
|
+
write_eydeploy 'config/eydeploy.rb'
|
116
|
+
@deploy.require_custom_tasks
|
117
|
+
@deploy.got_new_methods.should == 'from the file on disk'
|
112
118
|
end
|
113
119
|
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
120
|
+
it "lets you super up from any defined methods" do
|
121
|
+
write_eydeploy 'eydeploy.rb', "def value() super << ' + derived' end"
|
122
|
+
|
123
|
+
class TestDeploySuper < FullTestDeploy
|
124
|
+
def value() 'base' end
|
125
|
+
end
|
118
126
|
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
127
|
+
deploy = TestDeploySuper.realnew(test_servers, @config, test_shell)
|
128
|
+
deploy.require_custom_tasks
|
129
|
+
deploy.value.should == "base + derived"
|
130
|
+
end
|
131
|
+
|
132
|
+
it "records exceptions raised from the instance eval in the log" do
|
133
|
+
write_eydeploy 'eydeploy.rb', "raise 'Imma blow up'"
|
134
|
+
lambda { @deploy.require_custom_tasks }.should raise_error
|
135
|
+
log = @log_path.read
|
136
|
+
log.should =~ /Exception while loading .*eydeploy\.rb/
|
137
|
+
log.should include('Imma blow up')
|
138
|
+
end
|
125
139
|
end
|
126
140
|
end
|
127
141
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
Simple PHP Composer app.
|
@@ -0,0 +1,462 @@
|
|
1
|
+
{
|
2
|
+
"hash": "6481f6a258c344122ba0157d5eadc0fd",
|
3
|
+
"packages": [
|
4
|
+
{
|
5
|
+
"name": "bjyoungblood/bjy-authorize",
|
6
|
+
"version": "1.2.6",
|
7
|
+
"source": {
|
8
|
+
"type": "git",
|
9
|
+
"url": "https://github.com/bjyoungblood/BjyAuthorize.git",
|
10
|
+
"reference": "1.2.6"
|
11
|
+
},
|
12
|
+
"dist": {
|
13
|
+
"type": "zip",
|
14
|
+
"url": "https://api.github.com/repos/bjyoungblood/BjyAuthorize/zipball/1.2.6",
|
15
|
+
"reference": "1.2.6",
|
16
|
+
"shasum": ""
|
17
|
+
},
|
18
|
+
"require": {
|
19
|
+
"php": ">=5.3.3",
|
20
|
+
"zendframework/zend-permissions-acl": ">=2.1,<3.0",
|
21
|
+
"zendframework/zend-mvc": ">=2.1,<3.0",
|
22
|
+
"zendframework/zend-eventmanager": ">=2.1,<3.0",
|
23
|
+
"zendframework/zend-servicemanager": ">=2.1,<3.0",
|
24
|
+
"zendframework/zend-view": ">=2.1,<3.0"
|
25
|
+
},
|
26
|
+
"require-dev": {
|
27
|
+
"doctrine/common": ">=2.3,<2.5-dev",
|
28
|
+
"zendframework/zend-developer-tools": "0.*",
|
29
|
+
"zf-commons/zfc-user": "0.*"
|
30
|
+
},
|
31
|
+
"time": "2013-05-12 16:07:25",
|
32
|
+
"type": "library",
|
33
|
+
"extra": {
|
34
|
+
"branch-alias": {
|
35
|
+
"dev-master": "1.3-dev"
|
36
|
+
}
|
37
|
+
},
|
38
|
+
"installation-source": "dist",
|
39
|
+
"autoload": {
|
40
|
+
"psr-0": {
|
41
|
+
"BjyAuthorize\\": "src/"
|
42
|
+
}
|
43
|
+
},
|
44
|
+
"license": [
|
45
|
+
"BSD-3-Clause"
|
46
|
+
],
|
47
|
+
"authors": [
|
48
|
+
{
|
49
|
+
"name": "Marco Pivetta",
|
50
|
+
"email": "ocramius@gmail.com",
|
51
|
+
"homepage": "http://ocramius.github.com/",
|
52
|
+
"role": "Developer"
|
53
|
+
},
|
54
|
+
{
|
55
|
+
"name": "Ben Youngblood",
|
56
|
+
"email": "bx.youngblood@gmail.com",
|
57
|
+
"homepage": "http://bjyoungblood.com/",
|
58
|
+
"role": "Developer"
|
59
|
+
}
|
60
|
+
],
|
61
|
+
"description": "Zend\\Acl based firewall system for ZF2 dispatch protection",
|
62
|
+
"homepage": "https://github.com/bjyoungblood/BjyAuthorize",
|
63
|
+
"keywords": [
|
64
|
+
"zf2",
|
65
|
+
"acl",
|
66
|
+
"zfc-user"
|
67
|
+
]
|
68
|
+
},
|
69
|
+
{
|
70
|
+
"name": "bjyoungblood/bjy-profiler",
|
71
|
+
"version": "dev-master",
|
72
|
+
"source": {
|
73
|
+
"type": "git",
|
74
|
+
"url": "https://github.com/bjyoungblood/BjyProfiler.git",
|
75
|
+
"reference": "1ca31611b6960bcd744dced95764e3627e8d807a"
|
76
|
+
},
|
77
|
+
"dist": {
|
78
|
+
"type": "zip",
|
79
|
+
"url": "https://api.github.com/repos/bjyoungblood/BjyProfiler/zipball/1ca31611b6960bcd744dced95764e3627e8d807a",
|
80
|
+
"reference": "1ca31611b6960bcd744dced95764e3627e8d807a",
|
81
|
+
"shasum": ""
|
82
|
+
},
|
83
|
+
"require": {
|
84
|
+
"php": ">=5.3",
|
85
|
+
"zendframework/zendframework": ">=2.1.0"
|
86
|
+
},
|
87
|
+
"time": "1364225067",
|
88
|
+
"type": "library",
|
89
|
+
"installation-source": "source",
|
90
|
+
"autoload": {
|
91
|
+
"psr-0": {
|
92
|
+
"BjyProfiler": "src/"
|
93
|
+
},
|
94
|
+
"classmap": [
|
95
|
+
"./Module.php"
|
96
|
+
]
|
97
|
+
},
|
98
|
+
"authors": [
|
99
|
+
{
|
100
|
+
"name": "Ben Youngblood",
|
101
|
+
"email": "bx.youngblood@gmail.com",
|
102
|
+
"homepage": "http://bjyoungblood.com/",
|
103
|
+
"role": "Developer"
|
104
|
+
}
|
105
|
+
],
|
106
|
+
"description": "Database profiler for Zend\\Db (also plugin for ZendDeveloperTools)",
|
107
|
+
"homepage": "https://github.com/bjyoungblood/BjyProfiler",
|
108
|
+
"keywords": [
|
109
|
+
"db",
|
110
|
+
"zf2",
|
111
|
+
"profiler",
|
112
|
+
"zdt"
|
113
|
+
]
|
114
|
+
},
|
115
|
+
{
|
116
|
+
"name": "darkmatus/roleuserbridge",
|
117
|
+
"version": "dev-master",
|
118
|
+
"source": {
|
119
|
+
"type": "git",
|
120
|
+
"url": "https://github.com/dshafik/roleuserbridge",
|
121
|
+
"reference": "9f70ef6f24e75c6592f769bd0cd598f135108f48"
|
122
|
+
},
|
123
|
+
"dist": {
|
124
|
+
"type": "zip",
|
125
|
+
"url": "https://github.com/dshafik/roleuserbridge/zipball/9f70ef6f24e75c6592f769bd0cd598f135108f48",
|
126
|
+
"reference": "9f70ef6f24e75c6592f769bd0cd598f135108f48",
|
127
|
+
"shasum": ""
|
128
|
+
},
|
129
|
+
"require": {
|
130
|
+
"php": ">=5.3.3",
|
131
|
+
"zendframework/zendframework": "2.*",
|
132
|
+
"zf-commons/zfc-base": "0.1.*",
|
133
|
+
"zf-commons/zfc-user": "0.1.*",
|
134
|
+
"bjyoungblood/bjy-authorize": "1.2.*"
|
135
|
+
},
|
136
|
+
"time": "1365313580",
|
137
|
+
"type": "library",
|
138
|
+
"installation-source": "source",
|
139
|
+
"autoload": {
|
140
|
+
"psr-0": {
|
141
|
+
"RoleUserBridge": "src/"
|
142
|
+
},
|
143
|
+
"classmap": [
|
144
|
+
"./"
|
145
|
+
]
|
146
|
+
},
|
147
|
+
"authors": [
|
148
|
+
{
|
149
|
+
"name": "Darkmatus",
|
150
|
+
"email": "mueller@s-p-it.de",
|
151
|
+
"homepage": "https://github.com/darkmatus/"
|
152
|
+
}
|
153
|
+
],
|
154
|
+
"description": "ZfcUser/BjyAuthorize Bridge for auto-adding User to the user_role_table from BjyAuthorize.",
|
155
|
+
"homepage": "https://github.com/darkmatus/roleuserbridge",
|
156
|
+
"keywords": [
|
157
|
+
"zf2"
|
158
|
+
],
|
159
|
+
"support": {
|
160
|
+
"source": "https://github.com/dshafik/roleuserbridge/tree/master"
|
161
|
+
}
|
162
|
+
},
|
163
|
+
{
|
164
|
+
"name": "zendframework/zend-developer-tools",
|
165
|
+
"version": "dev-master",
|
166
|
+
"source": {
|
167
|
+
"type": "git",
|
168
|
+
"url": "https://github.com/zendframework/ZendDeveloperTools",
|
169
|
+
"reference": "9e2cf51ffbd3778f07be4a245e6b7a84a6a18a1c"
|
170
|
+
},
|
171
|
+
"dist": {
|
172
|
+
"type": "zip",
|
173
|
+
"url": "https://github.com/zendframework/ZendDeveloperTools/zipball/9e2cf51ffbd3778f07be4a245e6b7a84a6a18a1c",
|
174
|
+
"reference": "9e2cf51ffbd3778f07be4a245e6b7a84a6a18a1c",
|
175
|
+
"shasum": ""
|
176
|
+
},
|
177
|
+
"require": {
|
178
|
+
"php": ">=5.3.3",
|
179
|
+
"zendframework/zend-mvc": "2.*",
|
180
|
+
"zendframework/zend-eventmanager": "2.*",
|
181
|
+
"zendframework/zend-stdlib": "2.*",
|
182
|
+
"zendframework/zend-servicemanager": "2.*",
|
183
|
+
"zendframework/zend-version": "2.*"
|
184
|
+
},
|
185
|
+
"suggest": {
|
186
|
+
"bjyoungblood/bjy-profiler": "Version: dev-master, allows the usage of the (Zend) Db collector."
|
187
|
+
},
|
188
|
+
"time": "1368974025",
|
189
|
+
"type": "zf-module",
|
190
|
+
"installation-source": "source",
|
191
|
+
"autoload": {
|
192
|
+
"psr-0": {
|
193
|
+
"ZendDeveloperTools": "src/"
|
194
|
+
},
|
195
|
+
"classmap": [
|
196
|
+
"./Module.php"
|
197
|
+
]
|
198
|
+
},
|
199
|
+
"license": [
|
200
|
+
"BSD-3-Clause"
|
201
|
+
],
|
202
|
+
"authors": [
|
203
|
+
{
|
204
|
+
"name": "Evan Coury",
|
205
|
+
"email": "me@evancoury.com",
|
206
|
+
"homepage": "http://blog.evan.pro/"
|
207
|
+
},
|
208
|
+
{
|
209
|
+
"name": "Eric Boh",
|
210
|
+
"email": "cossish@gmail.com"
|
211
|
+
}
|
212
|
+
],
|
213
|
+
"description": "Module for developer and debug tools for working with the ZF2 MVC layer.",
|
214
|
+
"homepage": "https://github.com/zendframework/ZendDeveloperTools",
|
215
|
+
"keywords": [
|
216
|
+
"debug",
|
217
|
+
"developer",
|
218
|
+
"zf2",
|
219
|
+
"module"
|
220
|
+
],
|
221
|
+
"support": {
|
222
|
+
"source": "https://github.com/zendframework/ZendDeveloperTools/tree/master",
|
223
|
+
"issues": "https://github.com/zendframework/ZendDeveloperTools/issues"
|
224
|
+
}
|
225
|
+
},
|
226
|
+
{
|
227
|
+
"name": "zendframework/zendframework",
|
228
|
+
"version": "2.1.5",
|
229
|
+
"source": {
|
230
|
+
"type": "git",
|
231
|
+
"url": "https://github.com/zendframework/zf2.git",
|
232
|
+
"reference": "release-2.1.5"
|
233
|
+
},
|
234
|
+
"dist": {
|
235
|
+
"type": "zip",
|
236
|
+
"url": "https://api.github.com/repos/zendframework/zf2/zipball/release-2.1.5",
|
237
|
+
"reference": "release-2.1.5",
|
238
|
+
"shasum": ""
|
239
|
+
},
|
240
|
+
"require": {
|
241
|
+
"php": ">=5.3.3"
|
242
|
+
},
|
243
|
+
"replace": {
|
244
|
+
"zendframework/zend-authentication": "self.version",
|
245
|
+
"zendframework/zend-barcode": "self.version",
|
246
|
+
"zendframework/zend-cache": "self.version",
|
247
|
+
"zendframework/zend-captcha": "self.version",
|
248
|
+
"zendframework/zend-code": "self.version",
|
249
|
+
"zendframework/zend-config": "self.version",
|
250
|
+
"zendframework/zend-console": "self.version",
|
251
|
+
"zendframework/zend-crypt": "self.version",
|
252
|
+
"zendframework/zend-db": "self.version",
|
253
|
+
"zendframework/zend-debug": "self.version",
|
254
|
+
"zendframework/zend-di": "self.version",
|
255
|
+
"zendframework/zend-dom": "self.version",
|
256
|
+
"zendframework/zend-escaper": "self.version",
|
257
|
+
"zendframework/zend-eventmanager": "self.version",
|
258
|
+
"zendframework/zend-feed": "self.version",
|
259
|
+
"zendframework/zend-file": "self.version",
|
260
|
+
"zendframework/zend-filter": "self.version",
|
261
|
+
"zendframework/zend-form": "self.version",
|
262
|
+
"zendframework/zend-http": "self.version",
|
263
|
+
"zendframework/zend-i18n": "self.version",
|
264
|
+
"zendframework/zend-inputfilter": "self.version",
|
265
|
+
"zendframework/zend-json": "self.version",
|
266
|
+
"zendframework/zend-ldap": "self.version",
|
267
|
+
"zendframework/zend-loader": "self.version",
|
268
|
+
"zendframework/zend-log": "self.version",
|
269
|
+
"zendframework/zend-mail": "self.version",
|
270
|
+
"zendframework/zend-math": "self.version",
|
271
|
+
"zendframework/zend-memory": "self.version",
|
272
|
+
"zendframework/zend-mime": "self.version",
|
273
|
+
"zendframework/zend-modulemanager": "self.version",
|
274
|
+
"zendframework/zend-mvc": "self.version",
|
275
|
+
"zendframework/zend-navigation": "self.version",
|
276
|
+
"zendframework/zend-paginator": "self.version",
|
277
|
+
"zendframework/zend-permissions-acl": "self.version",
|
278
|
+
"zendframework/zend-permissions-rbac": "self.version",
|
279
|
+
"zendframework/zend-progressbar": "self.version",
|
280
|
+
"zendframework/zend-serializer": "self.version",
|
281
|
+
"zendframework/zend-server": "self.version",
|
282
|
+
"zendframework/zend-servicemanager": "self.version",
|
283
|
+
"zendframework/zend-session": "self.version",
|
284
|
+
"zendframework/zend-soap": "self.version",
|
285
|
+
"zendframework/zend-stdlib": "self.version",
|
286
|
+
"zendframework/zend-tag": "self.version",
|
287
|
+
"zendframework/zend-test": "self.version",
|
288
|
+
"zendframework/zend-text": "self.version",
|
289
|
+
"zendframework/zend-uri": "self.version",
|
290
|
+
"zendframework/zend-validator": "self.version",
|
291
|
+
"zendframework/zend-version": "self.version",
|
292
|
+
"zendframework/zend-view": "self.version",
|
293
|
+
"zendframework/zend-xmlrpc": "self.version"
|
294
|
+
},
|
295
|
+
"require-dev": {
|
296
|
+
"doctrine/common": ">=2.1",
|
297
|
+
"ircmaxell/random-lib": "dev-master",
|
298
|
+
"ircmaxell/security-lib": "dev-master",
|
299
|
+
"phpunit/phpunit": "3.7.*"
|
300
|
+
},
|
301
|
+
"suggest": {
|
302
|
+
"doctrine/common": "Doctrine\\Common >=2.1 for annotation features",
|
303
|
+
"ext-intl": "ext/intl for i18n features",
|
304
|
+
"ircmaxell/random-lib": "Fallback random byte generator for Zend\\Math\\Rand if OpenSSL/Mcrypt extensions are unavailable",
|
305
|
+
"pecl-weakref": "Implementation of weak references for Zend\\Stdlib\\CallbackHandler",
|
306
|
+
"zendframework/zendpdf": "ZendPdf for creating PDF representations of barcodes",
|
307
|
+
"zendframework/zendservice-recaptcha": "ZendService\\ReCaptcha for rendering ReCaptchas in Zend\\Captcha and/or Zend\\Form"
|
308
|
+
},
|
309
|
+
"time": "2013-04-17 15:15:58",
|
310
|
+
"bin": [
|
311
|
+
"bin/classmap_generator.php"
|
312
|
+
],
|
313
|
+
"type": "library",
|
314
|
+
"extra": {
|
315
|
+
"branch-alias": {
|
316
|
+
"dev-master": "2.1-dev",
|
317
|
+
"dev-develop": "2.2-dev"
|
318
|
+
}
|
319
|
+
},
|
320
|
+
"installation-source": "dist",
|
321
|
+
"autoload": {
|
322
|
+
"psr-0": {
|
323
|
+
"Zend\\": "library/",
|
324
|
+
"ZendTest\\": "tests/"
|
325
|
+
}
|
326
|
+
},
|
327
|
+
"license": [
|
328
|
+
"BSD-3-Clause"
|
329
|
+
],
|
330
|
+
"description": "Zend Framework 2",
|
331
|
+
"homepage": "http://framework.zend.com/",
|
332
|
+
"keywords": [
|
333
|
+
"framework",
|
334
|
+
"zf2"
|
335
|
+
]
|
336
|
+
},
|
337
|
+
{
|
338
|
+
"name": "zf-commons/zfc-base",
|
339
|
+
"version": "v0.1.2",
|
340
|
+
"source": {
|
341
|
+
"type": "git",
|
342
|
+
"url": "https://github.com/ZF-Commons/ZfcBase.git",
|
343
|
+
"reference": "v0.1.2"
|
344
|
+
},
|
345
|
+
"dist": {
|
346
|
+
"type": "zip",
|
347
|
+
"url": "https://api.github.com/repos/ZF-Commons/ZfcBase/zipball/v0.1.2",
|
348
|
+
"reference": "v0.1.2",
|
349
|
+
"shasum": ""
|
350
|
+
},
|
351
|
+
"require": {
|
352
|
+
"php": ">=5.3.3",
|
353
|
+
"zendframework/zend-db": ">=2.1,<3.0",
|
354
|
+
"zendframework/zend-eventmanager": ">=2.1,<3.0",
|
355
|
+
"zendframework/zend-loader": ">=2.1,<3.0",
|
356
|
+
"zendframework/zend-modulemanager": ">=2.1,<3.0",
|
357
|
+
"zendframework/zend-mvc": ">=2.1,<3.0",
|
358
|
+
"zendframework/zend-servicemanager": ">=2.1,<3.0",
|
359
|
+
"zendframework/zend-stdlib": ">=2.1,<3.0"
|
360
|
+
},
|
361
|
+
"time": "2013-05-02 12:33:49",
|
362
|
+
"type": "library",
|
363
|
+
"installation-source": "dist",
|
364
|
+
"autoload": {
|
365
|
+
"psr-0": {
|
366
|
+
"ZfcBase": "src/"
|
367
|
+
},
|
368
|
+
"classmap": [
|
369
|
+
"./Module.php"
|
370
|
+
]
|
371
|
+
},
|
372
|
+
"authors": [
|
373
|
+
{
|
374
|
+
"name": "Kyle Spraggs",
|
375
|
+
"email": "theman@spiffyjr.me",
|
376
|
+
"homepage": "http://www.spiffyjr.me/"
|
377
|
+
},
|
378
|
+
{
|
379
|
+
"name": "Evan Coury",
|
380
|
+
"email": "me@evancoury.com",
|
381
|
+
"homepage": "http://blog.evan.pro/"
|
382
|
+
}
|
383
|
+
],
|
384
|
+
"description": "A set of genetic (abstract) classes which are commonly used across multiple modules.",
|
385
|
+
"homepage": "https://github.com/ZF-Commons/ZfcBase",
|
386
|
+
"keywords": [
|
387
|
+
"zf2"
|
388
|
+
]
|
389
|
+
},
|
390
|
+
{
|
391
|
+
"name": "zf-commons/zfc-user",
|
392
|
+
"version": "0.1.2",
|
393
|
+
"source": {
|
394
|
+
"type": "git",
|
395
|
+
"url": "https://github.com/ZF-Commons/ZfcUser.git",
|
396
|
+
"reference": "0.1.2"
|
397
|
+
},
|
398
|
+
"dist": {
|
399
|
+
"type": "zip",
|
400
|
+
"url": "https://api.github.com/repos/ZF-Commons/ZfcUser/zipball/0.1.2",
|
401
|
+
"reference": "0.1.2",
|
402
|
+
"shasum": ""
|
403
|
+
},
|
404
|
+
"require": {
|
405
|
+
"php": ">=5.3.3",
|
406
|
+
"zendframework/zend-authentication": ">=2.1,<3.0",
|
407
|
+
"zendframework/zend-crypt": ">=2.1,<3.0",
|
408
|
+
"zendframework/zend-form": ">=2.1,<3.0",
|
409
|
+
"zendframework/zend-inputfilter": ">=2.1,<3.0",
|
410
|
+
"zendframework/zend-loader": ">=2.1,<3.0",
|
411
|
+
"zendframework/zend-modulemanager": ">=2.1,<3.0",
|
412
|
+
"zendframework/zend-mvc": ">=2.1,<3.0",
|
413
|
+
"zendframework/zend-servicemanager": ">=2.1,<3.0",
|
414
|
+
"zendframework/zend-stdlib": ">=2.1,<3.0",
|
415
|
+
"zendframework/zend-validator": ">=2.1,<3.0",
|
416
|
+
"zendframework/zend-view": ">=2.1,<3.0",
|
417
|
+
"zf-commons/zfc-base": "0.*"
|
418
|
+
},
|
419
|
+
"suggest": {
|
420
|
+
"zendframework/zend-session": "To use the default authentication adapter."
|
421
|
+
},
|
422
|
+
"time": "2013-05-02 12:33:31",
|
423
|
+
"type": "library",
|
424
|
+
"installation-source": "dist",
|
425
|
+
"autoload": {
|
426
|
+
"psr-0": {
|
427
|
+
"ZfcUser": "src/"
|
428
|
+
},
|
429
|
+
"classmap": [
|
430
|
+
"./Module.php"
|
431
|
+
]
|
432
|
+
},
|
433
|
+
"authors": [
|
434
|
+
{
|
435
|
+
"name": "Kyle Spraggs",
|
436
|
+
"email": "theman@spiffyjr.me",
|
437
|
+
"homepage": "http://www.spiffyjr.me/"
|
438
|
+
},
|
439
|
+
{
|
440
|
+
"name": "Evan Coury",
|
441
|
+
"email": "me@evancoury.com",
|
442
|
+
"homepage": "http://blog.evan.pro/"
|
443
|
+
}
|
444
|
+
],
|
445
|
+
"description": "A generic user registration and authentication module for ZF2. Supports Zend\\Db and Doctrine2.",
|
446
|
+
"homepage": "https://github.com/ZF-Commons/ZfcUser",
|
447
|
+
"keywords": [
|
448
|
+
"zf2"
|
449
|
+
]
|
450
|
+
}
|
451
|
+
],
|
452
|
+
"packages-dev": null,
|
453
|
+
"aliases": [
|
454
|
+
|
455
|
+
],
|
456
|
+
"minimum-stability": "stable",
|
457
|
+
"stability-flags": {
|
458
|
+
"zendframework/zend-developer-tools": 20,
|
459
|
+
"bjyoungblood/bjy-profiler": 20,
|
460
|
+
"darkmatus/roleuserbridge": 20
|
461
|
+
}
|
462
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
Simple PHP Composer app.
|
@@ -0,0 +1,21 @@
|
|
1
|
+
{
|
2
|
+
"repositories": [
|
3
|
+
{
|
4
|
+
"type": "vcs",
|
5
|
+
"url": "https://github.com/zendframework/ZendDeveloperTools"
|
6
|
+
},
|
7
|
+
{
|
8
|
+
"type": "vcs",
|
9
|
+
"url": "https://github.com/dshafik/roleuserbridge"
|
10
|
+
}
|
11
|
+
],
|
12
|
+
"require": {
|
13
|
+
"php": ">=5.4.0",
|
14
|
+
"zendframework/zendframework": "2.1.*",
|
15
|
+
"bjyoungblood/bjy-authorize": "1.2.*",
|
16
|
+
"zf-commons/zfc-user": "0.1.*",
|
17
|
+
"zendframework/zend-developer-tools": "dev-master",
|
18
|
+
"bjyoungblood/bjy-profiler": "dev-master",
|
19
|
+
"darkmatus/roleuserbridge": "dev-master"
|
20
|
+
}
|
21
|
+
}
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Deploying an application that uses PHP and Composer" do
|
4
|
+
|
5
|
+
context "with composer available" do
|
6
|
+
|
7
|
+
context "with a composer.lock" do
|
8
|
+
before(:all) do
|
9
|
+
deploy_test_application('php_composer_lock')
|
10
|
+
end
|
11
|
+
|
12
|
+
it "runs 'composer install'" do
|
13
|
+
install_cmd = @deployer.commands.grep(/composer install/).first
|
14
|
+
install_cmd.should_not be_nil
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context "WITHOUT a composer.lock but with composer.json" do
|
19
|
+
before(:all) do
|
20
|
+
deploy_test_application('php_no_composer_lock')
|
21
|
+
end
|
22
|
+
|
23
|
+
it "runs 'composer install'" do
|
24
|
+
install_cmd = @deployer.commands.grep(/composer install/).first
|
25
|
+
install_cmd.should_not be_nil
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
end if $COMPOSER_INSTALLED
|
31
|
+
|
32
|
+
context "without composer available" do
|
33
|
+
|
34
|
+
context "with a composer.lock" do
|
35
|
+
before(:all) do
|
36
|
+
deploy_test_application('php_composer_lock')
|
37
|
+
end
|
38
|
+
|
39
|
+
it "outputs a warning, but continues" do
|
40
|
+
warning_out = read_output.should include("WARNING: composer.lock")
|
41
|
+
warning_out.should_not be_nil
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
context "WITHOUT a composer.lock but with composer.json" do
|
46
|
+
before(:all) do
|
47
|
+
deploy_test_application('php_no_composer_lock')
|
48
|
+
end
|
49
|
+
|
50
|
+
it "outputs a warning, but continues" do
|
51
|
+
warning_out = read_output.should include("WARNING: composer.json")
|
52
|
+
warning_out.should_not be_nil
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
end if !$COMPOSER_INSTALLED
|
58
|
+
end
|
59
|
+
|
data/spec/spec_helper.rb
CHANGED
@@ -40,6 +40,13 @@ Spec::Runner.configure do |config|
|
|
40
40
|
$stderr.puts "npm not found; skipping Node.js specs."
|
41
41
|
end
|
42
42
|
|
43
|
+
$COMPOSER_INSTALLED = system('command -v composer > /dev/null')
|
44
|
+
if $COMPOSER_INSTALLED
|
45
|
+
$stderr.puts "composer found; skipping tests that expect it to be missing."
|
46
|
+
else
|
47
|
+
$stderr.puts "composer not found; skipping tests that expect it to be available."
|
48
|
+
end
|
49
|
+
|
43
50
|
config.before(:all) do
|
44
51
|
make_tmpdir
|
45
52
|
EY::Serverside.dna_json = MultiJson.dump({})
|
metadata
CHANGED
@@ -1,15 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: engineyard-serverside
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 11
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
7
|
- 2
|
8
8
|
- 1
|
9
9
|
- 0
|
10
|
-
|
11
|
-
- 1
|
12
|
-
version: 2.1.0.rc1
|
10
|
+
version: 2.1.0
|
13
11
|
platform: ruby
|
14
12
|
authors:
|
15
13
|
- EY Cloud Team
|
@@ -17,12 +15,11 @@ autorequire:
|
|
17
15
|
bindir: bin
|
18
16
|
cert_chain: []
|
19
17
|
|
20
|
-
date: 2013-05-
|
18
|
+
date: 2013-05-28 00:00:00 Z
|
21
19
|
dependencies:
|
22
20
|
- !ruby/object:Gem::Dependency
|
23
21
|
name: rspec
|
24
|
-
|
25
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
22
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
26
23
|
none: false
|
27
24
|
requirements:
|
28
25
|
- - "="
|
@@ -33,12 +30,12 @@ dependencies:
|
|
33
30
|
- 3
|
34
31
|
- 2
|
35
32
|
version: 1.3.2
|
33
|
+
prerelease: false
|
36
34
|
type: :development
|
37
|
-
|
35
|
+
requirement: *id001
|
38
36
|
- !ruby/object:Gem::Dependency
|
39
37
|
name: rake
|
40
|
-
|
41
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
42
39
|
none: false
|
43
40
|
requirements:
|
44
41
|
- - ">="
|
@@ -57,12 +54,12 @@ dependencies:
|
|
57
54
|
- 10
|
58
55
|
- 0
|
59
56
|
version: "10.0"
|
57
|
+
prerelease: false
|
60
58
|
type: :development
|
61
|
-
|
59
|
+
requirement: *id002
|
62
60
|
- !ruby/object:Gem::Dependency
|
63
61
|
name: rdoc
|
64
|
-
|
65
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
62
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
66
63
|
none: false
|
67
64
|
requirements:
|
68
65
|
- - ">="
|
@@ -71,12 +68,12 @@ dependencies:
|
|
71
68
|
segments:
|
72
69
|
- 0
|
73
70
|
version: "0"
|
71
|
+
prerelease: false
|
74
72
|
type: :development
|
75
|
-
|
73
|
+
requirement: *id003
|
76
74
|
- !ruby/object:Gem::Dependency
|
77
75
|
name: timecop
|
78
|
-
|
79
|
-
requirement: &id004 !ruby/object:Gem::Requirement
|
76
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
80
77
|
none: false
|
81
78
|
requirements:
|
82
79
|
- - ">="
|
@@ -85,12 +82,12 @@ dependencies:
|
|
85
82
|
segments:
|
86
83
|
- 0
|
87
84
|
version: "0"
|
85
|
+
prerelease: false
|
88
86
|
type: :development
|
89
|
-
|
87
|
+
requirement: *id004
|
90
88
|
- !ruby/object:Gem::Dependency
|
91
89
|
name: simplecov
|
92
|
-
|
93
|
-
requirement: &id005 !ruby/object:Gem::Requirement
|
90
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
94
91
|
none: false
|
95
92
|
requirements:
|
96
93
|
- - ">="
|
@@ -99,12 +96,12 @@ dependencies:
|
|
99
96
|
segments:
|
100
97
|
- 0
|
101
98
|
version: "0"
|
99
|
+
prerelease: false
|
102
100
|
type: :development
|
103
|
-
|
101
|
+
requirement: *id005
|
104
102
|
- !ruby/object:Gem::Dependency
|
105
103
|
name: engineyard-cloud-client
|
106
|
-
|
107
|
-
requirement: &id006 !ruby/object:Gem::Requirement
|
104
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
108
105
|
none: false
|
109
106
|
requirements:
|
110
107
|
- - ~>
|
@@ -115,12 +112,12 @@ dependencies:
|
|
115
112
|
- 0
|
116
113
|
- 11
|
117
114
|
version: 1.0.11
|
115
|
+
prerelease: false
|
118
116
|
type: :development
|
119
|
-
|
117
|
+
requirement: *id006
|
120
118
|
- !ruby/object:Gem::Dependency
|
121
119
|
name: engineyard-serverside-adapter
|
122
|
-
|
123
|
-
requirement: &id007 !ruby/object:Gem::Requirement
|
120
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
124
121
|
none: false
|
125
122
|
requirements:
|
126
123
|
- - ~>
|
@@ -131,12 +128,12 @@ dependencies:
|
|
131
128
|
- 0
|
132
129
|
- 6
|
133
130
|
version: 2.0.6
|
131
|
+
prerelease: false
|
134
132
|
type: :development
|
135
|
-
|
133
|
+
requirement: *id007
|
136
134
|
- !ruby/object:Gem::Dependency
|
137
135
|
name: sqlite3
|
138
|
-
|
139
|
-
requirement: &id008 !ruby/object:Gem::Requirement
|
136
|
+
version_requirements: &id008 !ruby/object:Gem::Requirement
|
140
137
|
none: false
|
141
138
|
requirements:
|
142
139
|
- - ">="
|
@@ -145,8 +142,9 @@ dependencies:
|
|
145
142
|
segments:
|
146
143
|
- 0
|
147
144
|
version: "0"
|
145
|
+
prerelease: false
|
148
146
|
type: :development
|
149
|
-
|
147
|
+
requirement: *id008
|
150
148
|
description:
|
151
149
|
email: cloud@engineyard.com
|
152
150
|
executables:
|
@@ -165,6 +163,7 @@ files:
|
|
165
163
|
- lib/engineyard-serverside/dependency_manager/base.rb
|
166
164
|
- lib/engineyard-serverside/dependency_manager/bundler.rb
|
167
165
|
- lib/engineyard-serverside/dependency_manager/bundler_lock.rb
|
166
|
+
- lib/engineyard-serverside/dependency_manager/composer.rb
|
168
167
|
- lib/engineyard-serverside/dependency_manager/legacy_helpers.rb
|
169
168
|
- lib/engineyard-serverside/dependency_manager/npm.rb
|
170
169
|
- lib/engineyard-serverside/dependency_manager.rb
|
@@ -364,6 +363,13 @@ files:
|
|
364
363
|
- spec/fixtures/repos/nodejs/package.json
|
365
364
|
- spec/fixtures/repos/nodejs/README
|
366
365
|
- spec/fixtures/repos/not_bundled/README
|
366
|
+
- spec/fixtures/repos/php_composer_lock/composer.json
|
367
|
+
- spec/fixtures/repos/php_composer_lock/composer.lock
|
368
|
+
- spec/fixtures/repos/php_composer_lock/public/index.php
|
369
|
+
- spec/fixtures/repos/php_composer_lock/README
|
370
|
+
- spec/fixtures/repos/php_no_composer_lock/composer.json
|
371
|
+
- spec/fixtures/repos/php_no_composer_lock/public/index.php
|
372
|
+
- spec/fixtures/repos/php_no_composer_lock/README
|
367
373
|
- spec/fixtures/repos/sqlite3/Gemfile
|
368
374
|
- spec/fixtures/repos/sqlite3/Gemfile.lock
|
369
375
|
- spec/fixtures/repos/sqlite3/README
|
@@ -371,6 +377,7 @@ files:
|
|
371
377
|
- spec/git_strategy_spec.rb
|
372
378
|
- spec/lockfile_parser_spec.rb
|
373
379
|
- spec/nodejs_deploy_spec.rb
|
380
|
+
- spec/php_deploy_spec.rb
|
374
381
|
- spec/propagator_spec.rb
|
375
382
|
- spec/rails31_deploy_spec.rb
|
376
383
|
- spec/restart_spec.rb
|
@@ -530,6 +537,13 @@ test_files:
|
|
530
537
|
- spec/fixtures/repos/nodejs/package.json
|
531
538
|
- spec/fixtures/repos/nodejs/README
|
532
539
|
- spec/fixtures/repos/not_bundled/README
|
540
|
+
- spec/fixtures/repos/php_composer_lock/composer.json
|
541
|
+
- spec/fixtures/repos/php_composer_lock/composer.lock
|
542
|
+
- spec/fixtures/repos/php_composer_lock/public/index.php
|
543
|
+
- spec/fixtures/repos/php_composer_lock/README
|
544
|
+
- spec/fixtures/repos/php_no_composer_lock/composer.json
|
545
|
+
- spec/fixtures/repos/php_no_composer_lock/public/index.php
|
546
|
+
- spec/fixtures/repos/php_no_composer_lock/README
|
533
547
|
- spec/fixtures/repos/sqlite3/Gemfile
|
534
548
|
- spec/fixtures/repos/sqlite3/Gemfile.lock
|
535
549
|
- spec/fixtures/repos/sqlite3/README
|
@@ -537,6 +551,7 @@ test_files:
|
|
537
551
|
- spec/git_strategy_spec.rb
|
538
552
|
- spec/lockfile_parser_spec.rb
|
539
553
|
- spec/nodejs_deploy_spec.rb
|
554
|
+
- spec/php_deploy_spec.rb
|
540
555
|
- spec/propagator_spec.rb
|
541
556
|
- spec/rails31_deploy_spec.rb
|
542
557
|
- spec/restart_spec.rb
|