dpl 2.0.3.beta.4 → 2.0.3.beta.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +15 -3
- data/Gemfile.lock +444 -211
- data/Rakefile +36 -34
- data/bin/dpl +3 -1
- data/dpl.gemspec +25 -0
- data/lib/dpl/cli.rb +19 -14
- data/lib/dpl/ctx/bash.rb +18 -12
- data/lib/dpl/ctx/test.rb +21 -15
- data/lib/dpl/ctx.rb +2 -0
- data/lib/dpl/helper/assets.rb +4 -2
- data/lib/dpl/helper/cmd.rb +20 -18
- data/lib/dpl/helper/config_file.rb +5 -3
- data/lib/dpl/helper/cookbook_site_streaming_uploader.rb +249 -0
- data/lib/dpl/helper/env.rb +26 -22
- data/lib/dpl/helper/github.rb +2 -0
- data/lib/dpl/helper/interpolate.rb +8 -4
- data/lib/dpl/helper/memoize.rb +4 -1
- data/lib/dpl/helper/squiggle.rb +3 -1
- data/lib/dpl/helper/transliterate.rb +3 -1
- data/lib/dpl/helper/wrap.rb +3 -1
- data/lib/dpl/helper/zip.rb +3 -1
- data/lib/dpl/provider/dsl.rb +18 -4
- data/lib/dpl/provider/examples.rb +6 -2
- data/lib/dpl/provider/status.rb +26 -24
- data/lib/dpl/providers/anynines.rb +22 -20
- data/lib/dpl/providers/azure_web_apps.rb +21 -19
- data/lib/dpl/providers/bintray.rb +44 -37
- data/lib/dpl/providers/bluemixcloudfoundry.rb +38 -36
- data/lib/dpl/providers/boxfuse.rb +12 -10
- data/lib/dpl/providers/cargo.rb +7 -5
- data/lib/dpl/providers/chef_supermarket.rb +82 -80
- data/lib/dpl/providers/cloud66.rb +17 -15
- data/lib/dpl/providers/cloudfiles.rb +8 -6
- data/lib/dpl/providers/cloudformation.rb +191 -187
- data/lib/dpl/providers/cloudfoundry.rb +32 -30
- data/lib/dpl/providers/codedeploy.rb +35 -33
- data/lib/dpl/providers/convox.rb +32 -25
- data/lib/dpl/providers/datica.rb +30 -28
- data/lib/dpl/providers/ecr.rb +66 -64
- data/lib/dpl/providers/elasticbeanstalk.rb +14 -12
- data/lib/dpl/providers/engineyard.rb +60 -58
- data/lib/dpl/providers/firebase.rb +6 -4
- data/lib/dpl/providers/flynn.rb +8 -6
- data/lib/dpl/providers/gae.rb +28 -25
- data/lib/dpl/providers/gcs.rb +59 -57
- data/lib/dpl/providers/git_push.rb +199 -195
- data/lib/dpl/providers/gleis.rb +19 -17
- data/lib/dpl/providers/hackage.rb +15 -13
- data/lib/dpl/providers/hephy.rb +18 -16
- data/lib/dpl/providers/heroku/api.rb +72 -70
- data/lib/dpl/providers/heroku/git.rb +15 -13
- data/lib/dpl/providers/heroku.rb +40 -38
- data/lib/dpl/providers/lambda.rb +134 -134
- data/lib/dpl/providers/launchpad.rb +45 -43
- data/lib/dpl/providers/netlify.rb +7 -5
- data/lib/dpl/providers/npm.rb +61 -58
- data/lib/dpl/providers/nuget.rb +8 -6
- data/lib/dpl/providers/openshift.rb +8 -6
- data/lib/dpl/providers/opsworks.rb +23 -21
- data/lib/dpl/providers/pages/api.rb +14 -14
- data/lib/dpl/providers/pages/git.rb +53 -47
- data/lib/dpl/providers/pages.rb +3 -1
- data/lib/dpl/providers/puppetforge.rb +6 -4
- data/lib/dpl/providers/pypi.rb +55 -54
- data/lib/dpl/providers/releases.rb +30 -23
- data/lib/dpl/providers/rubygems.rb +35 -31
- data/lib/dpl/providers/s3.rb +148 -142
- data/lib/dpl/providers/scalingo.rb +18 -16
- data/lib/dpl/providers/script.rb +4 -2
- data/lib/dpl/providers/snap.rb +12 -9
- data/lib/dpl/providers/surge.rb +7 -5
- data/lib/dpl/providers/testfairy.rb +47 -43
- data/lib/dpl/providers/transifex.rb +20 -18
- data/lib/dpl/providers.rb +3 -1
- data/lib/dpl/string_ext.rb +3 -1
- data/lib/dpl/support/aws_sdk_patch.rb +4 -1
- data/lib/dpl/support/gems.rb +7 -3
- data/lib/dpl/support/gstore_patch.rb +3 -1
- data/lib/dpl/support/version.rb +13 -12
- data/lib/dpl/version.rb +3 -1
- data/lib/dpl.rb +2 -0
- data/status.json +237 -0
- metadata +32 -15
- /data/lib/dpl/providers/{packagecloud.rb → packagecloud.rb_} +0 -0
data/Rakefile
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'bundler'
|
|
2
4
|
require 'term/ansicolor'
|
|
3
5
|
require 'pathname'
|
|
@@ -26,7 +28,7 @@ def gem_version
|
|
|
26
28
|
ENV['DPL_VERSION'] || Dpl::VERSION
|
|
27
29
|
end
|
|
28
30
|
|
|
29
|
-
def confirm(verb =
|
|
31
|
+
def confirm(verb = 'release')
|
|
30
32
|
unless @ready
|
|
31
33
|
answer = cli.ask "Ready to #{verb} `dpl` version #{gem_version}? (y/n)"
|
|
32
34
|
if answer !~ /^y/i
|
|
@@ -41,63 +43,63 @@ def dpl_bin
|
|
|
41
43
|
File.join(Gem.bindir, 'dpl')
|
|
42
44
|
end
|
|
43
45
|
|
|
44
|
-
gemspecs = FileList[File.join(top,
|
|
46
|
+
gemspecs = FileList[File.join(top, 'dpl-*.gemspec')]
|
|
45
47
|
|
|
46
48
|
providers = gemspecs.map { |f| /dpl-(?<provider>.*)\.gemspec/ =~ f && provider }
|
|
47
49
|
|
|
48
|
-
desc
|
|
50
|
+
desc 'Build dpl gem'
|
|
49
51
|
file "dpl-#{gem_version}.gem" do
|
|
50
|
-
logger.info green(
|
|
51
|
-
ruby
|
|
52
|
+
logger.info green('Building dpl gem')
|
|
53
|
+
ruby '-S gem build dpl.gemspec'
|
|
52
54
|
end
|
|
53
55
|
|
|
54
|
-
desc
|
|
56
|
+
desc 'Install dpl gem'
|
|
55
57
|
file dpl_bin => "dpl-#{gem_version}.gem" do
|
|
56
|
-
logger.info green(
|
|
58
|
+
logger.info green('Installing dpl gem')
|
|
57
59
|
ruby "-S gem install dpl-#{gem_version}.gem"
|
|
58
60
|
end
|
|
59
61
|
|
|
60
|
-
task :
|
|
61
|
-
Rake::Task[
|
|
62
|
-
Rake::Task[
|
|
62
|
+
task default: [:spec, Rake::FileTask[dpl_bin]] do
|
|
63
|
+
Rake::Task['spec_providers'].invoke
|
|
64
|
+
Rake::Task['check_providers'].invoke
|
|
63
65
|
end
|
|
64
66
|
|
|
65
|
-
desc
|
|
67
|
+
desc 'Run spec on all providers'
|
|
66
68
|
task :spec_providers do
|
|
67
69
|
providers.each do |provider|
|
|
68
70
|
Rake::Task["spec-#{provider}"].invoke
|
|
69
71
|
end
|
|
70
72
|
end
|
|
71
73
|
|
|
72
|
-
desc
|
|
74
|
+
desc 'Check all provider gems install correctly'
|
|
73
75
|
task :check_providers do
|
|
74
76
|
providers.each do |provider|
|
|
75
77
|
Rake::Task["check-#{provider}"].invoke
|
|
76
78
|
end
|
|
77
79
|
end
|
|
78
80
|
|
|
79
|
-
desc
|
|
80
|
-
task :
|
|
81
|
+
desc 'Build all gems'
|
|
82
|
+
task build: "dpl-#{gem_version}.gem" do
|
|
81
83
|
providers.each do |provider|
|
|
82
84
|
Rake::Task["dpl-#{provider}-#{gem_version}.gem"].invoke
|
|
83
85
|
end
|
|
84
86
|
end
|
|
85
87
|
|
|
86
|
-
desc
|
|
88
|
+
desc 'Uninstall all gems'
|
|
87
89
|
task :uninstall do
|
|
88
90
|
providers.each do |provider|
|
|
89
91
|
Rake::Task["uninstall-#{provider}"].invoke
|
|
90
92
|
end
|
|
91
|
-
logger.info red(
|
|
92
|
-
sh
|
|
93
|
+
logger.info red('Uninstalling dpl')
|
|
94
|
+
sh 'gem uninstall -aIx dpl'
|
|
93
95
|
end
|
|
94
96
|
|
|
95
|
-
desc
|
|
97
|
+
desc 'Release all gems'
|
|
96
98
|
task :release do
|
|
97
99
|
confirm
|
|
98
100
|
released = []
|
|
99
101
|
providers.each do |provider|
|
|
100
|
-
|
|
102
|
+
until released.include? provider
|
|
101
103
|
logger.info "checking dpl-#{provider}"
|
|
102
104
|
|
|
103
105
|
cli = Faraday.new url: 'https://rubygems.org'
|
|
@@ -113,12 +115,12 @@ task :release do
|
|
|
113
115
|
if Rake::Task["release-#{provider}"].invoke
|
|
114
116
|
released << provider
|
|
115
117
|
end
|
|
116
|
-
rescue
|
|
118
|
+
rescue StandardError
|
|
117
119
|
Rake::Task["release-#{provider}"].reenable
|
|
118
120
|
end
|
|
119
121
|
end
|
|
120
|
-
rescue Faraday::Error
|
|
121
|
-
logger.info yellow(
|
|
122
|
+
rescue Faraday::Error
|
|
123
|
+
logger.info yellow('connection failed. retrying')
|
|
122
124
|
retry
|
|
123
125
|
end
|
|
124
126
|
end
|
|
@@ -127,10 +129,10 @@ task :release do
|
|
|
127
129
|
sh "gem push dpl-#{gem_version}.gem"
|
|
128
130
|
end
|
|
129
131
|
|
|
130
|
-
desc
|
|
131
|
-
task :yank, [:version] do |
|
|
132
|
+
desc 'Yank all gems'
|
|
133
|
+
task :yank, [:version] do |_t, args|
|
|
132
134
|
version = args.version
|
|
133
|
-
confirm
|
|
135
|
+
confirm 'yank'
|
|
134
136
|
logger.info green("Yanking `dpl` version #{version}")
|
|
135
137
|
sh "gem yank dpl -v #{version}"
|
|
136
138
|
providers.each do |provider|
|
|
@@ -140,17 +142,17 @@ end
|
|
|
140
142
|
|
|
141
143
|
task :deep_clean do
|
|
142
144
|
Rake::Task[:clean].invoke
|
|
143
|
-
sh
|
|
145
|
+
sh 'git clean -dfx'
|
|
144
146
|
end
|
|
145
147
|
|
|
146
148
|
task :clean do
|
|
147
|
-
rm_rf
|
|
148
|
-
rm_rf
|
|
149
|
-
rm_rf
|
|
149
|
+
rm_rf 'stubs'
|
|
150
|
+
rm_rf 'vendor'
|
|
151
|
+
rm_rf 'dpl-*.gem'
|
|
150
152
|
Rake::Task[:uninstall].invoke
|
|
151
153
|
end
|
|
152
154
|
|
|
153
|
-
desc
|
|
155
|
+
desc 'Run dpl specs'
|
|
154
156
|
task :spec do
|
|
155
157
|
ruby '-S rspec spec/cli_spec.rb spec/provider_spec.rb'
|
|
156
158
|
end
|
|
@@ -160,13 +162,13 @@ providers.each do |provider|
|
|
|
160
162
|
file "Gemfile-#{provider}" do |t|
|
|
161
163
|
gemfile = top + t.name
|
|
162
164
|
logger.info green("Writing #{gemfile}")
|
|
163
|
-
gemfile.write %
|
|
165
|
+
gemfile.write %(source 'https://rubygems.org'\ngemspec :name => "dpl-#{provider}"\n)
|
|
164
166
|
end
|
|
165
167
|
|
|
166
|
-
desc %
|
|
168
|
+
desc %(Run dpl-#{provider} specs)
|
|
167
169
|
task "spec-#{provider}", [:lines] => [Rake::FileTask[dpl_bin], "Gemfile-#{provider}"] do |_t, args|
|
|
168
|
-
tail = args.lines ? ":#{args.lines}" :
|
|
169
|
-
sh
|
|
170
|
+
tail = args.lines ? ":#{args.lines}" : ''
|
|
171
|
+
sh 'rm -f $HOME/.npmrc'
|
|
170
172
|
logger.info green("Running `bundle install` for #{provider}")
|
|
171
173
|
sh 'bash', '-cl', "bundle install --gemfile=Gemfile-#{provider} --path=vendor/cache/dpl-#{provider} --retry=3 --binstubs=stubs"
|
|
172
174
|
logger.info green("Running specs for #{provider}")
|
data/bin/dpl
CHANGED
data/dpl.gemspec
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
$LOAD_PATH << 'lib'
|
|
4
|
+
|
|
5
|
+
require 'dpl/version'
|
|
6
|
+
|
|
7
|
+
Gem::Specification.new do |s|
|
|
8
|
+
s.version = Dpl::VERSION
|
|
9
|
+
s.name = 'dpl'
|
|
10
|
+
s.authors = ['Konstantin Haase', 'Hiro Asari', 'Sven Fuchs']
|
|
11
|
+
s.email = ['konstantin@travis-ci.com', 'hiro@travis-ci.com', 'sven@travis-ci.com']
|
|
12
|
+
s.homepage = 'https://github.com/travis-ci/dpl'
|
|
13
|
+
s.summary = 'Dpl runs deployments at Travis CI'
|
|
14
|
+
s.description = 'Dpl (dee-pee-ell) is a tool made for continuous deployment, running deployments at Travis CI.'
|
|
15
|
+
s.license = 'MIT'
|
|
16
|
+
s.require_path = 'lib'
|
|
17
|
+
s.required_ruby_version = '>= 3'
|
|
18
|
+
|
|
19
|
+
s.executables = ['dpl']
|
|
20
|
+
s.files = Dir['{config/**/*,lib/**/*,[A-Z]*}'].reject { _1.match(/dpl.+\.gem/) }
|
|
21
|
+
|
|
22
|
+
s.add_runtime_dependency 'travis-cl'
|
|
23
|
+
s.add_runtime_dependency 'travis-packagecloud-ruby'
|
|
24
|
+
s.add_development_dependency 'rake', '~> 13.0'
|
|
25
|
+
end
|
data/lib/dpl/cli.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'cl'
|
|
2
4
|
|
|
3
5
|
module Dpl
|
|
@@ -47,6 +49,7 @@ module Dpl
|
|
|
47
49
|
|
|
48
50
|
def with_cmd_opt(args, cmd, pos)
|
|
49
51
|
return args unless opt = args.detect { |arg| arg.start_with?("--#{cmd}") }
|
|
52
|
+
|
|
50
53
|
ix = args.index(opt)
|
|
51
54
|
args.delete(opt)
|
|
52
55
|
value = opt.include?('=') ? opt.split('=').last : args.delete_at(ix)
|
|
@@ -56,39 +59,41 @@ module Dpl
|
|
|
56
59
|
|
|
57
60
|
STRATEGIES = {
|
|
58
61
|
'heroku' => 'api',
|
|
59
|
-
'pages'
|
|
60
|
-
}
|
|
62
|
+
'pages' => 'git'
|
|
63
|
+
}.freeze
|
|
61
64
|
|
|
62
|
-
def with_strategy_default(args,
|
|
65
|
+
def with_strategy_default(args, _cmd)
|
|
63
66
|
return args unless default = STRATEGIES[args.first]
|
|
67
|
+
|
|
64
68
|
args.insert(1, default) if args[1].nil? || args[1].to_s.start_with?('--')
|
|
65
69
|
args
|
|
66
70
|
end
|
|
67
71
|
|
|
68
|
-
def error(
|
|
69
|
-
msg = "\e[31m#{
|
|
70
|
-
msg = [msg, *
|
|
72
|
+
def error(err)
|
|
73
|
+
msg = "\e[31m#{err.message}\e[0m"
|
|
74
|
+
msg = [msg, *err.backtrace].join("\n") if backtrace?(err)
|
|
71
75
|
abort msg
|
|
72
76
|
end
|
|
73
77
|
|
|
74
|
-
def backtrace?(
|
|
75
|
-
|
|
78
|
+
def backtrace?(err)
|
|
79
|
+
err.respond_to?(:backtrace?) && err.backtrace?
|
|
76
80
|
end
|
|
77
81
|
|
|
78
|
-
def unknown_provider(
|
|
79
|
-
msg = "\e[31m#{
|
|
80
|
-
msg << "\nDid you mean: #{
|
|
82
|
+
def unknown_provider(err)
|
|
83
|
+
msg = "\e[31m#{err.message}\e[0m"
|
|
84
|
+
msg << "\nDid you mean: #{err.suggestions.join(', ')}?" if err.suggestions.any?
|
|
81
85
|
abort msg
|
|
82
86
|
end
|
|
83
87
|
|
|
84
|
-
def unknown_option(
|
|
85
|
-
msg = "\e[31m#{
|
|
86
|
-
msg << "\nDid you mean: #{
|
|
88
|
+
def unknown_option(err)
|
|
89
|
+
msg = "\e[31m#{err.message}\e[0m"
|
|
90
|
+
msg << "\nDid you mean: #{err.suggestions.join(', ')}?" if err.suggestions.any?
|
|
87
91
|
abort msg
|
|
88
92
|
end
|
|
89
93
|
|
|
90
94
|
def suggestions(name)
|
|
91
95
|
return [] unless defined?(DidYouMean)
|
|
96
|
+
|
|
92
97
|
DidYouMean::SpellChecker.new(dictionary: providers).correct(name)
|
|
93
98
|
end
|
|
94
99
|
end
|
data/lib/dpl/ctx/bash.rb
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'English'
|
|
1
4
|
require 'cl'
|
|
2
5
|
require 'fileutils'
|
|
3
6
|
require 'logger'
|
|
@@ -14,7 +17,8 @@ module Dpl
|
|
|
14
17
|
attr_accessor :folds, :stdout, :stderr, :last_out, :last_err
|
|
15
18
|
|
|
16
19
|
def initialize(stdout = $stdout, stderr = $stderr)
|
|
17
|
-
@stdout
|
|
20
|
+
@stdout = stdout
|
|
21
|
+
@stderr = stderr
|
|
18
22
|
@folds = 0
|
|
19
23
|
super('dpl', abort: false)
|
|
20
24
|
end
|
|
@@ -25,7 +29,7 @@ module Dpl
|
|
|
25
29
|
# closes the fold.
|
|
26
30
|
#
|
|
27
31
|
# @param msg [String] the message that will appear on the log fold
|
|
28
|
-
def fold(msg
|
|
32
|
+
def fold(msg)
|
|
29
33
|
self.folds += 1
|
|
30
34
|
print "travis_fold:start:dpl.#{folds}\r\e[K"
|
|
31
35
|
time do
|
|
@@ -41,13 +45,13 @@ module Dpl
|
|
|
41
45
|
# Starts a travis time log tag, calls the block, and closes the tag,
|
|
42
46
|
# including timing information. This makes a timing badge appear on
|
|
43
47
|
# the surrounding log fold.
|
|
44
|
-
def time
|
|
48
|
+
def time
|
|
45
49
|
id = SecureRandom.hex[0, 8]
|
|
46
|
-
start = Time.now.to_i * (10
|
|
50
|
+
start = Time.now.to_i * (10**9)
|
|
47
51
|
print "travis_time:start:#{id}\r\e[K"
|
|
48
52
|
yield
|
|
49
53
|
ensure
|
|
50
|
-
finish = Time.now.to_i * (10
|
|
54
|
+
finish = Time.now.to_i * (10**9)
|
|
51
55
|
duration = finish - start
|
|
52
56
|
print "\ntravis_time:end:#{id}:start=#{start},finish=#{finish},duration=#{duration}\r\e[K"
|
|
53
57
|
end
|
|
@@ -135,6 +139,7 @@ module Dpl
|
|
|
135
139
|
def apts_get(packages)
|
|
136
140
|
packages = packages.reject { |name, cmd = name| which(cmd || name) }
|
|
137
141
|
return unless packages.any?
|
|
142
|
+
|
|
138
143
|
apt_update
|
|
139
144
|
packages.each { |package, cmd| apt_get(package, cmd || package, update: false) }
|
|
140
145
|
end
|
|
@@ -148,6 +153,7 @@ module Dpl
|
|
|
148
153
|
# @param cmd [String] an executable installed by the package, defaults to the package name
|
|
149
154
|
def apt_get(package, cmd = package, opts = {})
|
|
150
155
|
return if which(cmd)
|
|
156
|
+
|
|
151
157
|
apt_update unless opts[:update].is_a?(FalseClass)
|
|
152
158
|
shell "sudo apt-get -qq install #{package}", retry: true
|
|
153
159
|
end
|
|
@@ -177,7 +183,7 @@ module Dpl
|
|
|
177
183
|
# Gem.loaded_specs.clear
|
|
178
184
|
gemfile do
|
|
179
185
|
source 'https://rubygems.org'
|
|
180
|
-
gems.each { |g| gem
|
|
186
|
+
gems.each { |g| gem(*g) }
|
|
181
187
|
end
|
|
182
188
|
# https://github.com/bundler/bundler/issues/7181
|
|
183
189
|
ENV.replace(env)
|
|
@@ -265,8 +271,8 @@ module Dpl
|
|
|
265
271
|
send(cmd.capture? ? :open3 : :system, cmd.cmd, cmd.opts)
|
|
266
272
|
end
|
|
267
273
|
|
|
268
|
-
info cmd.success
|
|
269
|
-
error cmd.error
|
|
274
|
+
info format(cmd.success, out: last_out) if success? && cmd.success?
|
|
275
|
+
error format(cmd.error, err: last_err) if failed? && cmd.assert?
|
|
270
276
|
|
|
271
277
|
success? && cmd.capture? ? last_out.chomp : @last_status
|
|
272
278
|
end
|
|
@@ -324,12 +330,12 @@ module Dpl
|
|
|
324
330
|
# Internal, and not to be used by implementors. $? is a read-only
|
|
325
331
|
# variable, so we use a method that we can stub during tests.
|
|
326
332
|
def last_process_status
|
|
327
|
-
|
|
333
|
+
$CHILD_STATUS.success?
|
|
328
334
|
end
|
|
329
335
|
|
|
330
336
|
# Whether or not the current Ruby process runs with superuser priviledges.
|
|
331
337
|
def sudo?
|
|
332
|
-
Process::UID.eid
|
|
338
|
+
Process::UID.eid.zero?
|
|
333
339
|
end
|
|
334
340
|
|
|
335
341
|
# Returns current repository name
|
|
@@ -491,14 +497,14 @@ module Dpl
|
|
|
491
497
|
def move_files(paths)
|
|
492
498
|
paths.each do |path|
|
|
493
499
|
target = "#{tmp_dir}/#{File.basename(path)}"
|
|
494
|
-
mv(path, target) if File.
|
|
500
|
+
mv(path, target) if File.exist?(path)
|
|
495
501
|
end
|
|
496
502
|
end
|
|
497
503
|
|
|
498
504
|
def unmove_files(paths)
|
|
499
505
|
paths.each do |path|
|
|
500
506
|
source = "#{tmp_dir}/#{File.basename(path)}"
|
|
501
|
-
mv(source, path) if File.
|
|
507
|
+
mv(source, path) if File.exist?(source)
|
|
502
508
|
end
|
|
503
509
|
end
|
|
504
510
|
|
data/lib/dpl/ctx/test.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'cl'
|
|
2
4
|
require 'stringio'
|
|
3
5
|
require 'dpl/helper/squiggle'
|
|
@@ -42,7 +44,11 @@ module Dpl
|
|
|
42
44
|
def gem_require(name, version = nil, opts = {})
|
|
43
45
|
# not sure why this is needed. bundler should take care of this, but
|
|
44
46
|
# it does not for octokit for whatever reason
|
|
45
|
-
|
|
47
|
+
begin
|
|
48
|
+
require opts[:require] || name
|
|
49
|
+
rescue StandardError
|
|
50
|
+
nil
|
|
51
|
+
end
|
|
46
52
|
cmds << "[gem:require] #{name} (#{version}, #{opts})"
|
|
47
53
|
end
|
|
48
54
|
|
|
@@ -54,16 +60,17 @@ module Dpl
|
|
|
54
60
|
cmds << "[pip:install] #{name} (#{cmd}, #{version})"
|
|
55
61
|
end
|
|
56
62
|
|
|
57
|
-
def ssh_keygen(
|
|
63
|
+
def ssh_keygen(_name, file)
|
|
58
64
|
File.open(file, 'w+') { |f| f.write('private-key') }
|
|
59
65
|
File.open("#{file}.pub", 'w+') { |f| f.write('ssh-rsa public-key') }
|
|
60
66
|
end
|
|
61
67
|
|
|
62
|
-
def shell(cmd,
|
|
68
|
+
def shell(cmd, _opts = {})
|
|
63
69
|
info cmd.msg if cmd.msg?
|
|
64
70
|
info cmd.echo if cmd.echo?
|
|
65
71
|
cmds << cmd.cmd
|
|
66
72
|
return stdout[cmd.key] if stdout.key?(cmd.key)
|
|
73
|
+
|
|
67
74
|
cmd.capture? ? 'captured_stdout' : true
|
|
68
75
|
end
|
|
69
76
|
|
|
@@ -128,15 +135,15 @@ module Dpl
|
|
|
128
135
|
true
|
|
129
136
|
end
|
|
130
137
|
|
|
131
|
-
def git_log(
|
|
138
|
+
def git_log(_args)
|
|
132
139
|
'commits'
|
|
133
140
|
end
|
|
134
141
|
|
|
135
142
|
def git_ls_files
|
|
136
|
-
%w
|
|
143
|
+
%w[one two]
|
|
137
144
|
end
|
|
138
145
|
|
|
139
|
-
def git_ls_remote?(
|
|
146
|
+
def git_ls_remote?(_url, _ref)
|
|
140
147
|
true
|
|
141
148
|
end
|
|
142
149
|
|
|
@@ -168,7 +175,7 @@ module Dpl
|
|
|
168
175
|
'1'
|
|
169
176
|
end
|
|
170
177
|
|
|
171
|
-
def which(
|
|
178
|
+
def which(_cmd)
|
|
172
179
|
false
|
|
173
180
|
end
|
|
174
181
|
|
|
@@ -177,10 +184,9 @@ module Dpl
|
|
|
177
184
|
'tmp'
|
|
178
185
|
end
|
|
179
186
|
|
|
180
|
-
def sleep(*)
|
|
181
|
-
end
|
|
187
|
+
def sleep(*); end
|
|
182
188
|
|
|
183
|
-
def encoding(
|
|
189
|
+
def encoding(_path)
|
|
184
190
|
'text'
|
|
185
191
|
end
|
|
186
192
|
|
|
@@ -195,7 +201,7 @@ module Dpl
|
|
|
195
201
|
end
|
|
196
202
|
|
|
197
203
|
def file_size(path)
|
|
198
|
-
File.size(path.sub(
|
|
204
|
+
File.size(path.sub(File.expand_path('~').to_s, './home'))
|
|
199
205
|
end
|
|
200
206
|
|
|
201
207
|
def move_files(paths)
|
|
@@ -222,19 +228,19 @@ module Dpl
|
|
|
222
228
|
cmds << [:chmod, perm, path].join(' ')
|
|
223
229
|
end
|
|
224
230
|
|
|
225
|
-
def write_file(path, content,
|
|
231
|
+
def write_file(path, content, _chmod = nil)
|
|
226
232
|
path = File.expand_path(path)
|
|
227
|
-
path = path.sub(
|
|
233
|
+
path = path.sub(File.expand_path('~').to_s, './home')
|
|
228
234
|
FileUtils.mkdir_p(File.dirname(path))
|
|
229
235
|
File.open(path, 'w+') { |f| f.write(content) }
|
|
230
236
|
end
|
|
231
237
|
|
|
232
238
|
def write_netrc(machine, login, password)
|
|
233
|
-
write_file('~/.netrc', sq(<<-
|
|
239
|
+
write_file('~/.netrc', sq(<<-RC))
|
|
234
240
|
machine #{machine}
|
|
235
241
|
login #{login}
|
|
236
242
|
password #{password}
|
|
237
|
-
|
|
243
|
+
RC
|
|
238
244
|
end
|
|
239
245
|
|
|
240
246
|
def tty?
|
data/lib/dpl/ctx.rb
CHANGED
data/lib/dpl/helper/assets.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'fileutils'
|
|
2
4
|
|
|
3
5
|
module Dpl
|
|
@@ -5,7 +7,7 @@ module Dpl
|
|
|
5
7
|
class Asset < Struct.new(:provider, :namespace, :name)
|
|
6
8
|
include FileUtils
|
|
7
9
|
|
|
8
|
-
DIR = File.expand_path('
|
|
10
|
+
DIR = File.expand_path('../assets', __dir__)
|
|
9
11
|
|
|
10
12
|
def copy(target)
|
|
11
13
|
cp path, File.expand_path(target)
|
|
@@ -16,7 +18,7 @@ module Dpl
|
|
|
16
18
|
end
|
|
17
19
|
|
|
18
20
|
def exists?
|
|
19
|
-
File.
|
|
21
|
+
File.exist?(path)
|
|
20
22
|
end
|
|
21
23
|
|
|
22
24
|
def unknown
|
data/lib/dpl/helper/cmd.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Dpl
|
|
2
4
|
# Represents a shell command
|
|
3
5
|
class Cmd < Struct.new(:provider, :key, :opts)
|
|
@@ -141,27 +143,27 @@ module Dpl
|
|
|
141
143
|
|
|
142
144
|
private
|
|
143
145
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
146
|
+
def lookup(type, *keys)
|
|
147
|
+
str = provider.send(type, *keys) if provider
|
|
148
|
+
str || keys.detect { |key| key.is_a?(String) }
|
|
149
|
+
end
|
|
148
150
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
151
|
+
def missing(type, *keys)
|
|
152
|
+
raise("Could not find #{type}: #{keys.compact.map(&:inspect).join(', ')}")
|
|
153
|
+
end
|
|
152
154
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
155
|
+
def interpolate(str, args, opts = {})
|
|
156
|
+
provider ? provider.interpolate(str, args, opts) : str
|
|
157
|
+
end
|
|
156
158
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
159
|
+
def silence(str)
|
|
160
|
+
"#{str} > /dev/null 2>&1"
|
|
161
|
+
end
|
|
160
162
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
163
|
+
# Activates the Python virtualenv for the given Python version.
|
|
164
|
+
def python(cmd)
|
|
165
|
+
# "bash -c 'source $HOME/virtualenv/python#{opts[:python]}/bin/activate; #{cmd.gsub(/'/, "'\\\\''")}'"
|
|
166
|
+
"source $HOME/virtualenv/python#{opts[:python]}/bin/activate && #{cmd}"
|
|
167
|
+
end
|
|
166
168
|
end
|
|
167
169
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Dpl
|
|
2
4
|
module ConfigFile
|
|
3
5
|
def self.included(base)
|
|
@@ -29,14 +31,14 @@ module Dpl
|
|
|
29
31
|
end
|
|
30
32
|
|
|
31
33
|
def parse(path)
|
|
32
|
-
str = File.
|
|
34
|
+
str = File.exist?(path) ? File.read(path) : ''
|
|
33
35
|
opts = str.lines.select { |line| line.include?('=') }.map(&:strip)
|
|
34
36
|
opts = opts.map { |pair| pair.split('=', 2) }.to_h
|
|
35
|
-
opts.
|
|
37
|
+
opts.transform_keys { |key| strip_prefix(key).to_sym }
|
|
36
38
|
end
|
|
37
39
|
|
|
38
40
|
def strip_prefix(str)
|
|
39
|
-
opts[:prefix] ? str.sub(/^#{opts[:prefix]}[
|
|
41
|
+
opts[:prefix] ? str.sub(/^#{opts[:prefix]}[-_]?/, '') : str
|
|
40
42
|
end
|
|
41
43
|
end
|
|
42
44
|
|