dpl-connect 1.8.43
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.coveralls.yml +1 -0
- data/.gitignore +8 -0
- data/.rspec +2 -0
- data/.travis.yml +36 -0
- data/Gemfile +100 -0
- data/LICENSE +22 -0
- data/README.md +934 -0
- data/Rakefile +1 -0
- data/TESTING.md +29 -0
- data/bin/dpl +5 -0
- data/dpl.gemspec +32 -0
- data/lib/dpl/cli.rb +66 -0
- data/lib/dpl/error.rb +3 -0
- data/lib/dpl/provider.rb +264 -0
- data/lib/dpl/provider/anynines.rb +13 -0
- data/lib/dpl/provider/appfog.rb +21 -0
- data/lib/dpl/provider/atlas.rb +108 -0
- data/lib/dpl/provider/azure_webapps.rb +48 -0
- data/lib/dpl/provider/bintray.rb +509 -0
- data/lib/dpl/provider/bitballoon.rb +22 -0
- data/lib/dpl/provider/bluemix_cloud_foundry.rb +23 -0
- data/lib/dpl/provider/boxfuse.rb +57 -0
- data/lib/dpl/provider/catalyze.rb +49 -0
- data/lib/dpl/provider/chef_supermarket.rb +85 -0
- data/lib/dpl/provider/cloud66.rb +38 -0
- data/lib/dpl/provider/cloud_files.rb +38 -0
- data/lib/dpl/provider/cloud_foundry.rb +43 -0
- data/lib/dpl/provider/code_deploy.rb +123 -0
- data/lib/dpl/provider/deis.rb +119 -0
- data/lib/dpl/provider/divshot.rb +23 -0
- data/lib/dpl/provider/elastic_beanstalk.rb +195 -0
- data/lib/dpl/provider/engine_yard.rb +90 -0
- data/lib/dpl/provider/firebase.rb +27 -0
- data/lib/dpl/provider/gae.rb +97 -0
- data/lib/dpl/provider/gcs.rb +59 -0
- data/lib/dpl/provider/hackage.rb +29 -0
- data/lib/dpl/provider/heroku.rb +18 -0
- data/lib/dpl/provider/heroku/api.rb +98 -0
- data/lib/dpl/provider/heroku/generic.rb +94 -0
- data/lib/dpl/provider/heroku/git.rb +28 -0
- data/lib/dpl/provider/lambda.rb +236 -0
- data/lib/dpl/provider/launchpad.rb +48 -0
- data/lib/dpl/provider/modulus.rb +23 -0
- data/lib/dpl/provider/npm.rb +64 -0
- data/lib/dpl/provider/openshift.rb +59 -0
- data/lib/dpl/provider/ops_works.rb +132 -0
- data/lib/dpl/provider/packagecloud.rb +144 -0
- data/lib/dpl/provider/pages.rb +79 -0
- data/lib/dpl/provider/puppet_forge.rb +43 -0
- data/lib/dpl/provider/pypi.rb +111 -0
- data/lib/dpl/provider/releases.rb +139 -0
- data/lib/dpl/provider/rubygems.rb +51 -0
- data/lib/dpl/provider/s3.rb +123 -0
- data/lib/dpl/provider/scalingo.rb +97 -0
- data/lib/dpl/provider/script.rb +29 -0
- data/lib/dpl/provider/surge.rb +33 -0
- data/lib/dpl/provider/testfairy.rb +190 -0
- data/lib/dpl/provider/transifex.rb +45 -0
- data/lib/dpl/version.rb +3 -0
- data/notes/engine_yard.md +1 -0
- data/notes/heroku.md +3 -0
- data/spec/cli_spec.rb +36 -0
- data/spec/provider/anynines_spec.rb +20 -0
- data/spec/provider/appfog_spec.rb +35 -0
- data/spec/provider/atlas_spec.rb +99 -0
- data/spec/provider/azure_webapps_spec.rb +95 -0
- data/spec/provider/bintray_spec.rb +259 -0
- data/spec/provider/bitballoon_spec.rb +32 -0
- data/spec/provider/bluemixcloudfoundry_spec.rb +23 -0
- data/spec/provider/boxfuse_spec.rb +16 -0
- data/spec/provider/catalyze_spec.rb +39 -0
- data/spec/provider/chef_supermarket_spec.rb +51 -0
- data/spec/provider/cloud66_spec.rb +44 -0
- data/spec/provider/cloud_files_spec.rb +88 -0
- data/spec/provider/cloudfoundry_spec.rb +71 -0
- data/spec/provider/code_deploy_spec.rb +360 -0
- data/spec/provider/deis_spec.rb +116 -0
- data/spec/provider/divshot_spec.rb +28 -0
- data/spec/provider/elastic_beanstalk_spec.rb +209 -0
- data/spec/provider/firebase_spec.rb +40 -0
- data/spec/provider/gae_spec.rb +26 -0
- data/spec/provider/gcs_spec.rb +115 -0
- data/spec/provider/hackage_spec.rb +47 -0
- data/spec/provider/heroku_spec.rb +357 -0
- data/spec/provider/lambda_spec.rb +432 -0
- data/spec/provider/launchpad_spec.rb +33 -0
- data/spec/provider/modulus_spec.rb +29 -0
- data/spec/provider/npm_spec.rb +95 -0
- data/spec/provider/openshift_spec.rb +91 -0
- data/spec/provider/ops_works_spec.rb +127 -0
- data/spec/provider/packagecloud_spec.rb +56 -0
- data/spec/provider/puppet_forge_spec.rb +60 -0
- data/spec/provider/pypi_spec.rb +103 -0
- data/spec/provider/releases_spec.rb +303 -0
- data/spec/provider/rubygems_spec.rb +106 -0
- data/spec/provider/s3_spec.rb +174 -0
- data/spec/provider/scalingo_spec.rb +64 -0
- data/spec/provider/script_spec.rb +26 -0
- data/spec/provider/surge_spec.rb +15 -0
- data/spec/provider/testfairy_spec.rb +86 -0
- data/spec/provider/transifex_spec.rb +110 -0
- data/spec/provider_spec.rb +210 -0
- data/spec/spec_helper.rb +20 -0
- metadata +279 -0
@@ -0,0 +1,116 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'dpl/provider/deis'
|
3
|
+
|
4
|
+
describe DPL::Provider::Deis do
|
5
|
+
let(:options) do
|
6
|
+
{
|
7
|
+
:app => 'example',
|
8
|
+
:key_name => 'key',
|
9
|
+
:controller => 'https://deis.deisapps.com',
|
10
|
+
:username => 'travis',
|
11
|
+
:password => 'secret',
|
12
|
+
:cli_version => 'v2.0.0'
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
subject :provider do
|
17
|
+
described_class.new(DummyContext.new, options)
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "#install_deploy_dependencies" do
|
21
|
+
example do
|
22
|
+
expect(provider.context).to receive(:shell).with(
|
23
|
+
'curl -sSL http://deis.io/deis-cli/install-v2.sh | bash -x -s v2.0.0'
|
24
|
+
).and_return(true)
|
25
|
+
provider.install_deploy_dependencies
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "#needs_key?" do
|
30
|
+
example do
|
31
|
+
expect(provider.needs_key?).to eq(true)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "#check_auth" do
|
36
|
+
example do
|
37
|
+
expect(provider.context).to receive(:shell).with(
|
38
|
+
'./deis login https://deis.deisapps.com --username=travis --password=secret'
|
39
|
+
).and_return(true)
|
40
|
+
provider.check_auth
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "#check_app" do
|
45
|
+
example do
|
46
|
+
expect(provider.context).to receive(:shell).with(
|
47
|
+
'./deis apps:info --app=example'
|
48
|
+
).and_return(true)
|
49
|
+
provider.check_app
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe "#setup_key" do
|
54
|
+
let(:ssh_config_handle) { double 'ssh_config_handle' }
|
55
|
+
let(:ssh_config) { File.join(Dir.home, '.ssh', 'config') }
|
56
|
+
let(:identity_file) { File.join(Dir.pwd, 'key_file') }
|
57
|
+
example do
|
58
|
+
expect(provider.context).to receive(:shell).with(
|
59
|
+
'./deis keys:add key_file'
|
60
|
+
).and_return(true)
|
61
|
+
provider.setup_key('key_file')
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe "#setup_git_ssh" do
|
66
|
+
example do
|
67
|
+
expect(provider.context).to receive(:shell).with(
|
68
|
+
/grep -c 'PTY allocation request failed'/
|
69
|
+
).and_return(false)
|
70
|
+
|
71
|
+
expect(provider.context).to receive(:shell).with(
|
72
|
+
/grep -c 'PTY allocation request failed'/
|
73
|
+
).and_return(true)
|
74
|
+
|
75
|
+
provider.setup_git_ssh('foo', 'key_file')
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe "#remove_key" do
|
80
|
+
example do
|
81
|
+
expect(provider.context).to receive(:shell).with(
|
82
|
+
'./deis keys:remove key'
|
83
|
+
).and_return(true)
|
84
|
+
provider.remove_key
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
describe "#push_app" do
|
89
|
+
example do
|
90
|
+
expect(provider.context).to receive(:shell).with(
|
91
|
+
"bash -c 'git push ssh://git@deis-builder.deisapps.com:2222/example.git HEAD:refs/heads/master -f 2>&1 | tr -dc \"[:alnum:][:space:][:punct:]\" | sed -E \"s/remote: (\\[1G)+//\" | sed \"s/\\[K$//\"; exit ${PIPESTATUS[0]}'"
|
92
|
+
).and_return(true)
|
93
|
+
provider.push_app
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
describe "#run" do
|
98
|
+
example do
|
99
|
+
expect(provider.context).to receive(:shell).with(
|
100
|
+
'./deis run -a example -- shell command'
|
101
|
+
).and_return(true)
|
102
|
+
provider.run('shell command')
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
describe "#cleanup" do
|
107
|
+
example do
|
108
|
+
expect(provider.context).to receive(:shell).with('mv deis ~/deis')
|
109
|
+
expect(provider.context).to receive(:shell).with('mv .dpl ~/dpl')
|
110
|
+
expect(provider.context).to receive(:shell).with('git stash --all')
|
111
|
+
expect(provider.context).to receive(:shell).with('mv ~/dpl .dpl')
|
112
|
+
expect(provider.context).to receive(:shell).with('mv ~/deis deis')
|
113
|
+
provider.cleanup
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'dpl/provider/divshot'
|
3
|
+
|
4
|
+
describe DPL::Provider::Divshot do
|
5
|
+
subject :provider do
|
6
|
+
described_class.new DummyContext.new, :api_key => 'abc123'
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "#check_auth" do
|
10
|
+
it 'should require an api key' do
|
11
|
+
provider.options.update(:api_key => nil)
|
12
|
+
expect{ provider.check_auth }.to raise_error("must supply an api key")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "#push_app" do
|
17
|
+
it 'should include the environment specified' do
|
18
|
+
provider.options.update(:environment => 'development')
|
19
|
+
expect(provider.context).to receive(:shell).with("divshot push development --token=abc123")
|
20
|
+
provider.push_app
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should default to production' do
|
24
|
+
expect(provider.context).to receive(:shell).with("divshot push production --token=abc123")
|
25
|
+
provider.push_app
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,209 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'aws-sdk'
|
3
|
+
require 'dpl/provider'
|
4
|
+
require 'dpl/provider/elastic_beanstalk'
|
5
|
+
|
6
|
+
describe DPL::Provider::ElasticBeanstalk do
|
7
|
+
|
8
|
+
let(:access_key_id) { 'qwertyuiopasdfghjklz' }
|
9
|
+
let(:secret_access_key) { 'qwertyuiopasdfghjklzqwertyuiopasdfghjklz' }
|
10
|
+
let(:region) { 'us-west-2' }
|
11
|
+
let(:app) { 'example-app' }
|
12
|
+
let(:env) { 'live' }
|
13
|
+
let(:bucket_name) { "travis-elasticbeanstalk-test-builds-#{region}" }
|
14
|
+
let(:bucket_path) { "some/app"}
|
15
|
+
let(:only_create_app_version) { nil }
|
16
|
+
let(:wait_until_deployed) { nil }
|
17
|
+
|
18
|
+
let(:bucket_mock) do
|
19
|
+
dbl = double("bucket mock", write: nil)
|
20
|
+
allow(dbl).to receive(:objects).and_return(double("Hash", :[] => dbl))
|
21
|
+
dbl
|
22
|
+
end
|
23
|
+
|
24
|
+
let(:s3_mock) do
|
25
|
+
hash_dbl = double("Hash", :[] => bucket_mock, :map => [])
|
26
|
+
double("Aws::S3", bucket: hash_dbl, config: hash_dbl)
|
27
|
+
end
|
28
|
+
|
29
|
+
let(:io_double) do
|
30
|
+
double('IO', open: Object.new)
|
31
|
+
end
|
32
|
+
|
33
|
+
let(:s3_obj_double) do
|
34
|
+
double("Aws::S3::Object", put: Object.new)
|
35
|
+
end
|
36
|
+
|
37
|
+
subject :provider do
|
38
|
+
described_class.new(
|
39
|
+
DummyContext.new, :access_key_id => access_key_id, :secret_access_key => secret_access_key,
|
40
|
+
:region => region, :app => app, :env => env, :bucket_name => bucket_name, :bucket_path => bucket_path,
|
41
|
+
:only_create_app_version => only_create_app_version,
|
42
|
+
:wait_until_deployed => wait_until_deployed
|
43
|
+
)
|
44
|
+
end
|
45
|
+
|
46
|
+
subject :provider_without_bucket_path do
|
47
|
+
described_class.new(
|
48
|
+
DummyContext.new, :access_key_id => access_key_id, :secret_access_key => secret_access_key,
|
49
|
+
:region => region, :app => app, :env => env, :bucket_name => bucket_name
|
50
|
+
)
|
51
|
+
end
|
52
|
+
|
53
|
+
describe "#check_auth" do
|
54
|
+
example do
|
55
|
+
expect(Aws.config).to receive(:update)
|
56
|
+
provider.check_auth
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe "#push_app" do
|
61
|
+
|
62
|
+
let(:app_version) { Object.new }
|
63
|
+
|
64
|
+
before :each do
|
65
|
+
allow(io_double).to receive(:open)
|
66
|
+
allow(s3_obj_double).to receive(:put).with(anything).and_return(Object.new)
|
67
|
+
allow(s3_mock).to receive(:bucket).with(bucket_name).and_return(bucket_mock)
|
68
|
+
expect(Pathname).to receive(:new).and_return(io_double)
|
69
|
+
end
|
70
|
+
|
71
|
+
example 'bucket exists already' do
|
72
|
+
allow(s3_mock).to receive(:bucket).with(bucket_name).and_return(bucket_mock)
|
73
|
+
allow(bucket_mock).to receive(:exists?).and_return(true)
|
74
|
+
allow(bucket_mock).to receive(:object).with("some/app/file.zip").and_return(s3_obj_double)
|
75
|
+
|
76
|
+
expect(provider).to receive(:s3).and_return(s3_mock).twice
|
77
|
+
expect(provider).not_to receive(:create_bucket)
|
78
|
+
expect(provider).to receive(:create_zip).and_return('/path/to/file.zip')
|
79
|
+
expect(provider).to receive(:archive_name).and_return('file.zip')
|
80
|
+
expect(provider).to receive(:upload).with('file.zip', '/path/to/file.zip').and_call_original
|
81
|
+
expect(provider).to receive(:sleep).with(5)
|
82
|
+
expect(provider).to receive(:create_app_version).with(s3_obj_double).and_return(app_version)
|
83
|
+
expect(provider).to receive(:update_app).with(app_version)
|
84
|
+
|
85
|
+
provider.push_app
|
86
|
+
end
|
87
|
+
|
88
|
+
example 'bucket doesnt exist yet' do
|
89
|
+
allow(s3_mock).to receive(:bucket).with(bucket_name).and_return(bucket_mock)
|
90
|
+
allow(bucket_mock).to receive(:exists?).and_return(false)
|
91
|
+
allow(bucket_mock).to receive(:object).with("some/app/file.zip").and_return(s3_obj_double)
|
92
|
+
|
93
|
+
expect(provider).to receive(:s3).and_return(s3_mock).twice
|
94
|
+
expect(provider).to receive(:create_bucket)
|
95
|
+
expect(provider).to receive(:create_zip).and_return('/path/to/file.zip')
|
96
|
+
expect(provider).to receive(:archive_name).and_return('file.zip')
|
97
|
+
expect(provider).to receive(:upload).with('file.zip', '/path/to/file.zip').and_call_original
|
98
|
+
expect(provider).to receive(:sleep).with(5)
|
99
|
+
expect(provider).to receive(:create_app_version).with(s3_obj_double).and_return(app_version)
|
100
|
+
expect(provider).to receive(:update_app).with(app_version)
|
101
|
+
|
102
|
+
provider.push_app
|
103
|
+
end
|
104
|
+
|
105
|
+
context 'only creates app version' do
|
106
|
+
let(:only_create_app_version) { true }
|
107
|
+
|
108
|
+
example 'verify the app is not updated' do
|
109
|
+
allow(s3_mock).to receive(:bucket).with(bucket_name).and_return(bucket_mock)
|
110
|
+
allow(bucket_mock).to receive(:exists?).and_return(false)
|
111
|
+
allow(bucket_mock).to receive(:create)
|
112
|
+
allow(bucket_mock).to receive(:object).with("some/app/file.zip").and_return(s3_obj_double)
|
113
|
+
|
114
|
+
expect(provider).to receive(:s3).and_return(s3_mock).at_least(3).times
|
115
|
+
expect(provider).to receive(:create_zip).and_return('/path/to/file.zip')
|
116
|
+
expect(provider).to receive(:archive_name).and_return('file.zip')
|
117
|
+
expect(provider).to receive(:upload).with('file.zip', '/path/to/file.zip').and_call_original
|
118
|
+
expect(provider).to receive(:sleep).with(5)
|
119
|
+
expect(provider).to receive(:create_app_version).with(s3_obj_double).and_return(app_version)
|
120
|
+
expect(provider).not_to receive(:update_app).with(app_version)
|
121
|
+
|
122
|
+
provider.push_app
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
context 'When the bucket_path option is not set' do
|
127
|
+
example 'Does not prepend bucket_path to the s3 bucket' do
|
128
|
+
allow(s3_mock).to receive(:bucket).with(bucket_name).and_return(bucket_mock)
|
129
|
+
allow(bucket_mock).to receive(:object).with("file.zip").and_return(s3_obj_double)
|
130
|
+
allow(bucket_mock).to receive(:exists?).and_return(false)
|
131
|
+
allow(bucket_mock).to receive(:create)
|
132
|
+
|
133
|
+
expect(provider_without_bucket_path).to receive(:s3).and_return(s3_mock).at_least(3).times
|
134
|
+
expect(provider_without_bucket_path).to receive(:create_zip).and_return('/path/to/file.zip')
|
135
|
+
expect(provider_without_bucket_path).to receive(:archive_name).and_return('file.zip')
|
136
|
+
expect(provider_without_bucket_path).to receive(:bucket_path).and_return(nil)
|
137
|
+
expect(provider_without_bucket_path).to receive(:upload).with('file.zip', '/path/to/file.zip').and_call_original
|
138
|
+
expect(provider_without_bucket_path).to receive(:sleep).with(5)
|
139
|
+
expect(provider_without_bucket_path).to receive(:create_app_version).with(s3_obj_double).and_return(app_version)
|
140
|
+
expect(provider_without_bucket_path).to receive(:update_app).with(app_version)
|
141
|
+
|
142
|
+
provider_without_bucket_path.push_app
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
context 'When wait_until_deployed option is set' do
|
147
|
+
let(:wait_until_deployed) { true }
|
148
|
+
|
149
|
+
example 'Waits until deployment completes' do
|
150
|
+
allow(bucket_mock).to receive(:exists?).and_return(false)
|
151
|
+
allow(bucket_mock).to receive(:create)
|
152
|
+
allow(bucket_mock).to receive(:object).with("some/app/file.zip").and_return(s3_obj_double)
|
153
|
+
|
154
|
+
expect(provider).to receive(:s3).and_return(s3_mock).at_least(3).times
|
155
|
+
expect(provider).to receive(:create_zip).and_return('/path/to/file.zip')
|
156
|
+
expect(provider).to receive(:archive_name).and_return('file.zip')
|
157
|
+
expect(provider).to receive(:upload).with('file.zip', '/path/to/file.zip').and_call_original
|
158
|
+
expect(provider).to receive(:sleep).with(5)
|
159
|
+
expect(provider).to receive(:create_app_version).with(s3_obj_double).and_return(app_version)
|
160
|
+
expect(provider).to receive(:update_app).with(app_version)
|
161
|
+
expect(provider).to receive(:wait_until_deployed)
|
162
|
+
|
163
|
+
provider.push_app
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
context "when zip_file option is given" do
|
168
|
+
before :each do
|
169
|
+
allow(bucket_mock).to receive(:object).with("some/app/file.zip").and_return(s3_obj_double)
|
170
|
+
allow(bucket_mock).to receive(:exists?).and_return(false)
|
171
|
+
allow(bucket_mock).to receive(:create)
|
172
|
+
expect(provider).to receive(:s3).and_return(s3_mock).at_least(3).times
|
173
|
+
expect(provider).to receive(:archive_name).and_return('file.zip')
|
174
|
+
expect(provider).to receive(:sleep).with(5)
|
175
|
+
expect(provider).to receive(:create_app_version).with(s3_obj_double).and_return(app_version)
|
176
|
+
expect(provider).to receive(:update_app).with(app_version)
|
177
|
+
end
|
178
|
+
|
179
|
+
example 'zip_file is an absolute path' do
|
180
|
+
provider.options.update(:zip_file => '/absolute/path/to/file.zip')
|
181
|
+
expect(provider).to receive(:upload).with('file.zip', '/absolute/path/to/file.zip').and_call_original
|
182
|
+
|
183
|
+
provider.push_app
|
184
|
+
end
|
185
|
+
|
186
|
+
example 'zip_file is an relative path' do
|
187
|
+
provider.options.update(:zip_file => 'relative/path/to/file.zip')
|
188
|
+
expect(provider).to receive(:upload).with('file.zip', File.join(Dir.pwd, 'relative/path/to/file.zip')).and_call_original
|
189
|
+
|
190
|
+
provider.push_app
|
191
|
+
end
|
192
|
+
|
193
|
+
example 'zip_file is a path with ~/' do
|
194
|
+
provider.options.update(:zip_file => '~/file.zip')
|
195
|
+
expect(provider).to receive(:upload).with('file.zip', File.join(ENV['HOME'], 'file.zip')).and_call_original
|
196
|
+
|
197
|
+
provider.push_app
|
198
|
+
end
|
199
|
+
|
200
|
+
example 'zip_file is has no path' do
|
201
|
+
provider.options.update(:zip_file => 'file.zip')
|
202
|
+
expect(provider).to receive(:upload).with('file.zip', File.join(Dir.pwd, 'file.zip')).and_call_original
|
203
|
+
|
204
|
+
provider.push_app
|
205
|
+
end
|
206
|
+
|
207
|
+
end
|
208
|
+
end
|
209
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'dpl/provider/firebase'
|
3
|
+
|
4
|
+
describe DPL::Provider::Firebase do
|
5
|
+
subject :provider do
|
6
|
+
described_class.new DummyContext.new, :token => 'abc123'
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "#check_auth" do
|
10
|
+
it 'should require a token if no FIREBASE_TOKEN is set' do
|
11
|
+
provider.options.update(:token => nil)
|
12
|
+
expect{ provider.check_auth }.to raise_error("must supply token option or FIREBASE_TOKEN environment variable")
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should allow no token if FIREBASE_TOKEN is set' do
|
16
|
+
provider.options.update(:token => nil)
|
17
|
+
provider.context.env['FIREBASE_TOKEN'] = 'abc123'
|
18
|
+
expect{ provider.check_auth }.not_to raise_error
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "#push_app" do
|
23
|
+
it 'should include the project specified' do
|
24
|
+
provider.options.update(:project => 'myapp-dev')
|
25
|
+
expect(provider.context).to receive(:shell).with("firebase deploy --non-interactive --project myapp-dev --token 'abc123'")
|
26
|
+
provider.push_app
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'should include the message specified' do
|
30
|
+
provider.options.update(:message => 'test message')
|
31
|
+
expect(provider.context).to receive(:shell).with("firebase deploy --non-interactive --message 'test message' --token 'abc123'")
|
32
|
+
provider.push_app
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'should default to no project override' do
|
36
|
+
expect(provider.context).to receive(:shell).with("firebase deploy --non-interactive --token 'abc123'")
|
37
|
+
provider.push_app
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'dpl/provider/gae'
|
3
|
+
|
4
|
+
describe DPL::Provider::GAE do
|
5
|
+
subject :provider do
|
6
|
+
described_class.new(DummyContext.new, project: 'test')
|
7
|
+
end
|
8
|
+
|
9
|
+
|
10
|
+
describe '#push_app' do
|
11
|
+
example 'with defaults' do
|
12
|
+
expect(provider.context.env).to receive(:[]).with('HOME').and_return('/home/travis')
|
13
|
+
allow(provider.context).to receive(:shell).with("bash -c 'source /home/travis/virtualenv/python2.7/bin/activate; #{DPL::Provider::GAE::GCLOUD} --quiet --verbosity \"warning\" --project \"test\" app deploy \"app.yaml\" --promote'").and_return(true)
|
14
|
+
provider.push_app
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
describe '#with_python_2_7' do
|
20
|
+
example 'with apostrophe' do
|
21
|
+
expect(provider.context.env).to receive(:[]).with('HOME').and_return('/home/travis')
|
22
|
+
allow(provider.context).to receive(:shell).with("bash -c 'source /home/travis/virtualenv/python2.7/bin/activate; python -c '\\''import sys; print(sys.version)'\\'''").and_return(true)
|
23
|
+
provider.with_python_2_7("python -c 'import sys; print(sys.version)'")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,115 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'dpl/provider/gcs'
|
3
|
+
|
4
|
+
describe DPL::Provider::GCS do
|
5
|
+
|
6
|
+
subject :provider do
|
7
|
+
described_class.new(DummyContext.new, :access_key_id => 'qwertyuiopasdfghjklz', :secret_access_key => 'qwertyuiopasdfghjklzqwertyuiopasdfghjklz', :bucket => 'my-bucket')
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "#check_auth" do
|
11
|
+
example do
|
12
|
+
expect(provider).to receive(:log).with("Logging in with Access Key: ****************jklz")
|
13
|
+
provider.check_auth
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "#needs_key?" do
|
18
|
+
example do
|
19
|
+
expect(provider.needs_key?).to eq(false)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "#upload_path" do
|
24
|
+
example "Without: :upload_dir" do
|
25
|
+
filename = "testfile.file"
|
26
|
+
|
27
|
+
expect(provider.upload_path(filename)).to eq("testfile.file")
|
28
|
+
end
|
29
|
+
|
30
|
+
example "With :upload_dir" do
|
31
|
+
provider.options.update(:upload_dir => 'BUILD3')
|
32
|
+
filename = "testfile.file"
|
33
|
+
|
34
|
+
expect(provider.upload_path(filename)).to eq("BUILD3/testfile.file")
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "#push_app" do
|
39
|
+
example "Without local_dir" do
|
40
|
+
expect(Dir).to receive(:chdir).with(Dir.pwd)
|
41
|
+
provider.push_app
|
42
|
+
end
|
43
|
+
|
44
|
+
example "With local_dir" do
|
45
|
+
provider.options.update(:local_dir => 'BUILD')
|
46
|
+
|
47
|
+
expect(Dir).to receive(:chdir).with('BUILD')
|
48
|
+
provider.push_app
|
49
|
+
end
|
50
|
+
|
51
|
+
example "Sends MIME type" do
|
52
|
+
expect(Dir).to receive(:glob).and_yield(__FILE__)
|
53
|
+
expect_any_instance_of(GStore::Client).to receive(:put_object).with(
|
54
|
+
anything(),
|
55
|
+
anything(),
|
56
|
+
hash_including(:headers => {:"Content-Type" => 'application/x-ruby'})
|
57
|
+
)
|
58
|
+
provider.push_app
|
59
|
+
end
|
60
|
+
|
61
|
+
example "Sets Cache" do
|
62
|
+
provider.options.update(:cache_control => "max-age=99999999")
|
63
|
+
expect(Dir).to receive(:glob).and_yield(__FILE__)
|
64
|
+
expect_any_instance_of(GStore::Client).to receive(:put_object).with(
|
65
|
+
anything(),
|
66
|
+
anything(),
|
67
|
+
hash_including(:headers => hash_including("Cache-Control" => 'max-age=99999999'))
|
68
|
+
)
|
69
|
+
provider.push_app
|
70
|
+
end
|
71
|
+
|
72
|
+
example "Sets ACL" do
|
73
|
+
provider.options.update(:acl => "public-read")
|
74
|
+
expect(Dir).to receive(:glob).and_yield(__FILE__)
|
75
|
+
expect_any_instance_of(GStore::Client).to receive(:put_object).with(
|
76
|
+
anything(),
|
77
|
+
anything(),
|
78
|
+
hash_including(:headers => hash_including("x-goog-acl" => 'public-read'))
|
79
|
+
)
|
80
|
+
provider.push_app
|
81
|
+
end
|
82
|
+
|
83
|
+
example "when detect_encoding is set" do
|
84
|
+
path = 'foo.js'
|
85
|
+
provider.options.update(:detect_encoding => true)
|
86
|
+
expect(Dir).to receive(:glob).and_yield(path)
|
87
|
+
expect(provider).to receive(:`).at_least(1).times.with("file '#{path}'").and_return('gzip compressed')
|
88
|
+
expect(File).to receive(:read).with(path).and_return("")
|
89
|
+
expect_any_instance_of(GStore::Client).to receive(:put_object).with(
|
90
|
+
anything(),
|
91
|
+
anything(),
|
92
|
+
hash_including(:headers => hash_including("Content-Encoding" => 'gzip'))
|
93
|
+
)
|
94
|
+
provider.push_app
|
95
|
+
end
|
96
|
+
|
97
|
+
example "With dot_match" do
|
98
|
+
provider.options.update(:dot_match => true)
|
99
|
+
|
100
|
+
expect(Dir).to receive(:glob).with('**/*', File::FNM_DOTMATCH)
|
101
|
+
provider.push_app
|
102
|
+
end
|
103
|
+
|
104
|
+
end
|
105
|
+
|
106
|
+
describe '#client' do
|
107
|
+
example do
|
108
|
+
expect(GStore::Client).to receive(:new).with(
|
109
|
+
:access_key => 'qwertyuiopasdfghjklz',
|
110
|
+
:secret_key => 'qwertyuiopasdfghjklzqwertyuiopasdfghjklz'
|
111
|
+
)
|
112
|
+
provider.client
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|