dpl 1.8.48.travis.2486.5 → 1.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitignore +2 -0
- data/.travis.yml +42 -21
- data/Gemfile +3 -98
- data/README.md +5 -16
- data/Rakefile +160 -1
- data/dpl-anynines.gemspec +3 -0
- data/dpl-atlas.gemspec +3 -0
- data/dpl-azure_webapps.gemspec +3 -0
- data/dpl-bintray.gemspec +3 -0
- data/dpl-bitballoon.gemspec +3 -0
- data/dpl-bluemix_cloud_foundry.gemspec +3 -0
- data/dpl-boxfuse.gemspec +3 -0
- data/dpl-catalyze.gemspec +3 -0
- data/dpl-chef_supermarket.gemspec +8 -0
- data/dpl-cloud66.gemspec +3 -0
- data/dpl-cloud_files.gemspec +3 -0
- data/dpl-cloud_foundry.gemspec +3 -0
- data/dpl-code_deploy.gemspec +3 -0
- data/dpl-deis.gemspec +3 -0
- data/dpl-divshot.gemspec +3 -0
- data/dpl-elastic_beanstalk.gemspec +3 -0
- data/dpl-engine_yard.gemspec +3 -0
- data/dpl-firebase.gemspec +3 -0
- data/dpl-gae.gemspec +3 -0
- data/dpl-gcs.gemspec +3 -0
- data/dpl-hackage.gemspec +3 -0
- data/dpl-heroku.gemspec +3 -0
- data/dpl-lambda.gemspec +3 -0
- data/dpl-launchpad.gemspec +3 -0
- data/dpl-modulus.gemspec +3 -0
- data/dpl-npm.gemspec +3 -0
- data/dpl-openshift.gemspec +3 -0
- data/dpl-ops_works.gemspec +3 -0
- data/dpl-packagecloud.gemspec +3 -0
- data/dpl-pages.gemspec +3 -0
- data/dpl-puppet_forge.gemspec +3 -0
- data/dpl-pypi.gemspec +3 -0
- data/dpl-releases.gemspec +3 -0
- data/dpl-rubygems.gemspec +3 -0
- data/dpl-s3.gemspec +3 -0
- data/dpl-scalingo.gemspec +3 -0
- data/dpl-script.gemspec +3 -0
- data/dpl-surge.gemspec +3 -0
- data/dpl-testfairy.gemspec +3 -0
- data/dpl-transifex.gemspec +3 -0
- data/dpl.gemspec +2 -31
- data/gemspec_helper.rb +49 -0
- data/lib/dpl/provider.rb +101 -58
- data/lib/dpl/version.rb +1 -1
- data/spec/provider_spec.rb +15 -34
- metadata +76 -107
- data/lib/dpl/provider/anynines.rb +0 -13
- data/lib/dpl/provider/appfog.rb +0 -21
- data/lib/dpl/provider/atlas.rb +0 -108
- data/lib/dpl/provider/azure_webapps.rb +0 -48
- data/lib/dpl/provider/bintray.rb +0 -509
- data/lib/dpl/provider/bitballoon.rb +0 -22
- data/lib/dpl/provider/bluemix_cloud_foundry.rb +0 -23
- data/lib/dpl/provider/boxfuse.rb +0 -57
- data/lib/dpl/provider/catalyze.rb +0 -49
- data/lib/dpl/provider/chef_supermarket.rb +0 -85
- data/lib/dpl/provider/cloud66.rb +0 -38
- data/lib/dpl/provider/cloud_files.rb +0 -38
- data/lib/dpl/provider/cloud_foundry.rb +0 -43
- data/lib/dpl/provider/code_deploy.rb +0 -154
- data/lib/dpl/provider/deis.rb +0 -128
- data/lib/dpl/provider/divshot.rb +0 -23
- data/lib/dpl/provider/elastic_beanstalk.rb +0 -195
- data/lib/dpl/provider/engine_yard.rb +0 -90
- data/lib/dpl/provider/firebase.rb +0 -27
- data/lib/dpl/provider/gae.rb +0 -97
- data/lib/dpl/provider/gcs.rb +0 -59
- data/lib/dpl/provider/hackage.rb +0 -29
- data/lib/dpl/provider/heroku.rb +0 -18
- data/lib/dpl/provider/heroku/api.rb +0 -98
- data/lib/dpl/provider/heroku/generic.rb +0 -94
- data/lib/dpl/provider/heroku/git.rb +0 -28
- data/lib/dpl/provider/lambda.rb +0 -236
- data/lib/dpl/provider/launchpad.rb +0 -48
- data/lib/dpl/provider/modulus.rb +0 -23
- data/lib/dpl/provider/npm.rb +0 -64
- data/lib/dpl/provider/openshift.rb +0 -59
- data/lib/dpl/provider/ops_works.rb +0 -132
- data/lib/dpl/provider/packagecloud.rb +0 -144
- data/lib/dpl/provider/pages.rb +0 -212
- data/lib/dpl/provider/puppet_forge.rb +0 -43
- data/lib/dpl/provider/pypi.rb +0 -103
- data/lib/dpl/provider/releases.rb +0 -139
- data/lib/dpl/provider/rubygems.rb +0 -51
- data/lib/dpl/provider/s3.rb +0 -123
- data/lib/dpl/provider/scalingo.rb +0 -97
- data/lib/dpl/provider/script.rb +0 -29
- data/lib/dpl/provider/surge.rb +0 -33
- data/lib/dpl/provider/testfairy.rb +0 -111
- data/lib/dpl/provider/transifex.rb +0 -45
- data/spec/provider/anynines_spec.rb +0 -20
- data/spec/provider/appfog_spec.rb +0 -35
- data/spec/provider/atlas_spec.rb +0 -99
- data/spec/provider/azure_webapps_spec.rb +0 -95
- data/spec/provider/bintray_spec.rb +0 -259
- data/spec/provider/bitballoon_spec.rb +0 -32
- data/spec/provider/bluemixcloudfoundry_spec.rb +0 -23
- data/spec/provider/boxfuse_spec.rb +0 -16
- data/spec/provider/catalyze_spec.rb +0 -39
- data/spec/provider/chef_supermarket_spec.rb +0 -51
- data/spec/provider/cloud66_spec.rb +0 -44
- data/spec/provider/cloud_files_spec.rb +0 -88
- data/spec/provider/cloudfoundry_spec.rb +0 -71
- data/spec/provider/code_deploy_spec.rb +0 -366
- data/spec/provider/deis_spec.rb +0 -116
- data/spec/provider/divshot_spec.rb +0 -28
- data/spec/provider/elastic_beanstalk_spec.rb +0 -209
- data/spec/provider/firebase_spec.rb +0 -40
- data/spec/provider/gae_spec.rb +0 -26
- data/spec/provider/gcs_spec.rb +0 -115
- data/spec/provider/hackage_spec.rb +0 -47
- data/spec/provider/heroku_spec.rb +0 -357
- data/spec/provider/lambda_spec.rb +0 -432
- data/spec/provider/launchpad_spec.rb +0 -33
- data/spec/provider/modulus_spec.rb +0 -29
- data/spec/provider/npm_spec.rb +0 -95
- data/spec/provider/openshift_spec.rb +0 -91
- data/spec/provider/ops_works_spec.rb +0 -127
- data/spec/provider/packagecloud_spec.rb +0 -56
- data/spec/provider/puppet_forge_spec.rb +0 -60
- data/spec/provider/pypi_spec.rb +0 -105
- data/spec/provider/releases_spec.rb +0 -303
- data/spec/provider/rubygems_spec.rb +0 -106
- data/spec/provider/s3_spec.rb +0 -174
- data/spec/provider/scalingo_spec.rb +0 -64
- data/spec/provider/script_spec.rb +0 -26
- data/spec/provider/surge_spec.rb +0 -15
- data/spec/provider/testfairy_spec.rb +0 -65
- data/spec/provider/transifex_spec.rb +0 -110
data/dpl-boxfuse.gemspec
ADDED
data/dpl-cloud66.gemspec
ADDED
data/dpl-deis.gemspec
ADDED
data/dpl-divshot.gemspec
ADDED
data/dpl-gae.gemspec
ADDED
data/dpl-gcs.gemspec
ADDED
data/dpl-hackage.gemspec
ADDED
data/dpl-heroku.gemspec
ADDED
data/dpl-lambda.gemspec
ADDED
data/dpl-modulus.gemspec
ADDED
data/dpl-npm.gemspec
ADDED
data/dpl-pages.gemspec
ADDED
data/dpl-pypi.gemspec
ADDED
data/dpl-s3.gemspec
ADDED
data/dpl-script.gemspec
ADDED
data/dpl-surge.gemspec
ADDED
data/dpl.gemspec
CHANGED
@@ -1,32 +1,3 @@
|
|
1
|
-
|
2
|
-
require "dpl/version"
|
1
|
+
require './gemspec_helper'
|
3
2
|
|
4
|
-
|
5
|
-
s.name = "dpl"
|
6
|
-
s.version = DPL::VERSION
|
7
|
-
s.author = "Konstantin Haase"
|
8
|
-
s.email = "konstantin.mailinglists@googlemail.com"
|
9
|
-
s.homepage = "https://github.com/travis-ci/dpl"
|
10
|
-
s.summary = %q{deploy tool}
|
11
|
-
s.description = %q{deploy tool abstraction for clients}
|
12
|
-
s.license = 'MIT'
|
13
|
-
s.files = `git ls-files`.split("\n")
|
14
|
-
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
15
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
16
|
-
s.require_path = 'lib'
|
17
|
-
s.required_ruby_version = '>= 1.9.3'
|
18
|
-
|
19
|
-
s.add_development_dependency 'rspec', '~> 3.0.0'
|
20
|
-
s.add_development_dependency 'rspec-its'
|
21
|
-
s.add_development_dependency 'rake'
|
22
|
-
s.add_development_dependency 'json', '1.8.3'
|
23
|
-
s.add_development_dependency 'tins', '~> 1.6.0', '>= 1.6.0'
|
24
|
-
s.add_development_dependency 'coveralls'
|
25
|
-
|
26
|
-
# prereleases from Travis CI
|
27
|
-
if ENV['CI']
|
28
|
-
digits = s.version.to_s.split '.'
|
29
|
-
digits[-1] = digits[-1].to_s.succ
|
30
|
-
s.version = digits.join('.') + ".travis.#{ENV['TRAVIS_JOB_NUMBER']}"
|
31
|
-
end
|
32
|
-
end
|
3
|
+
gemspec_for
|
data/gemspec_helper.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
$:.unshift File.expand_path("../lib", __FILE__)
|
2
|
+
require "dpl/version"
|
3
|
+
|
4
|
+
def gemspec_for(provider_name=nil, runtime_dependencies=[])
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
|
7
|
+
s.name = ["dpl", provider_name].compact.join("-")
|
8
|
+
s.author = "Konstantin Haase"
|
9
|
+
s.email = "konstantin.mailinglists@googlemail.com"
|
10
|
+
s.homepage = "https://github.com/travis-ci/dpl"
|
11
|
+
s.summary = %q{deploy tool}
|
12
|
+
s.description = %q{deploy tool abstraction for clients}
|
13
|
+
s.license = 'MIT'
|
14
|
+
|
15
|
+
s.require_path = 'lib'
|
16
|
+
s.required_ruby_version = '>= 2.2'
|
17
|
+
|
18
|
+
# set up version
|
19
|
+
s.version = ENV['DPL_VERSION'] || DPL::VERSION
|
20
|
+
|
21
|
+
# dependencies
|
22
|
+
if provider_name
|
23
|
+
s.add_runtime_dependency 'dpl', s.version
|
24
|
+
end
|
25
|
+
|
26
|
+
runtime_dependencies.each do |part|
|
27
|
+
s.add_runtime_dependency *part
|
28
|
+
end
|
29
|
+
|
30
|
+
s.add_development_dependency 'rspec'
|
31
|
+
s.add_development_dependency 'rspec-its'
|
32
|
+
s.add_development_dependency 'rake'
|
33
|
+
s.add_development_dependency 'json_pure'
|
34
|
+
s.add_development_dependency 'tins'
|
35
|
+
s.add_development_dependency 'coveralls'
|
36
|
+
s.add_development_dependency 'highline'
|
37
|
+
|
38
|
+
# set up files
|
39
|
+
if provider_name
|
40
|
+
s.files = `git ls-files`.split("\n").grep(Regexp.new provider_name.to_s)
|
41
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n").grep(Regexp.new provider_name.to_s)
|
42
|
+
else
|
43
|
+
s.files = `git ls-files`.split("\n").reject {|f| f =~ Regexp.new("provider/")}
|
44
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n").reject {|f| f =~ Regexp.new("provider/")}
|
45
|
+
end
|
46
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }.grep(Regexp.new provider_name.to_s)
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
data/lib/dpl/provider.rb
CHANGED
@@ -6,58 +6,105 @@ module DPL
|
|
6
6
|
class Provider
|
7
7
|
include FileUtils
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
9
|
+
# map of DPL provider class name constants to their corresponding
|
10
|
+
# file names. There is no simple rule to map them automatically
|
11
|
+
# (camel-cases, snake-cases, call-caps, etc.), so we need an explicit
|
12
|
+
# map.
|
13
|
+
GEM_NAME_OF = {
|
14
|
+
'Anynines' => 'anynines',
|
15
|
+
'Appfog' => 'appfog',
|
16
|
+
'Atlas' => 'atlas',
|
17
|
+
'AzureWebApps' => 'azure_webapps',
|
18
|
+
'Bintray' => 'bintray',
|
19
|
+
'BitBalloon' => 'bitballoon',
|
20
|
+
'BluemixCloudFoundry' => 'bluemix_cloud_foundry',
|
21
|
+
'Boxfuse' => 'boxfuse',
|
22
|
+
'Catalyze' => 'catalyze',
|
23
|
+
'ChefSupermarket' => 'chef_supermarket',
|
24
|
+
'Cloud66' => 'cloud66',
|
25
|
+
'CloudFiles' => 'cloud_files',
|
26
|
+
'CloudFoundry' => 'cloud_foundry',
|
27
|
+
'CodeDeploy' => 'code_deploy',
|
28
|
+
'Deis' => 'deis',
|
29
|
+
'Divshot' => 'divshot',
|
30
|
+
'ElasticBeanstalk' => 'elastic_beanstalk',
|
31
|
+
'EngineYard' => 'engine_yard',
|
32
|
+
'Firebase' => 'firebase',
|
33
|
+
'GAE' => 'gae',
|
34
|
+
'GCS' => 'gcs',
|
35
|
+
'Hackage' => 'hackage',
|
36
|
+
'Heroku' => 'heroku',
|
37
|
+
'Lambda' => 'lambda',
|
38
|
+
'Launchpad' => 'launchpad',
|
39
|
+
'Modulus' => 'modulus',
|
40
|
+
'Nodejitsu' => 'nodejitsu',
|
41
|
+
'NPM' => 'npm',
|
42
|
+
'Openshift' => 'openshift',
|
43
|
+
'OpsWorks' => 'ops_works',
|
44
|
+
'Packagecloud' => 'packagecloud',
|
45
|
+
'Pages' => 'pages',
|
46
|
+
'PuppetForge' => 'puppet_forge',
|
47
|
+
'PyPI' => 'pypi',
|
48
|
+
'Releases' => 'releases',
|
49
|
+
'RubyGems' => 'rubygems',
|
50
|
+
'S3' => 's3',
|
51
|
+
'Scalingo' => 'scalingo',
|
52
|
+
'Script' => 'script',
|
53
|
+
'Surge' => 'surge',
|
54
|
+
'TestFairy' => 'testfairy',
|
55
|
+
'Transifex' => 'transifex',
|
56
|
+
}
|
52
57
|
|
53
58
|
def self.new(context, options)
|
54
59
|
return super if self < Provider
|
55
60
|
|
61
|
+
# when requiring the file corresponding to the provider name
|
62
|
+
# given in the options, the general strategy is to normalize
|
63
|
+
# the option to lower-case alphanumeric, then
|
64
|
+
# use that key to find the file name using the GEM_NAME_OF map.
|
65
|
+
|
56
66
|
context.fold("Installing deploy dependencies") do
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
67
|
+
begin
|
68
|
+
opt_lower = super.option(:provider).to_s.downcase
|
69
|
+
opt = opt_lower.gsub(/[^a-z0-9]/, '')
|
70
|
+
class_name = class_of(opt)
|
71
|
+
raise Error, "could not find provider %p" % opt unless class_name
|
72
|
+
require "dpl/provider/#{GEM_NAME_OF[class_name]}"
|
73
|
+
provider = const_get(class_name).new(context, options)
|
74
|
+
rescue NameError, LoadError => e
|
75
|
+
if /uninitialized constant DPL::Provider::(?<provider_wanted>\S+)/ =~ e.message
|
76
|
+
provider_gem_name = GEM_NAME_OF[provider_wanted]
|
77
|
+
elsif %r(cannot load such file -- dpl/provider/(?<provider_file_name>\S+)) =~ e.message
|
78
|
+
provider_gem_name = GEM_NAME_OF[class_name]
|
79
|
+
else
|
80
|
+
# don't know what to do with this error
|
81
|
+
raise e
|
82
|
+
end
|
83
|
+
install_cmd = "gem install dpl-#{provider_gem_name || opt} -v #{ENV['DPL_VERSION'] || DPL::VERSION}"
|
84
|
+
|
85
|
+
if File.exist?(local_gem = File.join(Dir.pwd, "dpl-#{GEM_NAME_OF[provider_gem_name] || opt_lower}-#{ENV['DPL_VERSION'] || DPL::VERSION}.gem"))
|
86
|
+
install_cmd = "gem install #{local_gem}"
|
87
|
+
end
|
88
|
+
|
89
|
+
context.shell(install_cmd)
|
90
|
+
Gem.clear_paths
|
91
|
+
|
92
|
+
require "dpl/provider/#{GEM_NAME_OF[class_name]}"
|
93
|
+
provider = const_get(class_name).new(context, options)
|
94
|
+
rescue DPL::Error
|
95
|
+
if opt_lower
|
96
|
+
provider = const_get(opt.capitalize).new(context, options)
|
97
|
+
else
|
98
|
+
raise Error, 'missing provider'
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
if options[:no_deploy]
|
103
|
+
def provider.deploy; end
|
104
|
+
else
|
105
|
+
provider.install_deploy_dependencies if provider.respond_to? :install_deploy_dependencies
|
106
|
+
end
|
107
|
+
|
61
108
|
provider
|
62
109
|
end
|
63
110
|
end
|
@@ -74,17 +121,6 @@ module DPL
|
|
74
121
|
puts ''
|
75
122
|
end
|
76
123
|
|
77
|
-
def self.requires(name, options = {})
|
78
|
-
version = options[:version] || '> 0'
|
79
|
-
load = options[:load] || name
|
80
|
-
gem(name, version)
|
81
|
-
rescue LoadError
|
82
|
-
context.shell("gem install %s -v %p --no-ri --no-rdoc #{'--pre' if options[:pre]}" % [name, version], retry: true)
|
83
|
-
Gem.clear_paths
|
84
|
-
ensure
|
85
|
-
require load
|
86
|
-
end
|
87
|
-
|
88
124
|
def self.context
|
89
125
|
self
|
90
126
|
end
|
@@ -113,6 +149,10 @@ module DPL
|
|
113
149
|
context.shell("npm install -g #{name}", retry: true) if `which #{command}`.chop.empty?
|
114
150
|
end
|
115
151
|
|
152
|
+
def self.class_of(filename)
|
153
|
+
GEM_NAME_OF.keys.detect { |p| p.to_s.downcase == filename }
|
154
|
+
end
|
155
|
+
|
116
156
|
attr_reader :context, :options
|
117
157
|
|
118
158
|
def initialize(context, options)
|
@@ -231,6 +271,9 @@ module DPL
|
|
231
271
|
options[:default_text_charset].downcase
|
232
272
|
end
|
233
273
|
|
274
|
+
def install_deploy_dependencies
|
275
|
+
end
|
276
|
+
|
234
277
|
def encoding_for(path)
|
235
278
|
file_cmd_output = `file '#{path}'`
|
236
279
|
case file_cmd_output
|