dpl 2.0.0.alpha.2 → 2.0.0.alpha.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +34 -1
- data/Gemfile.lock +13 -8
- data/NOTES.md +1 -74
- data/README.md +464 -193
- data/lib/dpl/assets/convox/install +11 -0
- data/lib/dpl/assets/dpl/README.erb.md +4 -0
- data/lib/dpl/cli.rb +54 -18
- data/lib/dpl/ctx/test.rb +7 -3
- data/lib/dpl/helper/env.rb +67 -18
- data/lib/dpl/helper/wrap.rb +9 -0
- data/lib/dpl/provider.rb +11 -9
- data/lib/dpl/provider/dsl.rb +3 -1
- data/lib/dpl/provider/status.rb +6 -6
- data/lib/dpl/providers.rb +3 -1
- data/lib/dpl/providers/anynines.rb +5 -3
- data/lib/dpl/providers/azure_web_apps.rb +1 -1
- data/lib/dpl/providers/bintray.rb +2 -0
- data/lib/dpl/providers/bluemixcloudfoundry.rb +5 -3
- data/lib/dpl/providers/boxfuse.rb +1 -1
- data/lib/dpl/providers/cargo.rb +10 -1
- data/lib/dpl/providers/chef_supermarket.rb +3 -1
- data/lib/dpl/providers/cloud66.rb +2 -0
- data/lib/dpl/providers/cloudfiles.rb +2 -0
- data/lib/dpl/providers/cloudformation.rb +278 -0
- data/lib/dpl/providers/cloudfoundry.rb +6 -4
- data/lib/dpl/providers/codedeploy.rb +5 -5
- data/lib/dpl/providers/convox.rb +121 -0
- data/lib/dpl/providers/datica.rb +1 -1
- data/lib/dpl/providers/engineyard.rb +2 -0
- data/lib/dpl/providers/gae.rb +6 -7
- data/lib/dpl/providers/gcs.rb +5 -3
- data/lib/dpl/providers/gleis.rb +70 -0
- data/lib/dpl/providers/hackage.rb +2 -0
- data/lib/dpl/providers/hephy.rb +3 -1
- data/lib/dpl/providers/heroku.rb +4 -8
- data/lib/dpl/providers/heroku/api.rb +4 -2
- data/lib/dpl/providers/heroku/git.rb +3 -1
- data/lib/dpl/providers/lambda.rb +4 -4
- data/lib/dpl/providers/launchpad.rb +3 -1
- data/lib/dpl/providers/netlify.rb +2 -0
- data/lib/dpl/providers/npm.rb +2 -0
- data/lib/dpl/providers/openshift.rb +2 -0
- data/lib/dpl/providers/opsworks.rb +1 -1
- data/lib/dpl/providers/packagecloud.rb +2 -0
- data/lib/dpl/providers/pages.rb +4 -7
- data/lib/dpl/providers/pages/api.rb +16 -12
- data/lib/dpl/providers/pages/git.rb +16 -12
- data/lib/dpl/providers/puppetforge.rb +2 -0
- data/lib/dpl/providers/pypi.rb +2 -0
- data/lib/dpl/providers/releases.rb +8 -6
- data/lib/dpl/providers/rubygems.rb +3 -1
- data/lib/dpl/providers/s3.rb +7 -7
- data/lib/dpl/providers/scalingo.rb +2 -0
- data/lib/dpl/providers/testfairy.rb +2 -0
- data/lib/dpl/providers/transifex.rb +2 -0
- data/lib/dpl/version.rb +1 -1
- metadata +7 -3
- data/lib/dpl/providers/atlas.rb +0 -49
@@ -0,0 +1,11 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
if ! command -v convox &> /dev/null; then
|
4
|
+
echo "Downloading convox CLI"
|
5
|
+
mkdir -p $HOME/bin
|
6
|
+
export PATH="$HOME/bin:$PATH"
|
7
|
+
curl -sL -o $HOME/bin/convox %{install_url}
|
8
|
+
chmod +x $HOME/bin/convox
|
9
|
+
else
|
10
|
+
echo "Convox CLI exists. Skipping installation"
|
11
|
+
fi
|
@@ -101,9 +101,13 @@ Dpl supports the following providers:
|
|
101
101
|
<% providers.each do |key, name|%>
|
102
102
|
### <%= name %>
|
103
103
|
|
104
|
+
<%= header(key) %>
|
105
|
+
|
104
106
|
```
|
105
107
|
<%= help(key) %>
|
106
108
|
```
|
109
|
+
|
110
|
+
<%= footer(key) %>
|
107
111
|
<% end -%>
|
108
112
|
|
109
113
|
<%= File.read('./CONTRIBUTING.md').gsub(/^#/, '##') %>
|
data/lib/dpl/cli.rb
CHANGED
@@ -8,37 +8,77 @@ module Dpl
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def run(args)
|
11
|
-
args = untaint(args)
|
12
|
-
args = with_provider_opt(args)
|
13
11
|
super
|
14
|
-
rescue UnknownCmd
|
15
|
-
unknown_provider(
|
16
|
-
rescue
|
12
|
+
rescue UnknownCmd => e
|
13
|
+
unknown_provider(e)
|
14
|
+
rescue UnknownOption => e
|
15
|
+
unknown_option(e)
|
16
|
+
rescue Cl::Error, Error => e
|
17
17
|
error(e)
|
18
18
|
end
|
19
19
|
|
20
|
+
def runner(args)
|
21
|
+
super(normalize(args))
|
22
|
+
end
|
23
|
+
|
24
|
+
def normalize(args)
|
25
|
+
args = untaint(args)
|
26
|
+
args = with_cmd_opts(args, provider: 0, strategy: 1)
|
27
|
+
args = with_strategy_default(args, :strategy) # should be a generic dispatch feature in Cl
|
28
|
+
args
|
29
|
+
end
|
30
|
+
|
20
31
|
# Tainting is being used for automatically obfuscating values for secure
|
21
32
|
# options, so we want to untaint all incoming args here.
|
22
33
|
def untaint(args)
|
23
34
|
args.map(&:dup).each(&:untaint)
|
24
35
|
end
|
25
36
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
37
|
+
def with_cmd_opts(args, cmds)
|
38
|
+
cmds.inject(args) do |args, (cmd, pos)|
|
39
|
+
with_cmd_opt(args, cmd, pos)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def with_cmd_opt(args, cmd, pos)
|
44
|
+
return args unless opt = args.detect { |arg| arg.start_with?("--#{cmd}") }
|
45
|
+
ix = args.index(opt)
|
46
|
+
args.delete(opt)
|
47
|
+
value = opt.include?('=') ? opt.split('=').last : args.delete_at(ix)
|
48
|
+
args.insert(pos, value)
|
49
|
+
args
|
50
|
+
end
|
51
|
+
|
52
|
+
STRATEGIES = {
|
53
|
+
'heroku' => 'api',
|
54
|
+
'pages' => 'git'
|
55
|
+
}
|
56
|
+
|
57
|
+
def with_strategy_default(args, cmd)
|
58
|
+
return args unless default = STRATEGIES[args.first]
|
59
|
+
args.insert(1, default) if args[1].nil? || args[1].to_s.start_with?('--')
|
60
|
+
args
|
31
61
|
end
|
32
62
|
|
33
63
|
def error(e)
|
34
64
|
msg = "\e[31m#{e.message}\e[0m"
|
35
|
-
msg = [msg, *e.backtrace].join("\n") if
|
65
|
+
msg = [msg, *e.backtrace].join("\n") if backtrace?(e)
|
66
|
+
abort msg
|
67
|
+
end
|
68
|
+
|
69
|
+
def backtrace?(e)
|
70
|
+
e.respond_to?(:backtrace?) && e.backtrace?
|
71
|
+
end
|
72
|
+
|
73
|
+
def unknown_provider(e)
|
74
|
+
msg = "\e[31m#{e.message}\e[0m"
|
75
|
+
msg << "\nDid you mean: #{e.suggestions.join(', ')}?" if e.suggestions.any?
|
36
76
|
abort msg
|
37
77
|
end
|
38
78
|
|
39
|
-
def
|
40
|
-
msg = "\e[
|
41
|
-
msg << "\nDid you mean: #{suggestions
|
79
|
+
def unknown_option(e)
|
80
|
+
msg = "\e[31m#{e.message}\e[0m"
|
81
|
+
msg << "\nDid you mean: #{e.suggestions.join(', ')}?" if e.suggestions.any?
|
42
82
|
abort msg
|
43
83
|
end
|
44
84
|
|
@@ -46,9 +86,5 @@ module Dpl
|
|
46
86
|
return [] unless defined?(DidYouMean)
|
47
87
|
DidYouMean::SpellChecker.new(dictionary: providers).correct(name)
|
48
88
|
end
|
49
|
-
|
50
|
-
def providers
|
51
|
-
Cl::Cmd.registry.keys.map(&:to_s)
|
52
|
-
end
|
53
89
|
end
|
54
90
|
end
|
data/lib/dpl/ctx/test.rb
CHANGED
@@ -60,8 +60,8 @@ module Dpl
|
|
60
60
|
info cmd.msg if cmd.msg?
|
61
61
|
info cmd.echo if cmd.echo?
|
62
62
|
cmds << cmd.cmd
|
63
|
-
return
|
64
|
-
|
63
|
+
return stdout[cmd.key] if stdout.key?(cmd.key)
|
64
|
+
cmd.capture? ? 'captured_stdout' : true
|
65
65
|
end
|
66
66
|
|
67
67
|
def success?
|
@@ -86,7 +86,7 @@ module Dpl
|
|
86
86
|
|
87
87
|
def deprecate_opt(key, msg)
|
88
88
|
msg = "please use #{msg}" if msg.is_a?(Symbol)
|
89
|
-
warn
|
89
|
+
warn "Deprecated option #{key} used (#{msg})."
|
90
90
|
end
|
91
91
|
|
92
92
|
def repo_name
|
@@ -105,6 +105,10 @@ module Dpl
|
|
105
105
|
1
|
106
106
|
end
|
107
107
|
|
108
|
+
def git_branch
|
109
|
+
'git branch'
|
110
|
+
end
|
111
|
+
|
108
112
|
def git_commit_msg
|
109
113
|
'commit msg'
|
110
114
|
end
|
data/lib/dpl/helper/env.rb
CHANGED
@@ -1,35 +1,84 @@
|
|
1
|
+
require 'dpl/helper/memoize'
|
2
|
+
|
1
3
|
module Dpl
|
2
4
|
module Env
|
3
5
|
def self.included(base)
|
4
6
|
base.extend(ClassMethods)
|
5
7
|
end
|
6
8
|
|
9
|
+
class Env
|
10
|
+
include Memoize
|
11
|
+
# opts[:allow_skip_underscore] allows unconventional ENV vars such as GOOGLECLOUDKEYFILE
|
12
|
+
|
13
|
+
attr_reader :cmd, :env, :strs, :keys, :opts
|
14
|
+
|
15
|
+
def initialize(env, args)
|
16
|
+
@env = env
|
17
|
+
@opts = args.last.is_a?(Hash) ? args.pop : {}
|
18
|
+
@strs = args.map(&:to_s).map(&:upcase)
|
19
|
+
end
|
20
|
+
|
21
|
+
def env(cmd)
|
22
|
+
@cmd = cmd
|
23
|
+
env = @env.select { |key, _| keys.include?(key) }
|
24
|
+
env = env.map { |key, value| [unprefix(key).downcase.to_sym, value] }.to_h
|
25
|
+
env.map { |key, value| [dealias(key), value] }.to_h
|
26
|
+
end
|
27
|
+
|
28
|
+
def description(cmd)
|
29
|
+
strs = self.strs.map { |str| "#{str}_" }
|
30
|
+
strs += self.strs if opts[:allow_skip_underscore]
|
31
|
+
strs = strs.size > 1 ? "[#{strs.sort.join('|')}]" : strs.join
|
32
|
+
"Options can be given via env vars if prefixed with `#{strs}`. #{example(cmd)}"
|
33
|
+
end
|
34
|
+
|
35
|
+
def example(cmd)
|
36
|
+
return unless opt = cmd.opts.detect { |opt| opt.secret? }
|
37
|
+
env = self.strs.map { |str| "`#{str}_#{opt.name.upcase}=<#{opt.name}>`" }
|
38
|
+
env += self.strs.map { |str| "`#{str}#{opt.name.upcase}=<#{opt.name}>`" } if opts[:allow_skip_underscore]
|
39
|
+
"E.g. the option `--#{opt.name}` can be given as #{sentence(env)}."
|
40
|
+
end
|
41
|
+
|
42
|
+
def sentence(strs)
|
43
|
+
return strs.join if strs.size == 1
|
44
|
+
[strs[0..-2].join(', '), strs[-1]].join(' or ')
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def dealias(key)
|
50
|
+
opt = cmd.opts.detect { |opt| opt.aliases.include?(key) }
|
51
|
+
opt ? opt.name : key
|
52
|
+
end
|
53
|
+
|
54
|
+
def unprefix(key)
|
55
|
+
strs.inject(key) { |key, str| key.sub(/^#{str}_?/, '') }
|
56
|
+
end
|
57
|
+
|
58
|
+
def keys
|
59
|
+
keys = cmd.opts.map(&:name) + cmd.opts.map(&:aliases).flatten
|
60
|
+
strs.map { |str| keys.map { |key| keys_for(str, key) } }.flatten
|
61
|
+
end
|
62
|
+
memoize :keys
|
63
|
+
|
64
|
+
def keys_for(str, key)
|
65
|
+
keys = [["#{str}_", key.upcase].join]
|
66
|
+
keys << [str, key.upcase].join if opts[:allow_skip_underscore]
|
67
|
+
keys
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
7
71
|
# should this sit in Cl?
|
8
72
|
module ClassMethods
|
9
|
-
attr_reader :env_prefixes
|
10
|
-
|
11
73
|
def env(*strs)
|
12
|
-
opts = strs.last.is_a?(Hash) ? strs.pop : {}
|
13
74
|
if strs.any?
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
@env_prefixes += strs if opts[:allow_skip_underscore]
|
18
|
-
elsif env_prefixes
|
19
|
-
opts = ENV.select { |key, _| prefixed?(key) }
|
20
|
-
opts.map { |key, value| [unprefix(key).downcase.to_sym, value] }.to_h
|
75
|
+
@env = Env.new(ENV, strs)
|
76
|
+
elsif env = @env || superclass.instance_variable_get(:@env)
|
77
|
+
env.env(self)
|
21
78
|
else
|
22
79
|
{}
|
23
80
|
end
|
24
81
|
end
|
25
|
-
|
26
|
-
def prefixed?(key)
|
27
|
-
env_prefixes.any? { |prefix| key.to_s.start_with?(prefix) }
|
28
|
-
end
|
29
|
-
|
30
|
-
def unprefix(key)
|
31
|
-
env_prefixes.inject(key) { |key, prefix| key.sub(prefix, '') }
|
32
|
-
end
|
33
82
|
end
|
34
83
|
|
35
84
|
def opts
|
data/lib/dpl/provider.rb
CHANGED
@@ -147,8 +147,8 @@ module Dpl
|
|
147
147
|
|
148
148
|
arg :provider, 'The provider name', required: true
|
149
149
|
|
150
|
-
opt '--
|
151
|
-
opt '--
|
150
|
+
opt '--cleanup', 'Clean up build artifacts from the Git working directory before the deployment', negate: %w(skip)
|
151
|
+
opt '--run CMD', 'Commands to execute after the deployment finished successfully', type: :array
|
152
152
|
opt '--stage NAME', 'Execute the given stage(s) only', type: :array, internal: true, default: STAGES
|
153
153
|
opt '--backtrace', 'Print the backtrace for exceptions', internal: true
|
154
154
|
opt '--fold', 'Wrap log output in folds', internal: true
|
@@ -170,13 +170,15 @@ module Dpl
|
|
170
170
|
:validate_runtimes, :user_agent
|
171
171
|
|
172
172
|
def_delegators :ctx, :apt_get, :gem_require, :npm_install, :pip_install,
|
173
|
-
:build_dir, :build_number, :
|
174
|
-
:git_author_name, :git_branch, :
|
175
|
-
:
|
176
|
-
:
|
177
|
-
:
|
178
|
-
:
|
179
|
-
:
|
173
|
+
:build_dir, :build_number, :encoding, :file_size, :git_author_email,
|
174
|
+
:git_author_name, :git_branch, :git_branch, :git_commit_author,
|
175
|
+
:git_commit_msg, :git_commit_msg, :git_dirty?, :git_log, :git_log,
|
176
|
+
:git_ls_files, :git_ls_remote?, :git_remote_urls, :git_remote_urls,
|
177
|
+
:git_rev_parse, :git_rev_parse, :git_sha, :git_tag, :last_err, :last_out,
|
178
|
+
:last_out, :logger, :machine_name, :mv, :node_version, :node_version,
|
179
|
+
:npm_version, :rendezvous, :rendezvous, :repo_slug, :sleep, :sleep,
|
180
|
+
:ssh_keygen, :success?, :test?, :test?, :tmp_dir, :tty?, :which, :which,
|
181
|
+
:write_file, :write_netrc
|
180
182
|
|
181
183
|
attr_reader :repo_name, :key_name
|
182
184
|
|
data/lib/dpl/provider/dsl.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'dpl/helper/squiggle'
|
2
|
+
require 'dpl/helper/wrap'
|
1
3
|
require 'dpl/provider/status'
|
2
4
|
|
3
5
|
module Dpl
|
@@ -25,7 +27,7 @@ module Dpl
|
|
25
27
|
|
26
28
|
# Summary of the provider's functionality.
|
27
29
|
def description(str = nil)
|
28
|
-
str
|
30
|
+
str = str.strip if str
|
29
31
|
super
|
30
32
|
end
|
31
33
|
|
data/lib/dpl/provider/status.rb
CHANGED
@@ -4,11 +4,11 @@ module Dpl
|
|
4
4
|
STATUS = %i(dev alpha beta stable deprecated)
|
5
5
|
|
6
6
|
MSG = {
|
7
|
-
dev: 'Support for deployments to %s is in development',
|
8
|
-
alpha: 'Support for deployments to %s is in alpha',
|
9
|
-
beta: 'Support for deployments to %s is in beta',
|
10
|
-
deprecated: 'Support for deployments to %s is deprecated',
|
11
|
-
pre_stable: 'Please see
|
7
|
+
dev: 'Support for deployments to %s is in **development**',
|
8
|
+
alpha: 'Support for deployments to %s is in **alpha**',
|
9
|
+
beta: 'Support for deployments to %s is in **beta**',
|
10
|
+
deprecated: 'Support for deployments to %s is *deprecated**',
|
11
|
+
pre_stable: 'Please see [Maturity Levels](%s) for details.'
|
12
12
|
}
|
13
13
|
|
14
14
|
URL = 'https://github.com/travis-ci/dpl/#maturity-levels'
|
@@ -26,7 +26,7 @@ module Dpl
|
|
26
26
|
msg = "#{MSG[status] % name}"
|
27
27
|
msg << "(#{info})" if info
|
28
28
|
msg << ". #{MSG[:pre_stable] % URL}" if pre_stable?
|
29
|
-
|
29
|
+
msg
|
30
30
|
end
|
31
31
|
|
32
32
|
private
|
data/lib/dpl/providers.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'dpl/providers/anynines'
|
2
|
-
require 'dpl/providers/atlas'
|
3
2
|
require 'dpl/providers/azure_web_apps'
|
4
3
|
require 'dpl/providers/bintray'
|
5
4
|
require 'dpl/providers/boxfuse'
|
@@ -9,13 +8,16 @@ require 'dpl/providers/datica'
|
|
9
8
|
require 'dpl/providers/chef_supermarket'
|
10
9
|
require 'dpl/providers/cloud66'
|
11
10
|
require 'dpl/providers/cloudfiles'
|
11
|
+
require 'dpl/providers/cloudformation'
|
12
12
|
require 'dpl/providers/cloudfoundry'
|
13
13
|
require 'dpl/providers/codedeploy'
|
14
|
+
require 'dpl/providers/convox'
|
14
15
|
require 'dpl/providers/elasticbeanstalk'
|
15
16
|
require 'dpl/providers/engineyard'
|
16
17
|
require 'dpl/providers/firebase'
|
17
18
|
require 'dpl/providers/gae'
|
18
19
|
require 'dpl/providers/gcs'
|
20
|
+
require 'dpl/providers/gleis'
|
19
21
|
require 'dpl/providers/hackage'
|
20
22
|
require 'dpl/providers/hephy'
|
21
23
|
require 'dpl/providers/heroku'
|
@@ -7,12 +7,14 @@ module Dpl
|
|
7
7
|
tbd
|
8
8
|
str
|
9
9
|
|
10
|
+
env :anynines
|
11
|
+
|
10
12
|
opt '--username USER', 'anynines username', required: true
|
11
13
|
opt '--password PASS', 'anynines password', required: true, secret: true
|
12
|
-
opt '--organization ORG', 'anynines
|
13
|
-
opt '--space SPACE', 'anynines
|
14
|
+
opt '--organization ORG', 'anynines organization', required: true
|
15
|
+
opt '--space SPACE', 'anynines space', required: true
|
14
16
|
opt '--app_name APP', 'Application name'
|
15
|
-
opt '--buildpack PACK', '
|
17
|
+
opt '--buildpack PACK', 'Buildpack name or Git URL'
|
16
18
|
opt '--manifest FILE', 'Path to the manifest'
|
17
19
|
opt '--logout', default: true, internal: true
|
18
20
|
|
@@ -11,9 +11,9 @@ module Dpl
|
|
11
11
|
|
12
12
|
env :AZURE_WA
|
13
13
|
|
14
|
-
opt '--site SITE', 'Web App name (e.g. myapp in myapp.azurewebsites.net)', required: true
|
15
14
|
opt '--username NAME', 'Web App Deployment Username', required: true
|
16
15
|
opt '--password PASS', 'Web App Deployment Password', required: true, secret: true
|
16
|
+
opt '--site SITE', 'Web App name (e.g. myapp in myapp.azurewebsites.net)', required: true
|
17
17
|
opt '--slot SLOT', 'Slot name (if your app uses staging deployment)'
|
18
18
|
opt '--verbose', 'Print deployment output from Azure. Warning: If authentication fails, Git prints credentials in clear text. Correct credentials remain hidden.'
|
19
19
|
|
@@ -9,14 +9,16 @@ module Dpl
|
|
9
9
|
tbd
|
10
10
|
str
|
11
11
|
|
12
|
+
env :cloudfoundry
|
13
|
+
|
12
14
|
opt '--username USER', 'Bluemix username', required: true
|
13
15
|
opt '--password PASS', 'Bluemix password', required: true, secret: true
|
14
|
-
opt '--organization ORG', 'Bluemix
|
15
|
-
opt '--space SPACE', 'Bluemix
|
16
|
+
opt '--organization ORG', 'Bluemix organization', required: true
|
17
|
+
opt '--space SPACE', 'Bluemix space', required: true
|
16
18
|
opt '--region REGION', 'Bluemix region', default: 'ng', enum: %w(ng eu-gb eu-de au-syd)
|
17
19
|
opt '--api URL', 'Bluemix api URL'
|
18
20
|
opt '--app_name APP', 'Application name'
|
19
|
-
opt '--buildpack PACK', '
|
21
|
+
opt '--buildpack PACK', 'Buildpack name or Git URL'
|
20
22
|
opt '--manifest FILE', 'Path to the manifest'
|
21
23
|
opt '--skip_ssl_validation', 'Skip SSL validation'
|
22
24
|
opt '--logout', default: true, internal: true
|
@@ -11,11 +11,11 @@ module Dpl
|
|
11
11
|
|
12
12
|
opt '--user USER', required: true
|
13
13
|
opt '--secret SECRET', required: true, secret: true
|
14
|
-
opt '--config_file FILE', alias: :configfile, deprecated: :configfile
|
15
14
|
opt '--payload PAYLOAD'
|
16
15
|
opt '--app APP'
|
17
16
|
opt '--version VERSION'
|
18
17
|
opt '--env ENV'
|
18
|
+
opt '--config_file FILE', alias: :configfile, deprecated: :configfile
|
19
19
|
opt '--extra_args ARGS'
|
20
20
|
|
21
21
|
URL = 'https://files.boxfuse.com/com/boxfuse/client/boxfuse-commandline/latest/boxfuse-commandline-latest-linux-x64.tar.gz'
|
data/lib/dpl/providers/cargo.rb
CHANGED
@@ -7,13 +7,22 @@ module Dpl
|
|
7
7
|
tbd
|
8
8
|
str
|
9
9
|
|
10
|
+
env :cargo
|
11
|
+
|
10
12
|
opt '--token TOKEN', 'Cargo registry API token', required: true, secret: true
|
13
|
+
opt '--allow_dirty', 'Allow publishing from a dirty git working directory'
|
11
14
|
|
12
|
-
cmds publish: 'cargo publish
|
15
|
+
cmds publish: 'cargo publish %{publish_opts}'
|
13
16
|
|
14
17
|
def deploy
|
15
18
|
shell :publish
|
16
19
|
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def publish_opts
|
24
|
+
opts_for(%i(token allow_dirty), dashed: true)
|
25
|
+
end
|
17
26
|
end
|
18
27
|
end
|
19
28
|
end
|