mina 0.1.0

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.
@@ -0,0 +1,65 @@
1
+ require 'spec_helper'
2
+ require 'command_helper'
3
+
4
+ describe "Invoking the 'mina' command in a project" do
5
+ before :each do
6
+ Dir.chdir root('test_env')
7
+ end
8
+
9
+ it "should think it's 'mina', not 'rake' (1)" do
10
+ run_command 'pinkledills'
11
+ exitstatus.should_not == 0
12
+ stderr.should include 'mina aborted'
13
+ end
14
+
15
+ it "should think it's 'mina', not 'rake' (1)" do
16
+ mina '-T'
17
+ stdout.should include 'mina help'
18
+ stdout.should include 'mina git:clone'
19
+ end
20
+
21
+ it 'with --version should print the version' do
22
+ mina '--version'
23
+ stdout.should include Mina.version
24
+ end
25
+
26
+ it 'with -V should print the version' do
27
+ mina '-V'
28
+ stdout.should include Mina.version
29
+ end
30
+
31
+ describe 'without arguments' do
32
+ before :each do
33
+ mina
34
+ end
35
+
36
+ it 'should print standard help tasks' do
37
+ mina
38
+ stdout.should include 'mina help'
39
+ stdout.should include 'mina init'
40
+ stdout.should include 'mina tasks'
41
+ end
42
+
43
+ it 'should print project-specific tasks' do
44
+ mina
45
+ stdout.should include 'mina deploy'
46
+ stdout.should include 'mina restart'
47
+ stdout.should include 'mina setup'
48
+ end
49
+
50
+ it "should be the same as running 'help'" do
51
+ previous_out = stdout
52
+
53
+ mina 'help'
54
+ stdout.should == previous_out
55
+ end
56
+ end
57
+
58
+ it "with 'mina tasks' should print tasks" do
59
+ mina 'tasks'
60
+
61
+ stdout.should include('bundle:install')
62
+ stdout.should include('Install gem dependencies using Bundler')
63
+ stdout.should include('passenger:restart')
64
+ end
65
+ end
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+ require 'command_helper'
3
+
4
+ describe "Invoking the 'mina' command in a project" do
5
+ before :each do
6
+ Dir.chdir root('test_env')
7
+ end
8
+
9
+ describe "to do a simulated deploy" do
10
+ before :each do
11
+ mina 'deploy', 'simulate=1'
12
+ end
13
+
14
+ it "should take care of the lockfile" do
15
+ stdout.should =~ /ERROR: another deployment is ongoing/
16
+ stdout.should =~ /touch ".*deploy\.lock"/
17
+ stdout.should =~ /rm -f ".*deploy\.lock"/
18
+ end
19
+
20
+ it "should honor releases_path" do
21
+ stdout.should include "releases/"
22
+ end
23
+
24
+ it "should symlink the current_path" do
25
+ stdout.should =~ /ln .*current/
26
+ end
27
+
28
+ it "should include deploy directives" do
29
+ stdout.should include "bundle exec rake db:migrate"
30
+ end
31
+
32
+ it "should include 'to :launch' directives" do
33
+ stdout.should include "touch tmp/restart.txt"
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+ require 'command_helper'
3
+
4
+ describe "Invoking the 'mina' command outside a project" do
5
+ before :each do
6
+ Dir.chdir root
7
+ end
8
+
9
+ describe "without arguments" do
10
+ before :each do
11
+ mina
12
+ end
13
+
14
+ it 'should print standard help tasks' do
15
+ stdout.should include('mina help')
16
+ stdout.should include('mina init')
17
+ stdout.should include('mina tasks')
18
+ end
19
+
20
+ it "should not print project-specific tasks" do
21
+ stdout.should_not include('mina deploy')
22
+ stdout.should_not include('mina restart')
23
+ stdout.should_not include('mina setup')
24
+ end
25
+
26
+ %w[-h --help].each do |arg|
27
+ it "should have the same output as 'mina #{arg}'" do
28
+ @previous_output = stdout
29
+ mina arg
30
+ stdout.should == @previous_output
31
+ end
32
+ end
33
+ end
34
+ end
35
+
@@ -0,0 +1,53 @@
1
+ require 'spec_helper'
2
+ require 'command_helper'
3
+ require 'fileutils'
4
+ require 'tmpdir'
5
+
6
+ describe "Invoking the 'mina' command in a project", :ssh => true do
7
+ before :each do
8
+ @path = Dir.mktmpdir
9
+ Dir.chdir @path
10
+
11
+ FileUtils.mkdir_p './config'
12
+ FileUtils.cp root('test_env/config/deploy.rb'), './config/deploy.rb'
13
+ FileUtils.rm_rf './deploy'
14
+ FileUtils.mkdir_p './deploy'
15
+ end
16
+
17
+ # after :each do
18
+ # FileUtils.rm_rf @path
19
+ # end
20
+
21
+ it 'should set up and deploy fine' do
22
+ print "[setup]" if ENV['verbose']
23
+ mina 'setup', '--verbose'
24
+ File.directory?('deploy').should be_true
25
+ File.directory?('deploy/releases').should be_true
26
+ File.directory?('deploy/shared').should be_true
27
+ File.exists?('deploy/last_version').should be_false
28
+ File.exists?('deploy/deploy.lock').should be_false
29
+
30
+ print "[deploy 1]" if ENV['verbose']
31
+ mina 'deploy', '--verbose'
32
+ stdout.should include "-----> Creating a temporary build path"
33
+ stdout.should include "rm -rf .git"
34
+ stdout.should include "mkdir -p"
35
+ File.exists?('deploy/last_version').should be_true
36
+ File.exists?('deploy/deploy.lock').should be_false
37
+ File.directory?('deploy/releases').should be_true
38
+ File.directory?('deploy/releases/1').should be_true
39
+ File.exists?('deploy/releases/1/README.md').should be_true
40
+ File.directory?('deploy/releases/2').should be_false
41
+ File.exists?('deploy/current').should be_true
42
+ File.read('deploy/last_version').strip.should == '1'
43
+ File.exists?('deploy/current/tmp/restart.txt').should be_true
44
+
45
+ # And again, to test out sequential versions and stuff
46
+ print "[deploy 2]" if ENV['verbose']
47
+ mina 'deploy'
48
+ stdout.should_not include "rm -rf .git"
49
+ stdout.should_not include "mkdir -p"
50
+ File.directory?('deploy/releases/2').should be_true
51
+ File.read('deploy/last_version').strip.should == '2'
52
+ end
53
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+ require 'command_helper'
3
+
4
+ describe "Invoking the 'mina' command in a project" do
5
+ before :each do
6
+ Dir.chdir root('test_env')
7
+ end
8
+
9
+ it 'should echo commands in verbose mode' do
10
+ mina 'deploy', '--verbose', '--simulate'
11
+
12
+ stdout.should include %[echo "$ git]
13
+ end
14
+
15
+ it 'should not echo commands when not in verbose mode' do
16
+ mina 'deploy', '--simulate'
17
+
18
+ stdout.should_not include %[echo "$ git]
19
+ end
20
+ end
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Mina' do
4
+ it '#invoke should work' do
5
+ rake {
6
+ task :hello do
7
+ @hello = 'world'
8
+ end
9
+ invoke :hello
10
+ }
11
+ rake.instance_variable_get(:@hello).should == 'world'
12
+ end
13
+
14
+ it '#queue should work' do
15
+ rake {
16
+ queue 'sudo service nginx restart'
17
+ }
18
+
19
+ rake.commands.should == ['sudo service nginx restart']
20
+ end
21
+
22
+ it '#queue should work with multiple commands' do
23
+ rake {
24
+ queue 'echo Restarting'
25
+ queue 'sudo service nginx restart'
26
+ }
27
+
28
+ rake.commands.should == ['echo Restarting', 'sudo service nginx restart']
29
+ end
30
+
31
+ it '#queue should work inside tasks' do
32
+ rake {
33
+ task :restart do
34
+ queue 'echo Restarting'
35
+ invoke :'passenger:restart'
36
+ end
37
+
38
+ namespace :passenger do
39
+ task :restart do
40
+ queue 'touch tmp/restart.txt'
41
+ end
42
+ end
43
+ }
44
+
45
+ rake { invoke :restart }
46
+
47
+ rake.commands.should == ['echo Restarting', 'touch tmp/restart.txt']
48
+ end
49
+ end
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Settings in rake tasks' do
4
+ it '#set should work' do
5
+ rake { set :host, 'localhost' }
6
+
7
+ rake.host.should == 'localhost'
8
+ rake.settings.host.should == 'localhost'
9
+ end
10
+
11
+ it '#settings ||= should work' do
12
+ rake {
13
+ set :version, '2'
14
+ settings.version ||= '3'
15
+ }
16
+
17
+ rake.settings.version.should == '2'
18
+ rake.version.should == '2'
19
+ end
20
+
21
+ it '#settings with lambdas should work' do
22
+ rake {
23
+ set :version, '42'
24
+ set :path, lambda { "/var/www/#{version}" }
25
+ }
26
+
27
+ rake.path.should == "/var/www/42"
28
+ rake.path?.should be_true
29
+ end
30
+
31
+ it '#settings with a bang should work' do
32
+ begin
33
+ rake {
34
+ set :path, lambda { "/var/www/#{version!}" }
35
+ }
36
+ rake.path
37
+ 1.should == 2
38
+ rescue Mina::Error => e
39
+ e.message.should include "version"
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,60 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Settings' do
4
+ describe 'instances' do
5
+ before :each do
6
+ @settings = Mina::Settings.new
7
+ end
8
+
9
+ it 'setting/getting should work' do
10
+ @settings.host = '192.168.1.1'
11
+ @settings.host.should == '192.168.1.1'
12
+ end
13
+
14
+ it 'question mark should work' do
15
+ @settings.deploy_to = '/var/www/there'
16
+ @settings.deploy_to?.should be_true
17
+ @settings.foobar?.should be_false
18
+ end
19
+
20
+ it 'question mark should work with nils' do
21
+ @settings.deploy_to = nil
22
+ @settings.deploy_to?.should be_true
23
+ @settings.foobar?.should be_false
24
+ end
25
+
26
+ it '||= should work (1)' do
27
+ @settings.x = 2
28
+ @settings.x ||= 3
29
+ @settings.x.should == 2
30
+ end
31
+
32
+ it '||= should work (2)' do
33
+ @settings.x ||= 3
34
+ @settings.x.should == 3
35
+ end
36
+
37
+ it 'lambdas should work' do
38
+ @settings.path = lambda { "/var/www/#{@settings.version}" }
39
+ @settings.version = '3'
40
+
41
+ @settings.path?.should be_true
42
+ @settings.path.should == "/var/www/3"
43
+ end
44
+
45
+ it 'bangs should check for settings' do
46
+ begin
47
+ @settings.non_existent_setting!
48
+ 1.should == 2
49
+ rescue Mina::Error => e
50
+ e.message.should include "non_existent_setting"
51
+ end
52
+ end
53
+
54
+ it 'bangs should return settings' do
55
+ @settings.version = 4
56
+ @settings.version!.should == 4
57
+ end
58
+ end
59
+ end
60
+
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Mina' do
4
+ it '#to should work' do
5
+ rake {
6
+ task :deploy do
7
+ queue 'git clone'
8
+
9
+ to :restart do
10
+ queue 'touch tmp/restart.txt'
11
+ end
12
+ end
13
+ }
14
+
15
+ rake { invoke :deploy }
16
+
17
+ rake.commands.should == ['git clone']
18
+ rake.commands(:restart).should == ['touch tmp/restart.txt']
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ require 'mina'
2
+ require 'rake'
3
+
4
+ class RakeScope
5
+ include Rake::DSL if Rake.const_defined?(:DSL)
6
+ include Mina::Helpers
7
+ end
8
+
9
+ def rake(&blk)
10
+ if block_given?
11
+ @scope ||= RakeScope.new
12
+ @scope.instance_eval &blk
13
+ end
14
+
15
+ @scope
16
+ end
17
+
18
+ def root(*a)
19
+ File.join File.expand_path('../../', __FILE__), *a
20
+ end
@@ -0,0 +1,54 @@
1
+ # NOTE:
2
+ # Yes, you can deploy this project. It will deploy into the ./deploy/
3
+ # directory. The commands have been stubbed, so it's harmless. No rails or
4
+ # bundler magic will happen.
5
+
6
+ # ASSUMPTIONS:
7
+ # - You have git installed. (of course you do)
8
+ # - You have SSH enabled. In OS X, this is "Remote Login" under the Sharing pref pane.
9
+ # - You have your own SSH key added to your own user so you can SSH to your own machine.
10
+
11
+ # In fact, let's make that folder right now.
12
+ require 'fileutils'
13
+ FileUtils.mkdir_p "#{Dir.pwd}/deploy"
14
+
15
+ # -- Stubs end, deploy script begins! --------------
16
+
17
+ require 'mina/rails'
18
+ require 'mina/bundler'
19
+ require 'mina/git'
20
+
21
+ set :domain, 'localhost'
22
+ set :deploy_to, "#{Dir.pwd}/deploy"
23
+ set :repository, "#{Mina.root_path}"
24
+ set :revision, 'HEAD'
25
+
26
+ desc "Deploys."
27
+ task :deploy do
28
+ queue "bundle() { true; }" # Stub the bundle command.
29
+
30
+ deploy do
31
+ invoke :'git:clone'
32
+ invoke :'bundle:install'
33
+ invoke :'rails:db_migrate'
34
+
35
+ to :launch do
36
+ invoke :'passenger:restart'
37
+ end
38
+ end
39
+ end
40
+
41
+ desc "Restarts the passenger server."
42
+ task :restart do
43
+ invoke :'passenger:restart'
44
+ end
45
+
46
+ namespace :passenger do
47
+ task :restart do
48
+ queue %{
49
+ echo "-----> Restarting passenger"
50
+ #{echo_cmd %[mkdir -p tmp]}
51
+ #{echo_cmd %[touch tmp/restart.txt]}
52
+ }
53
+ end
54
+ end