mina 1.0.0.beta2 → 1.0.0.beta3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +384 -0
- data/Readme.md +3 -3
- data/data/deploy.rb +8 -6
- data/data/deploy.sh.erb +1 -1
- data/docs/3rd_party_plugins.md +2 -0
- data/docs/getting_started.md +22 -0
- data/docs/migrating.md +1 -1
- data/lib/mina.rb +3 -3
- data/lib/mina/application.rb +1 -0
- data/lib/mina/backend/remote.rb +6 -6
- data/lib/mina/commands.rb +4 -3
- data/lib/mina/configuration.rb +2 -1
- data/lib/mina/dsl.rb +8 -1
- data/lib/mina/helpers/internal.rb +8 -3
- data/lib/mina/helpers/output.rb +4 -0
- data/lib/mina/runner/pretty.rb +1 -1
- data/lib/mina/runner/printer.rb +1 -0
- data/lib/mina/version.rb +1 -1
- data/mina.gemspec +1 -1
- data/spec/lib/mina/application_spec.rb +35 -35
- data/spec/lib/mina/backend/local_spec.rb +1 -0
- data/spec/lib/mina/backend/remote_spec.rb +2 -0
- data/spec/lib/mina/commands_spec.rb +6 -7
- data/spec/lib/mina/configuration_spec.rb +1 -1
- data/spec/lib/mina/helpers/internal_spec.rb +3 -1
- data/spec/lib/mina/helpers/output_spec.rb +5 -20
- data/spec/lib/mina/runner_spec.rb +1 -4
- data/spec/spec_helper.rb +14 -3
- data/spec/support/outputs/bundle_clean.txt +2 -0
- data/spec/support/outputs/bundle_install.txt +2 -0
- data/spec/support/outputs/chruby.txt +9 -0
- data/spec/support/outputs/console.txt +1 -0
- data/spec/support/outputs/deploy_cleanup.txt +2 -0
- data/spec/support/outputs/deploy_force_unlock.txt +2 -0
- data/spec/support/outputs/deploy_link_shared_paths.txt +13 -0
- data/spec/support/outputs/git_clone.txt +1 -0
- data/spec/support/outputs/git_clone_commit.txt +1 -0
- data/spec/support/outputs/git_revision.txt +1 -0
- data/spec/support/outputs/log.txt +1 -0
- data/spec/support/outputs/rails_assets_precompile.txt +1 -0
- data/spec/support/outputs/rails_db_create.txt +2 -0
- data/spec/support/outputs/rails_db_migrate.txt +1 -0
- data/spec/support/outputs/rails_db_rollback.txt +2 -0
- data/spec/support/outputs/rbenv_load.txt +1 -0
- data/spec/support/outputs/rollback.txt +2 -0
- data/spec/support/outputs/run.txt +1 -0
- data/spec/support/outputs/rvm_use.txt +1 -0
- data/spec/support/outputs/ry.txt +15 -0
- data/spec/support/outputs/setup.txt +14 -0
- data/spec/support/outputs/ssh_keyscan.txt +3 -0
- data/spec/support/rake_example_group.rb +30 -0
- data/spec/tasks/bundler_spec.rb +15 -0
- data/spec/tasks/default_spec.rb +35 -0
- data/spec/tasks/deploy_spec.rb +33 -0
- data/spec/tasks/git_spec.rb +21 -0
- data/spec/tasks/init_spec.rb +16 -0
- data/spec/tasks/rails_spec.rb +45 -0
- data/spec/tasks/ruby_managers_spec.rb +33 -0
- data/tasks/mina/bundler.rb +5 -5
- data/tasks/mina/chruby.rb +8 -10
- data/tasks/mina/default.rb +5 -1
- data/tasks/mina/deploy.rb +33 -29
- data/tasks/mina/git.rb +20 -8
- data/tasks/mina/install.rb +1 -0
- data/tasks/mina/rails.rb +15 -15
- data/tasks/mina/rbenv.rb +6 -8
- data/tasks/mina/rvm.rb +16 -20
- data/tasks/mina/ry.rb +10 -14
- data/test_env/config/deploy.rb +5 -5
- metadata +35 -6
- data/spec/lib/mina_spec.rb +0 -7
- data/spec/support/run_helper.rb +0 -36
data/data/deploy.sh.erb
CHANGED
@@ -32,7 +32,7 @@ fi
|
|
32
32
|
|
33
33
|
# Determine $previous_path and other variables
|
34
34
|
[ -h "<%= fetch(:current_path) %>" ] && [ -d "<%= fetch(:current_path) %>" ] && previous_path=$(cd "<%= fetch(:current_path) %>" >/dev/null && pwd -LP)
|
35
|
-
build_path="./tmp/build
|
35
|
+
build_path="./tmp/build-$(date +%s)$RANDOM"
|
36
36
|
|
37
37
|
version="<%= next_version %>"
|
38
38
|
release_path="<%= fetch(:releases_path) %>/$version"
|
data/docs/3rd_party_plugins.md
CHANGED
data/docs/getting_started.md
CHANGED
@@ -30,6 +30,28 @@ set :domain, 'your.server.com'
|
|
30
30
|
set :deploy_to, '/var/www/flipstack.com'
|
31
31
|
...
|
32
32
|
```
|
33
|
+
**Notes:** You may be using a ruby versioning tool (rbenv or RVM) to manage ruby and gems. If you are using one of them, don't forget to uncomment these settings:
|
34
|
+
```
|
35
|
+
...
|
36
|
+
require 'mina/bundler'
|
37
|
+
require 'mina/rails'
|
38
|
+
require 'mina/git'
|
39
|
+
# require 'mina/rbenv' # for rbenv support. (http://rbenv.org)
|
40
|
+
# require 'mina/rvm' # for rvm support. (http://rvm.io)
|
41
|
+
...
|
42
|
+
```
|
43
|
+
``` ruby
|
44
|
+
...
|
45
|
+
task :environment do
|
46
|
+
# If you're using rbenv, use this to load the rbenv environment.
|
47
|
+
# Be sure to commit your .ruby-version or .rbenv-version to your repository.
|
48
|
+
# invoke :'rbenv:load'
|
49
|
+
|
50
|
+
# For those using RVM, use this to load an RVM version@gemset.
|
51
|
+
# invoke :'rvm:use', 'ruby-1.9.3-p125@default'
|
52
|
+
end
|
53
|
+
...
|
54
|
+
```
|
33
55
|
|
34
56
|
### Step 2: Run 'mina setup'
|
35
57
|
|
data/docs/migrating.md
CHANGED
@@ -9,7 +9,7 @@ Migrating from 0.3.x to 1.0
|
|
9
9
|
* `in_directory` -> `in_path` # wraps commands to be run in specified path
|
10
10
|
|
11
11
|
## new
|
12
|
-
* `run` # runs commands on a specified backend
|
12
|
+
* `run` # runs commands on a specified backend, this has replaced old before and after hooks
|
13
13
|
* `comment` # adds a 'echo -----> #{command}' to queue
|
14
14
|
|
15
15
|
**Other commands have been removed!**
|
data/lib/mina.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'rake'
|
2
2
|
Rake.application.options.trace = true
|
3
3
|
|
4
|
-
|
4
|
+
require 'pry'
|
5
5
|
# require 'awesome_print'
|
6
6
|
|
7
7
|
require 'forwardable'
|
@@ -10,10 +10,10 @@ require 'singleton'
|
|
10
10
|
require 'open4'
|
11
11
|
|
12
12
|
require 'mina/version'
|
13
|
-
require 'mina/configuration'
|
14
|
-
require 'mina/dsl'
|
15
13
|
require 'mina/helpers/output'
|
16
14
|
require 'mina/helpers/internal'
|
15
|
+
require 'mina/configuration'
|
16
|
+
require 'mina/dsl'
|
17
17
|
require 'mina/commands'
|
18
18
|
require 'mina/runner'
|
19
19
|
require 'mina/runner/pretty'
|
data/lib/mina/application.rb
CHANGED
data/lib/mina/backend/remote.rb
CHANGED
@@ -21,14 +21,14 @@ module Mina
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def ssh
|
24
|
-
|
24
|
+
ensure!(:domain)
|
25
25
|
args = fetch(:domain)
|
26
26
|
args = "#{fetch(:user)}@#{fetch(:domain)}" if set?(:user)
|
27
|
-
args
|
28
|
-
args
|
29
|
-
args
|
30
|
-
args
|
31
|
-
args
|
27
|
+
args += " -i #{fetch(:identity_file)}" if set?(:identity_file)
|
28
|
+
args += " -p #{fetch(:port)}" if set?(:port)
|
29
|
+
args += ' -A' if set?(:forward_agent)
|
30
|
+
args += " #{fetch(:ssh_options)}" if set?(:ssh_options)
|
31
|
+
args += ' -tt'
|
32
32
|
"ssh #{args}"
|
33
33
|
end
|
34
34
|
|
data/lib/mina/commands.rb
CHANGED
@@ -31,8 +31,8 @@ module Mina
|
|
31
31
|
|
32
32
|
def process(path = nil)
|
33
33
|
if path
|
34
|
-
queue[stage].unshift(
|
35
|
-
|
34
|
+
queue[stage].unshift(%(echo "$ cd #{path}")) if fetch(:verbose)
|
35
|
+
%((cd #{path} && #{queue[stage].join(' && ')}))
|
36
36
|
else
|
37
37
|
queue[stage].join("\n")
|
38
38
|
end
|
@@ -40,7 +40,8 @@ module Mina
|
|
40
40
|
|
41
41
|
def run(backend)
|
42
42
|
report_time do
|
43
|
-
Mina::Runner.new(process, backend).run
|
43
|
+
status = Mina::Runner.new(process, backend).run
|
44
|
+
error! 'Run Error' unless status
|
44
45
|
end
|
45
46
|
end
|
46
47
|
end
|
data/lib/mina/configuration.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
module Mina
|
2
2
|
class Configuration
|
3
3
|
include Singleton
|
4
|
+
include Helpers::Internal
|
4
5
|
|
5
6
|
module DSL
|
6
7
|
def self.included(base)
|
@@ -36,7 +37,7 @@ module Mina
|
|
36
37
|
end
|
37
38
|
|
38
39
|
def ensure!(key)
|
39
|
-
|
40
|
+
error! "#{key} must be defined!" unless set?(key)
|
40
41
|
end
|
41
42
|
|
42
43
|
def reset!
|
data/lib/mina/dsl.rb
CHANGED
@@ -19,10 +19,15 @@ module Mina
|
|
19
19
|
@commands ||= Commands.new
|
20
20
|
end
|
21
21
|
|
22
|
+
def reset!
|
23
|
+
@commands = Commands.new
|
24
|
+
end
|
25
|
+
|
22
26
|
def run(backend)
|
23
27
|
@commands = Commands.new
|
24
28
|
yield
|
25
29
|
commands.run(backend)
|
30
|
+
@commands = Commands.new
|
26
31
|
end
|
27
32
|
|
28
33
|
def on(stage)
|
@@ -40,7 +45,9 @@ module Mina
|
|
40
45
|
end
|
41
46
|
|
42
47
|
def deploy(&block)
|
43
|
-
|
48
|
+
run :remote do
|
49
|
+
command deploy_script(&block), quiet: true
|
50
|
+
end
|
44
51
|
end
|
45
52
|
end
|
46
53
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Mina
|
2
2
|
module Helpers
|
3
3
|
module Internal
|
4
|
-
|
4
|
+
include Helpers::Output
|
5
5
|
|
6
6
|
def deploy_script
|
7
7
|
yield
|
@@ -29,7 +29,7 @@ module Mina
|
|
29
29
|
def report_time
|
30
30
|
time_start = Time.now
|
31
31
|
output = yield
|
32
|
-
|
32
|
+
print_info "Elapsed time: %.2f seconds" % [Time.now - time_start]
|
33
33
|
output
|
34
34
|
end
|
35
35
|
|
@@ -40,9 +40,14 @@ module Mina
|
|
40
40
|
when :sequence
|
41
41
|
"$((`ls -1 #{fetch(:releases_path)} | sort -n | tail -n 1`+1))"
|
42
42
|
else
|
43
|
-
|
43
|
+
error! 'Unrecognizes version scheme. Use :datetime or :sequence'
|
44
44
|
end
|
45
45
|
end
|
46
|
+
|
47
|
+
def error!(message)
|
48
|
+
print_error message
|
49
|
+
exit 1
|
50
|
+
end
|
46
51
|
end
|
47
52
|
end
|
48
53
|
end
|
data/lib/mina/helpers/output.rb
CHANGED
data/lib/mina/runner/pretty.rb
CHANGED
data/lib/mina/runner/printer.rb
CHANGED
data/lib/mina/version.rb
CHANGED
data/mina.gemspec
CHANGED
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
|
|
23
23
|
|
24
24
|
spec.add_dependency 'rake'
|
25
25
|
spec.add_dependency 'open4', '~> 1.3.4'
|
26
|
-
spec.add_development_dependency 'rspec', '~> 3.
|
26
|
+
spec.add_development_dependency 'rspec', '~> 3.5.0'
|
27
27
|
spec.add_development_dependency 'pry-byebug'
|
28
28
|
spec.add_development_dependency 'awesome_print'
|
29
29
|
spec.add_development_dependency 'codeclimate-test-reporter'
|
@@ -1,39 +1,39 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Mina::Application do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
end
|
12
|
-
|
13
|
-
it 'runs adds two default tasks to the task list' do
|
14
|
-
|
15
|
-
|
16
|
-
end
|
17
|
-
|
18
|
-
it 'overrides the rake method, but still prints the rake version' do
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'enables simulation mode, and sets the backend Mina::Runner::Printer' do
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'enables printing all config variables on command line parameter' do
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
end
|
4
|
+
# let(:app) { Rake.application }
|
5
|
+
#
|
6
|
+
# %w(quiet silent dry-run).each do |switch|
|
7
|
+
# it "doesn't include --#{switch} in help" do
|
8
|
+
# binding.pry
|
9
|
+
# expect(out).not_to match(/--#{switch}/)
|
10
|
+
# end
|
11
|
+
# end
|
12
|
+
#
|
13
|
+
# it 'runs adds two default tasks to the task list' do
|
14
|
+
# expect(subject.top_level_tasks).to include(:debug_configuration_variables)
|
15
|
+
# expect(subject.top_level_tasks).to include(:run_commands)
|
16
|
+
# end
|
17
|
+
#
|
18
|
+
# it 'overrides the rake method, but still prints the rake version' do
|
19
|
+
# out = capture_io do
|
20
|
+
# flags '--version', '-V'
|
21
|
+
# end
|
22
|
+
# expect(out).to match(/\bMina, version\b/)
|
23
|
+
# expect(out).to match(/\bv#{Mina::VERSION}\b/)
|
24
|
+
# end
|
25
|
+
#
|
26
|
+
# it 'enables simulation mode, and sets the backend Mina::Runner::Printer' do
|
27
|
+
# capture_io do
|
28
|
+
# flags '--simulate', '-s'
|
29
|
+
# end
|
30
|
+
# expect(Mina::Configuration.instance.fetch(:simulate)).to be true
|
31
|
+
# end
|
32
|
+
#
|
33
|
+
# it 'enables printing all config variables on command line parameter' do
|
34
|
+
# capture_io do
|
35
|
+
# flags '--debug-configuration-variables', '-d'
|
36
|
+
# end
|
37
|
+
# expect(Mina::Configuration.instance.fetch(:debug_configuration_variables)).to be true
|
38
|
+
# end
|
39
39
|
end
|
@@ -3,6 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe Mina::Backend::Remote do
|
4
4
|
let(:backend) { Mina::Backend::Remote.new ['ls -al'] }
|
5
5
|
before { Mina::Configuration.instance.set(:domain, 'localhost') }
|
6
|
+
after { Mina::Configuration.instance.remove(:domain) }
|
6
7
|
|
7
8
|
describe '#prepare' do
|
8
9
|
it 'escpaces shellwords' do
|
@@ -12,6 +13,7 @@ describe Mina::Backend::Remote do
|
|
12
13
|
it 'adds debug if simualte' do
|
13
14
|
Mina::Configuration.instance.set(:simulate, true)
|
14
15
|
expect(backend.prepare).to eq("#!/usr/bin/env bash\n# Executing the following via 'ssh localhost -tt':\n#\nls -al\n ")
|
16
|
+
Mina::Configuration.instance.remove(:simulate)
|
15
17
|
end
|
16
18
|
end
|
17
19
|
end
|
@@ -18,6 +18,7 @@ describe Mina::Commands do
|
|
18
18
|
|
19
19
|
context 'when verbose' do
|
20
20
|
before { Mina::Configuration.instance.set(:verbose, true) }
|
21
|
+
after { Mina::Configuration.instance.remove(:verbose) }
|
21
22
|
|
22
23
|
it 'adds a echo command to the queue' do
|
23
24
|
commands.command('ls -al')
|
@@ -72,22 +73,20 @@ describe Mina::Commands do
|
|
72
73
|
|
73
74
|
context 'when verbose' do
|
74
75
|
before { Mina::Configuration.instance.set(:verbose, true) }
|
76
|
+
after { Mina::Configuration.instance.remove(:verbose) }
|
75
77
|
|
76
78
|
it 'joins all the commands within a path and echoes it' do
|
77
|
-
expect(commands.process('some/path')).to eq("(cd some/path && echo
|
79
|
+
expect(commands.process('some/path')).to eq("(cd some/path && echo \"$ cd some/path\" && ls -al && pwd)")
|
78
80
|
end
|
79
81
|
end
|
80
82
|
end
|
81
83
|
|
82
84
|
describe '#run' do
|
83
|
-
|
85
|
+
it 'calls run on a backend' do
|
84
86
|
runner = double(:runner)
|
85
87
|
allow(Mina::Runner).to receive(:new).and_return(runner)
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
it 'calls run on a backend' do
|
90
|
-
expect(commands.run(:local)).to eq(:ran)
|
88
|
+
expect(runner).to receive(:run).and_return(true)
|
89
|
+
commands.run(:local)
|
91
90
|
end
|
92
91
|
end
|
93
92
|
end
|
@@ -21,7 +21,8 @@ describe Mina::Helpers::Internal do
|
|
21
21
|
|
22
22
|
describe '#erb' do
|
23
23
|
before { Mina::Configuration.instance.set(:version_scheme, :sequence) }
|
24
|
-
|
24
|
+
after { Mina::Configuration.instance.remove(:version_scheme) }
|
25
|
+
|
25
26
|
it 'returns whole script' do
|
26
27
|
expect(helper.erb('data/deploy.sh.erb')).to_not be_empty
|
27
28
|
end
|
@@ -36,6 +37,7 @@ describe Mina::Helpers::Internal do
|
|
36
37
|
|
37
38
|
context 'when verbose' do
|
38
39
|
before { Mina::Configuration.instance.set(:verbose, true) }
|
40
|
+
after { Mina::Configuration.instance.remove(:verbose) }
|
39
41
|
|
40
42
|
it 'modifies code' do
|
41
43
|
expect(helper.echo_cmd('ls -al')).to eq("echo \\$\\ ls\\ -al &&\nls -al")
|
@@ -9,40 +9,25 @@ describe Mina::Helpers::Output do
|
|
9
9
|
|
10
10
|
describe '#print_line' do
|
11
11
|
it 'prints normally' do
|
12
|
-
|
13
|
-
helper.print_line('ls -al')
|
14
|
-
end
|
15
|
-
expect(out).to eq(" ls -al\n")
|
12
|
+
expect{ helper.print_line('ls -al') }.to output(" ls -al\n").to_stdout
|
16
13
|
end
|
17
14
|
|
18
15
|
it 'prints comment' do
|
19
|
-
|
20
|
-
helper.print_line('-> ls -al')
|
21
|
-
end
|
22
|
-
expect(out).to eq("\e[32m----->\e[0m ls -al\n")
|
16
|
+
expect{ helper.print_line('-> ls -al') }.to output("\e[32m----->\e[0m ls -al\n").to_stdout
|
23
17
|
end
|
24
18
|
|
25
19
|
it 'prints error' do
|
26
|
-
|
27
|
-
helper.print_line('! ls -al')
|
28
|
-
end
|
29
|
-
expect(out).to eq(" \e[33m!\e[0m \e[31mls -al\e[0m\n")
|
20
|
+
expect{ helper.print_line('! ls -al') }.to output(" \e[33m!\e[0m \e[31mls -al\e[0m\n").to_stdout
|
30
21
|
end
|
31
22
|
|
32
23
|
it 'prints command' do
|
33
|
-
|
34
|
-
helper.print_line('$ ls -al')
|
35
|
-
end
|
36
|
-
expect(out).to eq(" \e[36m$\e[0m \e[36mls -al\e[0m\n")
|
24
|
+
expect{ helper.print_line('$ ls -al') }.to output(" \e[36m$\e[0m \e[36mls -al\e[0m\n").to_stdout
|
37
25
|
end
|
38
26
|
end
|
39
27
|
|
40
28
|
describe '#print_stderr' do
|
41
29
|
it 'prints stderr' do
|
42
|
-
|
43
|
-
helper.print_stderr('ls -al')
|
44
|
-
end
|
45
|
-
expect(out).to eq(" \e[31mls -al\e[0m\n")
|
30
|
+
expect{ helper.print_stderr('ls -al') }.to output(" \e[31mls -al\e[0m\n").to_stdout
|
46
31
|
end
|
47
32
|
end
|
48
33
|
end
|