mina 0.2.0 → 0.2.1
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.
- data/HISTORY.md +22 -2
- data/lib/mina.rb +1 -0
- data/lib/mina/default.rb +21 -1
- data/lib/mina/git.rb +3 -2
- data/lib/mina/helpers.rb +32 -89
- data/lib/mina/output_helpers.rb +35 -27
- data/lib/mina/rails.rb +8 -5
- data/lib/mina/rake.rb +1 -0
- data/lib/mina/rbenv.rb +1 -1
- data/lib/mina/ssh_helpers.rb +76 -0
- data/lib/mina/version.rb +1 -1
- data/lib/mina/whenever.rb +1 -2
- data/test_env/config/deploy.rb +5 -0
- metadata +2 -1
data/HISTORY.md
CHANGED
@@ -1,5 +1,25 @@
|
|
1
|
-
v0.2.
|
2
|
-
|
1
|
+
v0.2.1 - Sep 08, 2012
|
2
|
+
---------------------
|
3
|
+
|
4
|
+
This release is to fix some issues that should've been cleaned up in the
|
5
|
+
previous release, but wasn't.
|
6
|
+
|
7
|
+
### Fixed:
|
8
|
+
* **Fix SSH helpers giving a 'class required' error.**
|
9
|
+
* **Send stdout even in term_mode = :pretty mode.**
|
10
|
+
* Rbenv: Fix compatibility with Debian, Arch, Fedora. (#44)
|
11
|
+
* Supress the "--depth is ignored in local clones" warning. (#56)
|
12
|
+
|
13
|
+
### Added:
|
14
|
+
* Add the `:ssh_options` setting. (#23)
|
15
|
+
* Add the `:forward_agent` setting. (#23)
|
16
|
+
|
17
|
+
### Changed:
|
18
|
+
* Make the `:term_mode` setting accept strings, not just symbols. (eg: `set
|
19
|
+
:term_mode, 'exec'`)
|
20
|
+
|
21
|
+
v0.2.0 - Sep 08, 2012
|
22
|
+
---------------------
|
3
23
|
|
4
24
|
This release had two pre releases:
|
5
25
|
|
data/lib/mina.rb
CHANGED
data/lib/mina/default.rb
CHANGED
@@ -1,7 +1,27 @@
|
|
1
1
|
# # Modules: Default
|
2
2
|
# This module is loaded when invoking `mina` with or without a project.
|
3
3
|
|
4
|
-
|
4
|
+
# ## Settings
|
5
|
+
# Here are some of the common settings. All settings are optional unless
|
6
|
+
# otherwise noted.
|
7
|
+
#
|
8
|
+
# ### deploy_to
|
9
|
+
# (Required) Path to deploy to.
|
10
|
+
#
|
11
|
+
# ### domain
|
12
|
+
# (Required) Host name to deploy to.
|
13
|
+
#
|
14
|
+
# ### port
|
15
|
+
# SSH port number.
|
16
|
+
#
|
17
|
+
# ### forward_agent
|
18
|
+
# If set to `true`, enables SSH agent forwarding.
|
19
|
+
#
|
20
|
+
# ### identity_file
|
21
|
+
# The local path to the SSH private key file.
|
22
|
+
#
|
23
|
+
# ### ssh_options
|
24
|
+
# Switches to be passed to the `ssh` command.
|
5
25
|
|
6
26
|
# ## Tasks
|
7
27
|
# Any and all of these settings can be overriden in your `deploy.rb`.
|
data/lib/mina/git.rb
CHANGED
@@ -9,7 +9,7 @@
|
|
9
9
|
# ### branch
|
10
10
|
# Sets the branch to be deployed.
|
11
11
|
|
12
|
-
set_default :branch,
|
12
|
+
set_default :branch, 'master'
|
13
13
|
|
14
14
|
namespace :git do
|
15
15
|
# ## Deploy tasks
|
@@ -18,6 +18,7 @@ namespace :git do
|
|
18
18
|
|
19
19
|
# ### git:clone
|
20
20
|
# Clones the Git repository. Meant to be used inside a deploy script.
|
21
|
+
|
21
22
|
desc "Clones the Git repository to the release path."
|
22
23
|
task :clone do
|
23
24
|
if revision?
|
@@ -42,7 +43,7 @@ namespace :git do
|
|
42
43
|
#{echo_cmd %[(cd "#{deploy_to}/scm" && git fetch "#{repository!}" "#{branch}:#{branch}" --force)]}
|
43
44
|
fi &&
|
44
45
|
echo "-----> Using git branch '#{branch}'" &&
|
45
|
-
#{echo_cmd %[git clone "#{deploy_to}/scm" . --
|
46
|
+
#{echo_cmd %[git clone "#{deploy_to}/scm" . --recursive --branch "#{branch}"]} &&
|
46
47
|
}
|
47
48
|
end
|
48
49
|
|
data/lib/mina/helpers.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# # Helpers: Default helpers
|
2
|
+
|
2
3
|
module Mina
|
3
4
|
module Helpers
|
4
5
|
|
@@ -9,7 +10,7 @@ module Mina
|
|
9
10
|
#
|
10
11
|
# invoke :'git:clone'
|
11
12
|
# invoke :restart
|
12
|
-
|
13
|
+
|
13
14
|
def invoke(task)
|
14
15
|
Rake.application.invoke_task task
|
15
16
|
end
|
@@ -26,7 +27,7 @@ module Mina
|
|
26
27
|
# #=> "1 and 2"
|
27
28
|
#
|
28
29
|
# Returns the output string of the ERB template.
|
29
|
-
|
30
|
+
|
30
31
|
def erb(file, b=binding)
|
31
32
|
require 'erb'
|
32
33
|
erb = ERB.new(File.read(file))
|
@@ -43,7 +44,7 @@ module Mina
|
|
43
44
|
# run!
|
44
45
|
#
|
45
46
|
# Returns nothing.
|
46
|
-
|
47
|
+
|
47
48
|
def run!
|
48
49
|
report_time { ssh commands(:default) }
|
49
50
|
end
|
@@ -51,6 +52,15 @@ module Mina
|
|
51
52
|
# ### report_time
|
52
53
|
# Report time elapsed in the block.
|
53
54
|
# Returns the output of the block.
|
55
|
+
#
|
56
|
+
# report_time do
|
57
|
+
# sleep 2
|
58
|
+
# # do other things
|
59
|
+
# end
|
60
|
+
#
|
61
|
+
# # Output:
|
62
|
+
# # Elapsed time: 2.0 seconds
|
63
|
+
|
54
64
|
def report_time(&blk)
|
55
65
|
time, output = measure &blk
|
56
66
|
print_str "Elapsed time: %.2f seconds" % [time]
|
@@ -60,88 +70,18 @@ module Mina
|
|
60
70
|
# ### measure
|
61
71
|
# Measures the time (in ms) a block takes.
|
62
72
|
# Returns a [time, output] tuple.
|
73
|
+
|
63
74
|
def measure(&blk)
|
64
75
|
t = Time.now
|
65
76
|
output = yield
|
66
77
|
[(Time.now - t).to_i, output]
|
67
78
|
end
|
68
79
|
|
69
|
-
# ## SSH helpers
|
70
|
-
# You don't need to invoke these helpers, they're already invoked automatically.
|
71
|
-
|
72
|
-
# ### ssh
|
73
|
-
# Executes a command via SSH.
|
74
|
-
#
|
75
|
-
# Returns nothing usually, but if `{ return: true }` is given, returns the
|
76
|
-
# STDOUT output of the SSH session.
|
77
|
-
#
|
78
|
-
# `options` is a hash of options:
|
79
|
-
#
|
80
|
-
# - `:pretty` - Prettify the output if true.
|
81
|
-
# - `:return` - If set to true, returns the output.
|
82
|
-
#
|
83
|
-
# Example
|
84
|
-
#
|
85
|
-
# ssh("ls", return: true)
|
86
|
-
#
|
87
|
-
def ssh(cmd, options={})
|
88
|
-
cmd = cmd.join("\n") if cmd.is_a?(Array)
|
89
|
-
|
90
|
-
require 'shellwords'
|
91
|
-
|
92
|
-
result = 0
|
93
|
-
script = Shellwords.escape(cmd)
|
94
|
-
|
95
|
-
if options[:return] == true
|
96
|
-
result = `#{ssh_command} -- #{script}`
|
97
|
-
|
98
|
-
elsif simulate_mode?
|
99
|
-
str = "Executing the following via '#{ssh_command}':"
|
100
|
-
puts "#!/usr/bin/env bash"
|
101
|
-
puts "# #{str}"
|
102
|
-
puts "#"
|
103
|
-
|
104
|
-
puts cmd
|
105
|
-
|
106
|
-
else
|
107
|
-
code = "#{ssh_command} -- #{script}"
|
108
|
-
if settings.term_mode == :pretty
|
109
|
-
result = pretty_system(code)
|
110
|
-
elsif settings.term_mode == :exec
|
111
|
-
exec code
|
112
|
-
else
|
113
|
-
system code
|
114
|
-
result = $?.to_i
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
die result if result.is_a? Fixnum && result > 0
|
119
|
-
result
|
120
|
-
end
|
121
|
-
|
122
|
-
# ### ssh_command
|
123
|
-
# Returns the SSH command to be executed.
|
124
|
-
#
|
125
|
-
# set :domain, 'foo.com'
|
126
|
-
# set :user, 'diggity'
|
127
|
-
#
|
128
|
-
# puts ssh_command
|
129
|
-
# #=> 'ssh diggity@foo.com'
|
130
|
-
#
|
131
|
-
def ssh_command
|
132
|
-
args = domain!
|
133
|
-
args = "#{user}@#{args}" if user?
|
134
|
-
args << " -i #{identity_file}" if identity_file?
|
135
|
-
args << " -p #{port}" if port?
|
136
|
-
args << " -t"
|
137
|
-
"ssh #{args}"
|
138
|
-
end
|
139
|
-
|
140
80
|
# ### mina_cleanup
|
141
81
|
# __Internal:__ Invoked when Rake exits.
|
142
82
|
#
|
143
83
|
# Returns nothing.
|
144
|
-
|
84
|
+
|
145
85
|
def mina_cleanup!
|
146
86
|
run! if commands.any?
|
147
87
|
end
|
@@ -154,7 +94,7 @@ module Mina
|
|
154
94
|
#
|
155
95
|
# die 2
|
156
96
|
# die 2, "Tests failed"
|
157
|
-
|
97
|
+
|
158
98
|
def die(code=1, msg=null)
|
159
99
|
str = "Failed with status #{code}"
|
160
100
|
str += " (#{msg})" if msg
|
@@ -166,6 +106,7 @@ module Mina
|
|
166
106
|
# ### error
|
167
107
|
# __Internal:__ Prints to stdout.
|
168
108
|
# Consider using `print_error` instead.
|
109
|
+
|
169
110
|
def error(str)
|
170
111
|
$stderr.write "#{str}\n"
|
171
112
|
end
|
@@ -184,7 +125,7 @@ module Mina
|
|
184
125
|
# queue "true"
|
185
126
|
#
|
186
127
|
# commands == ['sudo restart', 'true']
|
187
|
-
|
128
|
+
|
188
129
|
def queue(code)
|
189
130
|
commands
|
190
131
|
commands(@to) << unindent(code)
|
@@ -207,7 +148,7 @@ module Mina
|
|
207
148
|
#
|
208
149
|
# echo_cmd("ln -nfs releases/2 current")
|
209
150
|
# #=> echo "$ ln -nfs releases/2 current" && ln -nfs releases/2 current
|
210
|
-
|
151
|
+
|
211
152
|
def echo_cmd(str)
|
212
153
|
if verbose_mode?
|
213
154
|
"echo #{Shellwords.escape("$ " + str)} &&\n#{str}"
|
@@ -234,7 +175,7 @@ module Mina
|
|
234
175
|
#
|
235
176
|
# commands == ["sudo restart", "true"]
|
236
177
|
# commands(:clean) == ["rm"]
|
237
|
-
|
178
|
+
|
238
179
|
def commands(aspect=:default)
|
239
180
|
(@commands ||= begin
|
240
181
|
@to = :default
|
@@ -257,7 +198,7 @@ module Mina
|
|
257
198
|
# end
|
258
199
|
#
|
259
200
|
# commands.should == ['sudo restart', 'true']
|
260
|
-
|
201
|
+
|
261
202
|
def isolate(&blk)
|
262
203
|
old, @commands = @commands, nil
|
263
204
|
result = yield
|
@@ -275,7 +216,7 @@ module Mina
|
|
275
216
|
# end
|
276
217
|
#
|
277
218
|
# commands.should == ['cd ./webapp && (./reload && true)']
|
278
|
-
|
219
|
+
|
279
220
|
def in_directory(path, &blk)
|
280
221
|
isolated_commands = isolate { yield; commands }
|
281
222
|
isolated_commands.each { |cmd| queue "(cd #{path} && (#{cmd}))" }
|
@@ -295,7 +236,7 @@ module Mina
|
|
295
236
|
#
|
296
237
|
# commands(:prepare) == ["bundle install"]
|
297
238
|
# commands(:restart) == ["nginx -s restart"]
|
298
|
-
|
239
|
+
|
299
240
|
def to(name, &blk)
|
300
241
|
old, @to = @to, name
|
301
242
|
yield
|
@@ -312,7 +253,7 @@ module Mina
|
|
312
253
|
# Returns the value.
|
313
254
|
#
|
314
255
|
# set :domain, 'kickflip.me'
|
315
|
-
|
256
|
+
|
316
257
|
def set(key, value)
|
317
258
|
settings.send :"#{key}=", value
|
318
259
|
end
|
@@ -330,7 +271,7 @@ module Mina
|
|
330
271
|
# set :term_mode, :system
|
331
272
|
# set_default :term_mode, :pretty
|
332
273
|
# settings.term_mode.should == :system
|
333
|
-
|
274
|
+
|
334
275
|
def set_default(key, value)
|
335
276
|
settings.send :"#{key}=", value unless settings.send(:"#{key}?")
|
336
277
|
end
|
@@ -342,7 +283,7 @@ module Mina
|
|
342
283
|
#
|
343
284
|
# settings.domain #=> 'kickflip.me'
|
344
285
|
# domain #=> 'kickflip.me'
|
345
|
-
|
286
|
+
|
346
287
|
def settings
|
347
288
|
@settings ||= Settings.new
|
348
289
|
end
|
@@ -352,7 +293,7 @@ module Mina
|
|
352
293
|
# See #settings for an explanation.
|
353
294
|
#
|
354
295
|
# Returns things.
|
355
|
-
|
296
|
+
|
356
297
|
def method_missing(meth, *args, &blk)
|
357
298
|
settings.send meth, *args
|
358
299
|
end
|
@@ -363,7 +304,7 @@ module Mina
|
|
363
304
|
# Checks if Rake was invoked with --verbose.
|
364
305
|
#
|
365
306
|
# Returns true or false.
|
366
|
-
|
307
|
+
|
367
308
|
def verbose_mode?
|
368
309
|
if Rake.respond_to?(:verbose)
|
369
310
|
# Rake 0.9.x
|
@@ -378,7 +319,7 @@ module Mina
|
|
378
319
|
# Checks if Rake was invoked with --simulate.
|
379
320
|
#
|
380
321
|
# Returns true or false.
|
381
|
-
|
322
|
+
|
382
323
|
def simulate_mode?
|
383
324
|
!! ENV['simulate']
|
384
325
|
end
|
@@ -387,6 +328,7 @@ module Mina
|
|
387
328
|
|
388
329
|
# ### indent
|
389
330
|
# Indents a given code block with `count` spaces before it.
|
331
|
+
|
390
332
|
def indent(count, str)
|
391
333
|
str.gsub(/^/, " "*count)
|
392
334
|
end
|
@@ -403,7 +345,7 @@ module Mina
|
|
403
345
|
# # Output:
|
404
346
|
# # Hello
|
405
347
|
# # There
|
406
|
-
|
348
|
+
|
407
349
|
def unindent(code)
|
408
350
|
if code =~ /^\n([ \t]+)/
|
409
351
|
code = code.gsub(/^#{$1}/, '')
|
@@ -414,6 +356,7 @@ module Mina
|
|
414
356
|
|
415
357
|
# ### reindent
|
416
358
|
# Resets the indentation on a given code block.
|
359
|
+
|
417
360
|
def reindent(n, code)
|
418
361
|
indent n, unindent(code)
|
419
362
|
end
|
data/lib/mina/output_helpers.rb
CHANGED
@@ -4,6 +4,33 @@
|
|
4
4
|
module Mina
|
5
5
|
module OutputHelpers
|
6
6
|
|
7
|
+
# ### print_str
|
8
|
+
# Prints a string by delegating it to the proper output helper.
|
9
|
+
#
|
10
|
+
# It takes an input with text and prints them nicely. The text block can
|
11
|
+
# have statuses (prefixed with `-----> `), errors (prefixed with `! `),
|
12
|
+
# commands (prefixed with `$ `) or anything else. Depending on the type of
|
13
|
+
# the message, they will be delegated to the proper print_* helper.
|
14
|
+
#
|
15
|
+
# -----> Unlocking
|
16
|
+
# $ unlock foo
|
17
|
+
# Unlocked.
|
18
|
+
# ! ERROR: Failed
|
19
|
+
#
|
20
|
+
# Returns nothing.
|
21
|
+
#
|
22
|
+
def print_str(str)
|
23
|
+
if str =~ /^\-+> (.*?)$/
|
24
|
+
print_status $1
|
25
|
+
elsif str =~ /^! (.*?)$/
|
26
|
+
print_error $1
|
27
|
+
elsif str =~ /^\$ (.*?)$/
|
28
|
+
print_command $1
|
29
|
+
else
|
30
|
+
print_stdout str
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
7
34
|
# ### print_status
|
8
35
|
# Prints a status message. (`----->`)
|
9
36
|
def print_status(msg)
|
@@ -42,33 +69,6 @@ module Mina
|
|
42
69
|
ENV['NO_COLOR'] ? str : "\033[#{c}m#{str}\033[0m"
|
43
70
|
end
|
44
71
|
|
45
|
-
# ### print_str
|
46
|
-
# Prints a string by delegating it to the proper output helper.
|
47
|
-
#
|
48
|
-
# It takes an input with text and prints them nicely. The text block can
|
49
|
-
# have statuses (prefixed with `-----> `), errors (prefixed with `! `),
|
50
|
-
# commands (prefixed with `$ `) or anything else. Depending on the type of
|
51
|
-
# the message, they will be delegated to the proper print_* helper.
|
52
|
-
#
|
53
|
-
# -----> Unlocking
|
54
|
-
# $ unlock foo
|
55
|
-
# Unlocked.
|
56
|
-
# ! ERROR: Failed
|
57
|
-
#
|
58
|
-
# Returns nothing.
|
59
|
-
#
|
60
|
-
def print_str(str)
|
61
|
-
if str =~ /^\-+> (.*?)$/
|
62
|
-
print_status $1
|
63
|
-
elsif str =~ /^! (.*?)$/
|
64
|
-
print_error $1
|
65
|
-
elsif str =~ /^\$ (.*?)$/
|
66
|
-
print_command $1
|
67
|
-
else
|
68
|
-
print_stdout str
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
72
|
# ### pretty_system
|
73
73
|
# __Internal:__ Works like `system`, but indents and puts color.
|
74
74
|
#
|
@@ -104,6 +104,14 @@ module Mina
|
|
104
104
|
end
|
105
105
|
end
|
106
106
|
|
107
|
+
# Read stdin in the background and send it out.
|
108
|
+
p2 = fork do
|
109
|
+
trap("INT") {}
|
110
|
+
while (char = STDIN.getbyte rescue nil)
|
111
|
+
i.putc char if char
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
107
115
|
# Read stdout.
|
108
116
|
while str = o.gets
|
109
117
|
print_str str
|
data/lib/mina/rails.rb
CHANGED
@@ -13,25 +13,28 @@ require 'mina/bundler'
|
|
13
13
|
#
|
14
14
|
# Note that changing this will NOT change the environment that your application
|
15
15
|
# is ran in.
|
16
|
+
|
16
17
|
set_default :rails_env, 'production'
|
17
18
|
|
18
19
|
# ### bundle_prefix
|
19
|
-
# Prefix for Bundler commands.
|
20
|
-
#
|
20
|
+
# Prefix for Bundler commands. Often to something like `RAILS_ENV=production
|
21
|
+
# bundle exec`.
|
22
|
+
#
|
23
|
+
# queue! "#{bundle_prefix} annotate -r"
|
21
24
|
|
22
25
|
set_default :bundle_prefix, lambda { %{RAILS_ENV="#{rails_env}" #{bundle_bin} exec} }
|
23
26
|
|
24
27
|
# ### rake
|
25
28
|
# The prefix for `rake` commands. Use like so:
|
26
29
|
#
|
27
|
-
# queue "#{rake} db:migrate"
|
30
|
+
# queue! "#{rake} db:migrate"
|
28
31
|
|
29
32
|
set_default :rake, lambda { %{#{bundle_prefix} rake} }
|
30
33
|
|
31
34
|
# ### rails
|
32
35
|
# The prefix for `rails` commands. Use like so:
|
33
36
|
#
|
34
|
-
# queue "#{rails} console"
|
37
|
+
# queue! "#{rails} console"
|
35
38
|
|
36
39
|
set_default :rails, lambda { %{#{bundle_prefix} rails} }
|
37
40
|
|
@@ -62,7 +65,7 @@ make_run_task = lambda { |name, sample_args|
|
|
62
65
|
task name, [:arguments] => :environment do |t, args|
|
63
66
|
arguments = args[:arguments]
|
64
67
|
command = send name
|
65
|
-
unless
|
68
|
+
unless arguments
|
66
69
|
puts %{You need to provide arguments. Try: mina "#{name}[#{sample_args}]"}
|
67
70
|
exit 1
|
68
71
|
end
|
data/lib/mina/rake.rb
CHANGED
data/lib/mina/rbenv.rb
CHANGED
@@ -35,7 +35,7 @@ task :'rbenv:load' do
|
|
35
35
|
echo "-----> Loading rbenv"
|
36
36
|
#{echo_cmd %{export PATH="#{rbenv_path}/bin:$PATH"}}
|
37
37
|
|
38
|
-
if ! which
|
38
|
+
if ! which rbenv >/dev/null; then
|
39
39
|
echo "! rbenv not found"
|
40
40
|
echo "! If rbenv is installed, check your :rbenv_path setting."
|
41
41
|
exit 1
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# # Helpers: SSH helpers
|
2
|
+
# You don't need to invoke these helpers, they're already invoked automatically.
|
3
|
+
#
|
4
|
+
module Mina
|
5
|
+
module SshHelpers
|
6
|
+
# ### ssh
|
7
|
+
# Executes a command via SSH.
|
8
|
+
#
|
9
|
+
# Returns nothing usually, but if `{ return: true }` is given, returns the
|
10
|
+
# STDOUT output of the SSH session.
|
11
|
+
#
|
12
|
+
# `options` is a hash of options:
|
13
|
+
#
|
14
|
+
# - `:pretty` - Prettify the output if true.
|
15
|
+
# - `:return` - If set to true, returns the output.
|
16
|
+
#
|
17
|
+
# Example
|
18
|
+
#
|
19
|
+
# ssh("ls", return: true)
|
20
|
+
|
21
|
+
def ssh(cmd, options={})
|
22
|
+
cmd = cmd.join("\n") if cmd.is_a?(Array)
|
23
|
+
|
24
|
+
require 'shellwords'
|
25
|
+
|
26
|
+
result = 0
|
27
|
+
script = Shellwords.escape(cmd)
|
28
|
+
|
29
|
+
if options[:return] == true
|
30
|
+
result = `#{ssh_command} -- #{script}`
|
31
|
+
|
32
|
+
elsif simulate_mode?
|
33
|
+
str = "Executing the following via '#{ssh_command}':"
|
34
|
+
puts "#!/usr/bin/env bash"
|
35
|
+
puts "# #{str}"
|
36
|
+
puts "#"
|
37
|
+
|
38
|
+
puts cmd
|
39
|
+
|
40
|
+
else
|
41
|
+
code = "#{ssh_command} -- #{script}"
|
42
|
+
if settings.term_mode.to_s == 'pretty'
|
43
|
+
result = pretty_system(code)
|
44
|
+
elsif settings.term_mode.to_s == 'exec'
|
45
|
+
exec code
|
46
|
+
else
|
47
|
+
system code
|
48
|
+
result = $?.to_i
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
die result if result.is_a?(Fixnum) && result > 0
|
53
|
+
result
|
54
|
+
end
|
55
|
+
|
56
|
+
# ### ssh_command
|
57
|
+
# Returns the SSH command to be executed.
|
58
|
+
#
|
59
|
+
# set :domain, 'foo.com'
|
60
|
+
# set :user, 'diggity'
|
61
|
+
#
|
62
|
+
# puts ssh_command
|
63
|
+
# #=> 'ssh diggity@foo.com'
|
64
|
+
|
65
|
+
def ssh_command
|
66
|
+
args = domain!
|
67
|
+
args = "#{user}@#{args}" if user?
|
68
|
+
args << " -i #{identity_file}" if identity_file?
|
69
|
+
args << " -p #{port}" if port?
|
70
|
+
args << " -A" if forward_agent?
|
71
|
+
args << " #{ssh_options}" if ssh_options?
|
72
|
+
args << " -t"
|
73
|
+
"ssh #{args}"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
data/lib/mina/version.rb
CHANGED
data/lib/mina/whenever.rb
CHANGED
data/test_env/config/deploy.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mina
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -93,6 +93,7 @@ files:
|
|
93
93
|
- lib/mina/rbenv.rb
|
94
94
|
- lib/mina/rvm.rb
|
95
95
|
- lib/mina/settings.rb
|
96
|
+
- lib/mina/ssh_helpers.rb
|
96
97
|
- lib/mina/tools.rb
|
97
98
|
- lib/mina/version.rb
|
98
99
|
- lib/mina/whenever.rb
|