mina 0.3.4 → 0.3.6
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/Makefile +1 -0
- data/Readme.md +23 -6
- data/data/deploy.rb +10 -3
- data/data/deploy.sh.erb +21 -4
- data/lib/mina/foreman.rb +2 -1
- data/lib/mina/git.rb +7 -0
- data/lib/mina/helpers.rb +1 -1
- data/lib/mina/local_helpers.rb +8 -9
- data/lib/mina/npm.rb +2 -2
- data/lib/mina/rails.rb +30 -3
- data/lib/mina/ry.rb +55 -0
- data/lib/mina/ssh_helpers.rb +1 -0
- data/lib/mina/version.rb +1 -1
- data/lib/mina/whenever.rb +6 -4
- data/spec/commands/deploy_spec.rb +4 -0
- data/spec/commands/real_deploy_spec.rb +3 -0
- data/spec/helpers/local_helper_spec.rb +70 -0
- data/support/Readme-header.md +1 -1
- data/test_env/config/deploy.rb +3 -0
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 76fbf68f7148a388b239003646be8ccc30ff6a5a
|
4
|
+
data.tar.gz: 593f35381e2513afc1ce719617fa7e25d3bbf90a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 10d3b8bcd6dc310b58e0889c248965e3edd425048ed37047c18a3c077f3cfee105bb555b47b0677a9678fd932076b2651b61e6eca15de35c68f56065acb3f588
|
7
|
+
data.tar.gz: c75d7b3fa4e741b289bf30c19623f6ef6f5847685d5202f9f86e60cb1fbde080a00d8c61220195b9f074614edacf1078a8705644cdb725dea6490950c2dfb8b3
|
data/Makefile
CHANGED
data/Readme.md
CHANGED
@@ -13,7 +13,7 @@ session per deploy, minimizing the SSH connection overhead.
|
|
13
13
|
$ gem install mina
|
14
14
|
$ mina
|
15
15
|
|
16
|
-
[](https://travis-ci.org/mina-deploy/mina) [](http://badge.fury.io/rb/mina)
|
16
|
+
[](https://travis-ci.org/mina-deploy/mina) [](http://badge.fury.io/rb/mina) [](http://inch-ci.org/github/mina-deploy/mina)
|
17
17
|
|
18
18
|
User guide
|
19
19
|
==========
|
@@ -837,6 +837,9 @@ their own.
|
|
837
837
|
### git:clone
|
838
838
|
Clones the Git repository. Meant to be used inside a deploy script.
|
839
839
|
|
840
|
+
### git:revision
|
841
|
+
Gets the current git revision deployed on server.
|
842
|
+
|
840
843
|
# Modules: Rails
|
841
844
|
Adds settings and tasks for managing Rails projects.
|
842
845
|
|
@@ -887,6 +890,14 @@ release.
|
|
887
890
|
Override this if you have custom asset paths declared in your Rails's
|
888
891
|
`config.assets.paths` setting.
|
889
892
|
|
893
|
+
### compiled_asset_path
|
894
|
+
The path to be copied to the new release.
|
895
|
+
|
896
|
+
The path your assets are compiled to. If your `assets_path` assets have changed,
|
897
|
+
this is the folder that gets copied accross from the current release to the new release.
|
898
|
+
|
899
|
+
Override this if you have custom public asset paths.
|
900
|
+
|
890
901
|
### rake_assets_precompile
|
891
902
|
The command to invoke when precompiling assets.
|
892
903
|
Override me if you like.
|
@@ -919,6 +930,9 @@ Opens the Ruby console for the currently-deployed version.
|
|
919
930
|
$ mina console
|
920
931
|
~~~
|
921
932
|
|
933
|
+
### log
|
934
|
+
Tail log from server
|
935
|
+
|
922
936
|
## Deploy tasks
|
923
937
|
These tasks are meant to be invoked inside deploy scripts, not invoked on
|
924
938
|
their own.
|
@@ -927,6 +941,8 @@ their own.
|
|
927
941
|
|
928
942
|
### rails:db_migrate:force
|
929
943
|
|
944
|
+
### rails:db_create
|
945
|
+
|
930
946
|
### rails:db_rollback
|
931
947
|
|
932
948
|
### rails:assets_precompile:force
|
@@ -1060,8 +1076,8 @@ Installs node modules. Takes into account if executed `in_directory` and namespa
|
|
1060
1076
|
### bower:install
|
1061
1077
|
Installs bower modules. Takes into account if executed `in_directory` and namespaces the installed modules in the shared folder.
|
1062
1078
|
|
1063
|
-
###
|
1064
|
-
|
1079
|
+
### grunt:install
|
1080
|
+
Launch a task with grunt. Set the grunt_task (defaults to \"build\") variable before calling this.
|
1065
1081
|
|
1066
1082
|
# Modules: Whenever
|
1067
1083
|
Adds settings and tasks for managing projects with [whenever].
|
@@ -1074,7 +1090,9 @@ require 'mina/whenever'
|
|
1074
1090
|
task :deploy => :environment do
|
1075
1091
|
deploy do
|
1076
1092
|
...
|
1077
|
-
|
1093
|
+
to :launch do
|
1094
|
+
invoke :'whenever:update'
|
1095
|
+
end
|
1078
1096
|
end
|
1079
1097
|
~~~
|
1080
1098
|
|
@@ -1105,8 +1123,7 @@ end
|
|
1105
1123
|
Acknowledgements
|
1106
1124
|
----------------
|
1107
1125
|
|
1108
|
-
© 2012-2015, Nadarei. Released under the [MIT
|
1109
|
-
License](http://www.opensource.org/licenses/mit-license.php).
|
1126
|
+
© 2012-2015, Nadarei. Released under the [MIT License](http://www.opensource.org/licenses/mit-license.php).
|
1110
1127
|
|
1111
1128
|
Mina is authored and maintained by [Rico Sta. Cruz][rsc] and [Michael
|
1112
1129
|
Galero][mg] with help from its [contributors][c]. It is sponsored by our
|
data/data/deploy.rb
CHANGED
@@ -20,7 +20,7 @@ set :branch, 'master'
|
|
20
20
|
|
21
21
|
# Manually create these paths in shared/ (eg: shared/config/database.yml) in your server.
|
22
22
|
# They will be linked in the 'deploy:link_shared_paths' step.
|
23
|
-
set :shared_paths, ['config/database.yml', 'log']
|
23
|
+
set :shared_paths, ['config/database.yml', 'config/secrets.yml', 'log']
|
24
24
|
|
25
25
|
# Optional settings:
|
26
26
|
# set :user, 'foobar' # Username in the server to SSH to.
|
@@ -49,7 +49,15 @@ task :setup => :environment do
|
|
49
49
|
queue! %[chmod g+rx,u+rwx "#{deploy_to}/#{shared_path}/config"]
|
50
50
|
|
51
51
|
queue! %[touch "#{deploy_to}/#{shared_path}/config/database.yml"]
|
52
|
-
queue
|
52
|
+
queue! %[touch "#{deploy_to}/#{shared_path}/config/secrets.yml"]
|
53
|
+
queue %[echo "-----> Be sure to edit '#{deploy_to}/#{shared_path}/config/database.yml' and 'secrets.yml'."]
|
54
|
+
|
55
|
+
queue %[
|
56
|
+
repo_host=`echo $repo | sed -e 's/.*@//g' -e 's/:.*//g'` &&
|
57
|
+
repo_port=`echo $repo | grep -o ':[0-9]*' | sed -e 's/://g'` &&
|
58
|
+
if [ -z "${repo_port}" ]; then repo_port=22; fi &&
|
59
|
+
ssh-keyscan -p $repo_port -H $repo_host >> ~/.ssh/known_hosts
|
60
|
+
]
|
53
61
|
end
|
54
62
|
|
55
63
|
desc "Deploys the current version to the server."
|
@@ -80,4 +88,3 @@ end
|
|
80
88
|
# - http://nadarei.co/mina/tasks
|
81
89
|
# - http://nadarei.co/mina/settings
|
82
90
|
# - http://nadarei.co/mina/helpers
|
83
|
-
|
data/data/deploy.sh.erb
CHANGED
@@ -1,10 +1,14 @@
|
|
1
1
|
<%
|
2
2
|
prepare = commands(:default).map { |s| "(\n\n#{indent 2, s}\n\n)" }.join(" && ")
|
3
|
+
build = commands(:build).map { |s| "(\n\n#{indent 2, s}\n\n)" }.join(" && ")
|
3
4
|
launch = commands(:launch).map { |s| "(\n\n#{indent 2, s}\n\n)" }.join(" && ")
|
4
5
|
clean = commands(:clean).map { |s| "(\n\n#{indent 2, s}\n\n)" }.join(" && ")
|
5
6
|
%>
|
6
7
|
#!/usr/bin/env bash
|
7
8
|
|
9
|
+
# Bail out ASAP
|
10
|
+
set -e
|
11
|
+
|
8
12
|
# Go to the deploy path
|
9
13
|
cd "<%= deploy_to %>" || (
|
10
14
|
echo "! ERROR: not set up."
|
@@ -25,7 +29,7 @@ fi
|
|
25
29
|
if [ -e "<%= lock_file %>" ]; then
|
26
30
|
echo "! ERROR: another deployment is ongoing."
|
27
31
|
echo "The file '<%= lock_file %>' was found."
|
28
|
-
echo "If no other deployment is ongoing, delete the file
|
32
|
+
echo "If no other deployment is ongoing, run 'mina deploy:force_unlock' to delete the file."
|
29
33
|
exit 17
|
30
34
|
fi
|
31
35
|
|
@@ -49,16 +53,29 @@ fi
|
|
49
53
|
<%= echo_cmd %[cd "$build_path"] %> &&
|
50
54
|
(
|
51
55
|
<%= indent 4, (prepare.empty? ? "true" : prepare) %>
|
52
|
-
)
|
56
|
+
) &&
|
57
|
+
echo "-----> Deploy finished"
|
53
58
|
) &&
|
54
59
|
|
55
60
|
#
|
56
|
-
#
|
61
|
+
# Build
|
57
62
|
(
|
58
|
-
echo "----->
|
63
|
+
echo "-----> Building"
|
59
64
|
echo "-----> Moving build to $release_path"
|
60
65
|
<%= echo_cmd %[mv "$build_path" "$release_path"] %> &&
|
66
|
+
<%= echo_cmd %[cd "$release_path"] %> &&
|
67
|
+
(
|
68
|
+
<%= indent 4, (build.empty? ? "true" : build) %>
|
69
|
+
) &&
|
70
|
+
echo "-----> Build finished"
|
61
71
|
|
72
|
+
) &&
|
73
|
+
|
74
|
+
#
|
75
|
+
# Launching
|
76
|
+
# Rename to the real release path, then symlink 'current'
|
77
|
+
(
|
78
|
+
echo "-----> Launching"
|
62
79
|
echo "-----> Updating the <%= current_path %> symlink" &&
|
63
80
|
<%= echo_cmd %[ln -nfs "$release_path" "#{current_path}"] %>
|
64
81
|
) &&
|
data/lib/mina/foreman.rb
CHANGED
@@ -43,12 +43,13 @@ set_default :foreman_log, lambda { "#{deploy_to!}/#{shared_path}/log" }
|
|
43
43
|
set_default :foreman_sudo, true
|
44
44
|
set_default :foreman_format, 'upstart'
|
45
45
|
set_default :foreman_location, '/etc/init'
|
46
|
+
set_default :foreman_procfile, 'Procfile'
|
46
47
|
|
47
48
|
namespace :foreman do
|
48
49
|
desc 'Export the Procfile to Ubuntu upstart scripts'
|
49
50
|
task :export do
|
50
51
|
sudo_cmd = "sudo" if foreman_sudo
|
51
|
-
export_cmd = "#{sudo_cmd} bundle exec foreman export #{foreman_format} #{foreman_location} -a #{foreman_app} -u #{foreman_user} -d #{deploy_to!}/#{current_path!} -l #{foreman_log}"
|
52
|
+
export_cmd = "#{sudo_cmd} bundle exec foreman export #{foreman_format} #{foreman_location} -a #{foreman_app} -u #{foreman_user} -d #{deploy_to!}/#{current_path!} -l #{foreman_log} -f #{foreman_procfile}"
|
52
53
|
|
53
54
|
queue %{
|
54
55
|
echo "-----> Exporting foreman procfile for #{foreman_app}"
|
data/lib/mina/git.rb
CHANGED
@@ -52,6 +52,7 @@ namespace :git do
|
|
52
52
|
status = %[
|
53
53
|
echo "-----> Using this git commit" &&
|
54
54
|
echo &&
|
55
|
+
#{echo_cmd %[git rev-parse HEAD > .mina_git_revision]} &&
|
55
56
|
#{echo_cmd %[git --no-pager log --format='%aN (%h):%n> %s' -n 1]} &&
|
56
57
|
#{echo_cmd %[rm -rf .git]} &&
|
57
58
|
echo
|
@@ -59,4 +60,10 @@ namespace :git do
|
|
59
60
|
|
60
61
|
queue clone + status
|
61
62
|
end
|
63
|
+
|
64
|
+
# ### git:revision
|
65
|
+
# Gets the current git revision deployed on server.
|
66
|
+
task :revision do
|
67
|
+
queue %[cat #{deploy_to}/current/.mina_git_revision]
|
68
|
+
end
|
62
69
|
end
|
data/lib/mina/helpers.rb
CHANGED
data/lib/mina/local_helpers.rb
CHANGED
@@ -19,15 +19,12 @@ module Mina
|
|
19
19
|
# local("ls", return: true)
|
20
20
|
|
21
21
|
def local(cmd, options = {})
|
22
|
-
|
23
|
-
|
24
|
-
cmd = cmd.join("\n") if cmd.is_a?(Array)
|
25
|
-
script = Shellwords.escape(cmd)
|
22
|
+
script = cmd.join("\n") if cmd.is_a?(Array)
|
26
23
|
|
27
24
|
if options[:return] == true
|
28
25
|
`#{script}`
|
29
26
|
elsif simulate_mode?
|
30
|
-
Local.simulate(
|
27
|
+
Local.simulate(script)
|
31
28
|
else
|
32
29
|
result = Local.invoke(script, self)
|
33
30
|
Local.ensure_successful result, self
|
@@ -64,16 +61,18 @@ module Mina
|
|
64
61
|
code = "#{script}"
|
65
62
|
|
66
63
|
# Certain environments can't do :pretty mode.
|
67
|
-
term_mode = :exec
|
64
|
+
term_mode = :exec if term_mode == :pretty && !pretty_supported?
|
68
65
|
|
69
66
|
case term_mode
|
70
67
|
when :pretty
|
68
|
+
require 'shellwords'
|
69
|
+
code = Shellwords.escape(code)
|
71
70
|
this.pretty_system(code)
|
72
71
|
when :exec
|
73
|
-
exec code
|
72
|
+
Kernel.exec code
|
74
73
|
else
|
75
|
-
system code
|
76
|
-
$?.
|
74
|
+
Kernel.system code
|
75
|
+
$?.exitstatus
|
77
76
|
end
|
78
77
|
end
|
79
78
|
|
data/lib/mina/npm.rb
CHANGED
@@ -77,8 +77,8 @@ namespace :bower do
|
|
77
77
|
end
|
78
78
|
|
79
79
|
namespace :grunt do
|
80
|
-
# ###
|
81
|
-
#
|
80
|
+
# ### grunt:install
|
81
|
+
# Launch a task with grunt. Set the grunt_task (defaults to \"build\") variable before calling this.
|
82
82
|
desc "Launch a task with grunt. Set the grunt_task (defaults to \"build\") variable before calling this."
|
83
83
|
task :task => :environment do
|
84
84
|
queue %{
|
data/lib/mina/rails.rb
CHANGED
@@ -52,6 +52,16 @@ set_default :rails, lambda { %{#{bundle_prefix} rails} }
|
|
52
52
|
|
53
53
|
set_default :asset_paths, ['vendor/assets/', 'app/assets/']
|
54
54
|
|
55
|
+
# ### compiled_asset_path
|
56
|
+
# The path to be copied to the new release.
|
57
|
+
#
|
58
|
+
# The path your assets are compiled to. If your `assets_path` assets have changed,
|
59
|
+
# this is the folder that gets copied accross from the current release to the new release.
|
60
|
+
#
|
61
|
+
# Override this if you have custom public asset paths.
|
62
|
+
|
63
|
+
set_default :compiled_asset_path, 'public/assets'
|
64
|
+
|
55
65
|
# ### rake_assets_precompile
|
56
66
|
# The command to invoke when precompiling assets.
|
57
67
|
# Override me if you like.
|
@@ -75,7 +85,7 @@ make_run_task = lambda { |name, sample_args|
|
|
75
85
|
|
76
86
|
def check_for_changes_script(options={})
|
77
87
|
diffs = options[:at].map { |path|
|
78
|
-
%[diff -
|
88
|
+
%[diff -rN "#{deploy_to}/#{current_path}/#{path}" "./#{path}" 2>/dev/null]
|
79
89
|
}.join("\n")
|
80
90
|
|
81
91
|
unindent %[
|
@@ -125,6 +135,13 @@ task :console => :environment do
|
|
125
135
|
queue echo_cmd %[cd "#{deploy_to!}/#{current_path!}" && #{rails} console && exit]
|
126
136
|
end
|
127
137
|
|
138
|
+
# ### log
|
139
|
+
# Tail log from server
|
140
|
+
desc "Tail log from server"
|
141
|
+
task :log => :environment do
|
142
|
+
queue %[tail -f #{deploy_to}/#{current_path}/log/#{rails_env}.log]
|
143
|
+
end
|
144
|
+
|
128
145
|
# ## Deploy tasks
|
129
146
|
# These tasks are meant to be invoked inside deploy scripts, not invoked on
|
130
147
|
# their own.
|
@@ -166,6 +183,15 @@ namespace :rails do
|
|
166
183
|
}
|
167
184
|
end
|
168
185
|
|
186
|
+
# ### rails:db_create
|
187
|
+
desc "Creates the Rails database."
|
188
|
+
task :'db_create' do
|
189
|
+
queue %{
|
190
|
+
echo "-----> Creating database"
|
191
|
+
#{echo_cmd %[#{rake} db:create]}
|
192
|
+
}
|
193
|
+
end
|
194
|
+
|
169
195
|
# ### rails:db_rollback
|
170
196
|
desc "Rollbacks the Rails database."
|
171
197
|
task :'db_rollback' do
|
@@ -195,11 +221,12 @@ namespace :rails do
|
|
195
221
|
'Precompiling asset files'
|
196
222
|
|
197
223
|
queue check_for_changes_script \
|
198
|
-
:check =>
|
224
|
+
:check => compiled_asset_path,
|
199
225
|
:at => [*asset_paths],
|
200
226
|
:skip => %[
|
201
227
|
echo "-----> Skipping asset precompilation"
|
202
|
-
#{echo_cmd %[
|
228
|
+
#{echo_cmd %[mkdir -p "#{deploy_to}/$build_path/#{compiled_asset_path}"]}
|
229
|
+
#{echo_cmd %[cp -R "#{deploy_to}/#{current_path}/#{compiled_asset_path}/." "#{deploy_to}/$build_path/#{compiled_asset_path}"]}
|
203
230
|
],
|
204
231
|
:changed => %[
|
205
232
|
echo "-----> #{message}"
|
data/lib/mina/ry.rb
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
# # Modules: ry
|
2
|
+
# Adds settings and tasks for managing [ry] installations.
|
3
|
+
#
|
4
|
+
# [ry]: https://github.com/jneen/ry
|
5
|
+
#
|
6
|
+
# require 'mina/ry'
|
7
|
+
#
|
8
|
+
# ## Common usage
|
9
|
+
#
|
10
|
+
# task :environment do
|
11
|
+
# invoke :'ry[ruby-1.9.3-p392]'
|
12
|
+
# # or without parameter to use default ruby version
|
13
|
+
# invoke :'ry'
|
14
|
+
# end
|
15
|
+
#
|
16
|
+
# task :deploy => :environment do
|
17
|
+
# ...
|
18
|
+
# end
|
19
|
+
|
20
|
+
# ## Settings
|
21
|
+
# Any and all of these settings can be overriden in your `deploy.rb`.
|
22
|
+
|
23
|
+
# ### ry_path
|
24
|
+
# Path where *ry* init scripts are installed.
|
25
|
+
#
|
26
|
+
set_default :ry_path, "$HOME/.local"
|
27
|
+
|
28
|
+
# ## Tasks
|
29
|
+
|
30
|
+
# ### ry[version]
|
31
|
+
# Switch to given Ruby version
|
32
|
+
|
33
|
+
task :ry, :env do |t, args|
|
34
|
+
unless args[:env]
|
35
|
+
print_status "Task 'ry' without argument will use default Ruby version."
|
36
|
+
end
|
37
|
+
|
38
|
+
queue %{
|
39
|
+
echo "-----> ry to version: '#{args[:env] || '**not specified**'}'"
|
40
|
+
|
41
|
+
echo "-----> Loading ry"
|
42
|
+
if [[ ! -e "#{ry_path}/bin" ]]; then
|
43
|
+
echo "! ry not found"
|
44
|
+
echo "! If ry is installed, check your :ry_path setting."
|
45
|
+
exit 1
|
46
|
+
fi
|
47
|
+
#{echo_cmd %{export PATH="#{ry_path}/bin:$PATH"}}
|
48
|
+
#{echo_cmd %{eval "$(ry setup)"}}
|
49
|
+
|
50
|
+
RY_RUBY="#{args[:env]}"
|
51
|
+
if [ -n "$RY_RUBY" ]; then
|
52
|
+
#{echo_cmd %{ry use $RY_RUBY}} || exit 1
|
53
|
+
fi
|
54
|
+
}
|
55
|
+
end
|
data/lib/mina/ssh_helpers.rb
CHANGED
data/lib/mina/version.rb
CHANGED
data/lib/mina/whenever.rb
CHANGED
@@ -10,26 +10,28 @@
|
|
10
10
|
# task :deploy => :environment do
|
11
11
|
# deploy do
|
12
12
|
# ...
|
13
|
-
#
|
13
|
+
# to :launch do
|
14
|
+
# invoke :'whenever:update'
|
15
|
+
# end
|
14
16
|
# end
|
15
17
|
|
16
18
|
namespace :whenever do
|
17
19
|
desc "Clear crontab"
|
18
|
-
task :clear do
|
20
|
+
task :clear => :environment do
|
19
21
|
queue %{
|
20
22
|
echo "-----> Clear crontab for #{domain}_#{rails_env}"
|
21
23
|
#{echo_cmd %[cd #{deploy_to!}/#{current_path!} ; #{bundle_bin} exec whenever --clear-crontab #{domain}_#{rails_env} --set 'environment=#{rails_env}&path=#{deploy_to!}/#{current_path!}']}
|
22
24
|
}
|
23
25
|
end
|
24
26
|
desc "Update crontab"
|
25
|
-
task :update do
|
27
|
+
task :update => :environment do
|
26
28
|
queue %{
|
27
29
|
echo "-----> Update crontab for #{domain}_#{rails_env}"
|
28
30
|
#{echo_cmd %[cd #{deploy_to!}/#{current_path!} ; #{bundle_bin} exec whenever --update-crontab #{domain}_#{rails_env} --set 'environment=#{rails_env}&path=#{deploy_to!}/#{current_path!}']}
|
29
31
|
}
|
30
32
|
end
|
31
33
|
desc "Write crontab"
|
32
|
-
task :write do
|
34
|
+
task :write => :environment do
|
33
35
|
queue %{
|
34
36
|
echo "-----> Update crontab for #{domain}_#{rails_env}"
|
35
37
|
#{echo_cmd %[cd #{deploy_to!}/#{current_path!} ; #{bundle_bin} exec whenever --write-crontab #{domain}_#{rails_env} --set 'environment=#{rails_env}&path=#{deploy_to!}/#{current_path!}']}
|
@@ -29,6 +29,10 @@ describe "Invoking the 'mina' command in a project" do
|
|
29
29
|
expect(stdout).to include "bundle exec rake db:migrate"
|
30
30
|
end
|
31
31
|
|
32
|
+
it "should include 'to :build' directives" do
|
33
|
+
stdout.should include "touch build.txt"
|
34
|
+
end
|
35
|
+
|
32
36
|
it "should include 'to :launch' directives" do
|
33
37
|
expect(stdout).to include "touch tmp/restart.txt"
|
34
38
|
end
|
@@ -30,6 +30,7 @@ describe "Invoking the 'mina' command in a project", :ssh => true do
|
|
30
30
|
print "[deploy 1]" if ENV['verbose']
|
31
31
|
mina 'deploy', '--verbose'
|
32
32
|
expect(stdout).to include "-----> Creating a temporary build path"
|
33
|
+
expect(stdout).to include "git rev-parse HEAD > .mina_git_revision"
|
33
34
|
expect(stdout).to include "rm -rf .git"
|
34
35
|
expect(stdout).to include "mkdir -p"
|
35
36
|
expect(File.exists?('deploy/last_version')).to be_truthy
|
@@ -41,6 +42,7 @@ describe "Invoking the 'mina' command in a project", :ssh => true do
|
|
41
42
|
expect(File.exists?('deploy/current')).to be_truthy
|
42
43
|
expect(File.read('deploy/last_version').strip).to eq('1')
|
43
44
|
expect(File.exists?('deploy/current/tmp/restart.txt')).to be_truthy
|
45
|
+
expect(File.exists?('deploy/current/.mina_git_revision')).to be_truthy
|
44
46
|
|
45
47
|
# And again, to test out sequential versions and stuff
|
46
48
|
print "[deploy 2]" if ENV['verbose']
|
@@ -49,5 +51,6 @@ describe "Invoking the 'mina' command in a project", :ssh => true do
|
|
49
51
|
expect(stdout).not_to include "mkdir -p"
|
50
52
|
expect(File.directory?('deploy/releases/2')).to be_truthy
|
51
53
|
expect(File.read('deploy/last_version').strip).to eq('2')
|
54
|
+
expect(File.exists?('deploy/current/.mina_git_revision')).to be_truthy
|
52
55
|
end
|
53
56
|
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Mina::LocalHelpers::Local do
|
4
|
+
describe '.invoke' do
|
5
|
+
let :scope do
|
6
|
+
double("rake_application").tap do |scope|
|
7
|
+
allow(scope).to receive(:settings).and_return(settings)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
let(:settings) { OpenStruct.new }
|
12
|
+
|
13
|
+
it 'uses the pretty system with shell-escaped command when term_mode is set to :pretty and pretty is supported' do
|
14
|
+
settings.term_mode = :pretty
|
15
|
+
cmd = %[echo "hello"]
|
16
|
+
|
17
|
+
allow(described_class).to receive(:pretty_supported?).and_return(true)
|
18
|
+
expect(scope).to receive(:pretty_system).with(Shellwords.escape(cmd)).and_return(0)
|
19
|
+
|
20
|
+
described_class.invoke(cmd, scope)
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'does NOT use the pretty system when term_mode is set to :pretty and pretty is NOT supported' do
|
24
|
+
settings.term_mode = :pretty
|
25
|
+
cmd = %[echo "hello"]
|
26
|
+
|
27
|
+
allow(described_class).to receive(:pretty_supported?).and_return(false)
|
28
|
+
expect(scope).not_to receive(:pretty_system)
|
29
|
+
expect(Kernel).to receive(:exec).and_return(0)
|
30
|
+
|
31
|
+
described_class.invoke(cmd, scope)
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'returns the sub-shell exit status when using the pretty system' do
|
35
|
+
settings.term_mode = :pretty
|
36
|
+
|
37
|
+
allow(described_class).to receive(:pretty_supported?).and_return(true)
|
38
|
+
allow(scope).to receive(:pretty_system).with("return0").and_return(0)
|
39
|
+
allow(scope).to receive(:pretty_system).with("return13").and_return(13)
|
40
|
+
|
41
|
+
expect(described_class.invoke("return0", scope)).to eq 0
|
42
|
+
expect(described_class.invoke("return13", scope)).to eq 13
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'calls Kernel.exec with non shell-escaped command when term_mode is :exec' do
|
46
|
+
settings.term_mode = :exec
|
47
|
+
cmd = %[echo "hello"]
|
48
|
+
|
49
|
+
expect(Kernel).to receive(:exec).with(cmd).and_return(0)
|
50
|
+
|
51
|
+
described_class.invoke(cmd, scope)
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'calls Kernel.system with non shell-escaped command when term_mode is not :pretty nor :exec' do
|
55
|
+
settings.term_mode = nil
|
56
|
+
cmd = %[echo "hello"]
|
57
|
+
|
58
|
+
expect(Kernel).to receive(:system).with(cmd).and_return("hello\n")
|
59
|
+
|
60
|
+
described_class.invoke(cmd, scope)
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'returns the sub-shell exit status when using Kernel.system' do
|
64
|
+
settings.term_mode = nil
|
65
|
+
|
66
|
+
expect(described_class.invoke(%[/bin/sh -c 'exit 0'], scope)).to eq 0
|
67
|
+
expect(described_class.invoke(%[/bin/sh -c 'exit 13'], scope)).to eq 13
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
data/support/Readme-header.md
CHANGED
@@ -13,4 +13,4 @@ session per deploy, minimizing the SSH connection overhead.
|
|
13
13
|
$ gem install mina
|
14
14
|
$ mina
|
15
15
|
|
16
|
-
[](https://travis-ci.org/mina-deploy/mina) [](http://badge.fury.io/rb/mina)
|
16
|
+
[](https://travis-ci.org/mina-deploy/mina) [](http://badge.fury.io/rb/mina) [](http://inch-ci.org/github/mina-deploy/mina)
|
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.3.
|
4
|
+
version: 0.3.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rico Sta. Cruz
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-07-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -107,6 +107,7 @@ files:
|
|
107
107
|
- lib/mina/rake.rb
|
108
108
|
- lib/mina/rbenv.rb
|
109
109
|
- lib/mina/rvm.rb
|
110
|
+
- lib/mina/ry.rb
|
110
111
|
- lib/mina/settings.rb
|
111
112
|
- lib/mina/ssh_helpers.rb
|
112
113
|
- lib/mina/tools.rb
|
@@ -132,6 +133,7 @@ files:
|
|
132
133
|
- spec/fixtures/custom_file_env/custom_deploy.rb
|
133
134
|
- spec/fixtures/empty_env/config/deploy.rb
|
134
135
|
- spec/helpers/exec_helper_spec.rb
|
136
|
+
- spec/helpers/local_helper_spec.rb
|
135
137
|
- spec/helpers/output_helper_spec.rb
|
136
138
|
- spec/spec_helper.rb
|
137
139
|
- support/Readme-footer.md
|
@@ -160,8 +162,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
160
162
|
version: '0'
|
161
163
|
requirements: []
|
162
164
|
rubyforge_project:
|
163
|
-
rubygems_version: 2.
|
165
|
+
rubygems_version: 2.4.5
|
164
166
|
signing_key:
|
165
167
|
specification_version: 4
|
166
168
|
summary: Really fast deployer and server automation tool.
|
167
169
|
test_files: []
|
170
|
+
has_rdoc:
|