blazing 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/Gemfile.lock +1 -1
- data/TODO +3 -0
- data/lib/blazing/base.rb +18 -0
- data/lib/blazing/cli/base.rb +28 -16
- data/lib/blazing/cli/create.rb +5 -8
- data/lib/blazing/cli/templates/post-hook.tt +8 -4
- data/lib/blazing/config.rb +1 -1
- data/lib/blazing/recipe.rb +10 -5
- data/lib/blazing/recipes/bundler_recipe.rb +11 -7
- data/lib/blazing/recipes/rvm_recipe.rb +2 -8
- data/lib/blazing/remote.rb +31 -25
- data/lib/blazing/runner.rb +3 -1
- data/lib/blazing/target.rb +1 -1
- data/lib/blazing/version.rb +1 -1
- data/spec/blazing/binary_spec.rb +11 -0
- data/spec/blazing/cli/base_spec.rb +39 -1
- data/spec/blazing/cli/create_spec.rb +2 -1
- data/spec/blazing/recipe_spec.rb +15 -32
- data/spec/blazing/recipes/bundler_recipe_spec.rb +27 -1
- data/spec/blazing/recipes/rvm_recipe_spec.rb +6 -1
- data/spec/blazing/remote_spec.rb +35 -35
- data/spec/blazing/runner_spec.rb +7 -4
- data/spec/spec_helper.rb +28 -0
- metadata +6 -2
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
data/TODO
ADDED
data/lib/blazing/base.rb
ADDED
data/lib/blazing/cli/base.rb
CHANGED
@@ -1,19 +1,15 @@
|
|
1
1
|
require 'thor'
|
2
2
|
require 'blazing'
|
3
3
|
require 'blazing/logger'
|
4
|
+
require 'blazing/base'
|
4
5
|
require 'blazing/recipe'
|
5
|
-
|
6
6
|
require 'blazing/cli/create'
|
7
7
|
|
8
8
|
module Blazing
|
9
9
|
module CLI
|
10
10
|
class Base < Thor
|
11
11
|
|
12
|
-
|
13
|
-
@logger = logger
|
14
|
-
@config = Blazing::Config.load
|
15
|
-
super
|
16
|
-
end
|
12
|
+
include Blazing::Base
|
17
13
|
|
18
14
|
desc 'init', 'prepare project for blazing deploys'
|
19
15
|
def init
|
@@ -23,38 +19,54 @@ module Blazing
|
|
23
19
|
|
24
20
|
desc 'setup TARGET_NAME', 'setup or update blazing on specified target and deploy'
|
25
21
|
def setup(target_name = nil)
|
26
|
-
target =
|
27
|
-
|
22
|
+
target = config.find_target(target_name)
|
23
|
+
log :info, "setting up target #{target.name}"
|
28
24
|
target.setup
|
29
25
|
|
30
26
|
# TODO: Abstract this into module and load it where we need it. Methods / actions should have
|
31
27
|
# a success and failure message
|
32
28
|
if exit_status == 0
|
33
|
-
|
29
|
+
log :success, "successfully set up target #{target.name}"
|
34
30
|
else
|
35
|
-
|
31
|
+
log :error, "failed setting up target #{target.name}"
|
36
32
|
end
|
37
33
|
end
|
38
34
|
|
39
35
|
desc 'deploy TARGET', 'deploy to TARGET'
|
40
36
|
def deploy(target_name = nil)
|
41
|
-
target =
|
42
|
-
|
37
|
+
target = config.find_target(target_name)
|
38
|
+
log :info, "deploying target #{target.name}"
|
43
39
|
target.deploy
|
44
40
|
|
45
41
|
if exit_status == 0
|
46
|
-
|
42
|
+
log :success, "successfully deployed target #{target.name}"
|
47
43
|
else
|
48
|
-
|
44
|
+
log :error, "failed deploying on target #{target.name}"
|
49
45
|
end
|
50
46
|
end
|
51
47
|
|
52
48
|
desc 'recipes', 'List available recipes'
|
53
49
|
def recipes
|
54
50
|
Blazing::Recipe.list.each do |recipe|
|
55
|
-
|
51
|
+
log :success, recipe.name
|
56
52
|
end
|
57
|
-
|
53
|
+
report
|
54
|
+
end
|
55
|
+
|
56
|
+
#TODO: move post_recevie and rvm somewhere else, they must only be called by the
|
57
|
+
# post-receive hook and not visible to user
|
58
|
+
|
59
|
+
desc 'post_receive', 'trigger the post-receive actions'
|
60
|
+
def post_receive(target_name = nil)
|
61
|
+
target = config.find_target(target_name)
|
62
|
+
Blazing::Remote.new(target.name).post_receive
|
63
|
+
end
|
64
|
+
|
65
|
+
desc 'rvm', 'used by post_receive hook to decide if rvm env needs to be switched'
|
66
|
+
def rvm(target_name = nil)
|
67
|
+
target = config.find_target(target_name)
|
68
|
+
log :info, Blazing::Remote.new(target.name).use_rvm?
|
69
|
+
report
|
58
70
|
end
|
59
71
|
|
60
72
|
private
|
data/lib/blazing/cli/create.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'thor'
|
2
2
|
require 'thor/group'
|
3
|
+
require 'blazing/base'
|
3
4
|
|
4
5
|
module Blazing
|
5
6
|
module CLI
|
@@ -8,11 +9,7 @@ module Blazing
|
|
8
9
|
desc 'create a blazing config file'
|
9
10
|
|
10
11
|
include Thor::Actions
|
11
|
-
|
12
|
-
def initialize(logger = Blazing::Logger.new)
|
13
|
-
@logger = logger
|
14
|
-
super
|
15
|
-
end
|
12
|
+
include Blazing::Base
|
16
13
|
|
17
14
|
def self.source_root
|
18
15
|
File.dirname(__FILE__)
|
@@ -24,9 +21,9 @@ module Blazing
|
|
24
21
|
|
25
22
|
def create_config_file
|
26
23
|
template 'templates/blazing.tt', Blazing::CONFIGURATION_FILE
|
27
|
-
|
28
|
-
|
29
|
-
|
24
|
+
log :info, "Blazing config file has been created in #{Blazing::CONFIGURATION_FILE} with a default remote."
|
25
|
+
log :info, "Check the config and then setup your remote with blazing setup REMOTE"
|
26
|
+
report
|
30
27
|
end
|
31
28
|
|
32
29
|
end
|
data/lib/blazing/config.rb
CHANGED
data/lib/blazing/recipe.rb
CHANGED
@@ -14,10 +14,7 @@ module Blazing
|
|
14
14
|
@name = name.to_s
|
15
15
|
@options = options
|
16
16
|
@logger = options[:_logger] ||= Blazing::Logger.new
|
17
|
-
|
18
|
-
|
19
|
-
def run
|
20
|
-
recipe_class.run if recipe_class
|
17
|
+
@runner = Blazing::Runner.new
|
21
18
|
end
|
22
19
|
|
23
20
|
def recipe_class
|
@@ -27,8 +24,17 @@ module Blazing
|
|
27
24
|
return nil
|
28
25
|
end
|
29
26
|
|
27
|
+
def run
|
28
|
+
raise 'run method must be implemented in recipe'
|
29
|
+
end
|
30
|
+
|
30
31
|
class << self
|
31
32
|
|
33
|
+
def new_recipe_by_name(name, options = {})
|
34
|
+
load_builtin_recipes
|
35
|
+
new(name, options).recipe_class.new(name, options)
|
36
|
+
end
|
37
|
+
|
32
38
|
def load_builtin_recipes
|
33
39
|
dir = File.join(File.dirname(__FILE__), "/recipes")
|
34
40
|
$LOAD_PATH.unshift(dir)
|
@@ -60,6 +66,5 @@ module Blazing
|
|
60
66
|
end
|
61
67
|
|
62
68
|
end
|
63
|
-
|
64
69
|
end
|
65
70
|
end
|
@@ -1,16 +1,20 @@
|
|
1
1
|
require 'blazing/recipe'
|
2
2
|
|
3
3
|
module Blazing
|
4
|
-
|
5
4
|
class BundlerRecipe < Blazing::Recipe
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
|
6
|
+
def initialize(name, options = {})
|
7
|
+
options[:flags] ||= '--deployment'
|
8
|
+
super(name, options)
|
9
9
|
end
|
10
10
|
|
11
|
-
def
|
12
|
-
|
11
|
+
def run
|
12
|
+
if File.exists?(File.join(Dir.pwd, 'Gemfile'))
|
13
|
+
@runner.run "bundle install #{@options[:flags]}"
|
14
|
+
else
|
15
|
+
false
|
16
|
+
end
|
13
17
|
end
|
14
|
-
end
|
15
18
|
|
19
|
+
end
|
16
20
|
end
|
@@ -1,17 +1,11 @@
|
|
1
1
|
require 'blazing/recipe'
|
2
2
|
|
3
3
|
module Blazing
|
4
|
-
|
5
4
|
class RvmRecipe < Blazing::Recipe
|
6
5
|
|
7
|
-
def
|
8
|
-
|
9
|
-
success
|
6
|
+
def run
|
7
|
+
false
|
10
8
|
end
|
11
9
|
|
12
|
-
def self.success
|
13
|
-
puts 'yay, ran rvm successfully!!!!!!'
|
14
|
-
end
|
15
10
|
end
|
16
|
-
|
17
11
|
end
|
data/lib/blazing/remote.rb
CHANGED
@@ -4,11 +4,17 @@ require 'blazing/config'
|
|
4
4
|
module Blazing
|
5
5
|
class Remote
|
6
6
|
|
7
|
-
def
|
8
|
-
|
9
|
-
@target = config.find_target(target_name)
|
7
|
+
def initialize(target_name, options = {})
|
8
|
+
@config = options[:config] || Blazing::Config.load
|
9
|
+
@target = @config.find_target(target_name)
|
10
10
|
@recipes = @target.recipes
|
11
|
-
|
11
|
+
setup_recipes
|
12
|
+
end
|
13
|
+
|
14
|
+
def post_receive
|
15
|
+
set_git_dir
|
16
|
+
@recipes.delete_if { |recipe| recipe.name == 'rvm' }
|
17
|
+
run_recipes
|
12
18
|
reset_head!
|
13
19
|
end
|
14
20
|
|
@@ -17,12 +23,7 @@ module Blazing
|
|
17
23
|
end
|
18
24
|
|
19
25
|
def set_git_dir
|
20
|
-
|
21
|
-
@_dir ||= Dir
|
22
|
-
if @_env['GIT_DIR'] == '.'
|
23
|
-
@_dir.chdir('..')
|
24
|
-
@_env['GIT_DIR'] = '.git'
|
25
|
-
end
|
26
|
+
Dir.chdir('.git')
|
26
27
|
end
|
27
28
|
|
28
29
|
def reset_head!
|
@@ -30,22 +31,27 @@ module Blazing
|
|
30
31
|
@runner.run 'git reset --hard HEAD'
|
31
32
|
end
|
32
33
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
end
|
37
|
-
|
34
|
+
#
|
35
|
+
# Called by post-receive hook to determine rvm usage
|
36
|
+
#
|
38
37
|
def use_rvm?
|
39
38
|
@rvm_recipe = @recipes.find { |recipe| recipe.name == 'rvm' }
|
40
39
|
@recipes.delete_if { |recipe| recipe.name == 'rvm' }
|
41
|
-
|
42
|
-
|
40
|
+
if @rvm_recipe
|
41
|
+
@rvm_recipe.options[:rvm_string]
|
42
|
+
else
|
43
|
+
false
|
44
|
+
end
|
43
45
|
end
|
44
46
|
|
45
|
-
def
|
46
|
-
|
47
|
+
def setup_recipes
|
48
|
+
|
49
|
+
# TODO: For now, recipes can be assigned only in the global
|
50
|
+
# namespace of the config. Make it possible for targets to
|
51
|
+
# define recipes individually
|
52
|
+
|
53
|
+
@recipes = @config.recipes if @recipes.blank?
|
47
54
|
Blazing::Recipe.load_builtin_recipes
|
48
|
-
run_recipes
|
49
55
|
end
|
50
56
|
|
51
57
|
def run_recipes
|
@@ -56,11 +62,11 @@ module Blazing
|
|
56
62
|
end
|
57
63
|
|
58
64
|
def run_bootstrap_recipes
|
59
|
-
@
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
65
|
+
bundler = @recipes.find { |r| r.name == 'bundler' }
|
66
|
+
if bundler
|
67
|
+
bundler.run
|
68
|
+
@recipes.delete_if { |r| r.name == 'bundler' }
|
69
|
+
end
|
64
70
|
end
|
65
71
|
end
|
66
72
|
|
data/lib/blazing/runner.rb
CHANGED
data/lib/blazing/target.rb
CHANGED
@@ -11,7 +11,7 @@ module Blazing
|
|
11
11
|
def initialize(name, options = {})
|
12
12
|
@name = name.to_s
|
13
13
|
@logger = options[:_logger] ||= Blazing::Logger.new
|
14
|
-
@runner = options[:_runner] ||= Blazing::Runner
|
14
|
+
@runner = options[:_runner] ||= Blazing::Runner.new
|
15
15
|
@hook = options[:_hook] ||= Blazing::CLI::Hook
|
16
16
|
create_accesors(options)
|
17
17
|
end
|
data/lib/blazing/version.rb
CHANGED
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'blazing'
|
3
|
+
require 'blazing/cli/base'
|
4
|
+
|
5
|
+
describe 'CLI invocation' do
|
6
|
+
context 'without options' do
|
7
|
+
it 'should raise no errors' do
|
8
|
+
silence(:stderr) { lambda { Blazing::CLI::Base.start }.should_not raise_error }
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -12,7 +12,8 @@ describe Blazing::CLI::Base do
|
|
12
12
|
@logger = double('logger', :log => nil, :report => nil)
|
13
13
|
@runner = double('runner', :run => nil)
|
14
14
|
@hook = double('hook', :new => double('template', :generate => nil))
|
15
|
-
@base = Blazing::CLI::Base.new
|
15
|
+
@base = Blazing::CLI::Base.new
|
16
|
+
@base.instance_variable_set('@logger', @logger)
|
16
17
|
end
|
17
18
|
|
18
19
|
describe '#init' do
|
@@ -99,4 +100,41 @@ describe Blazing::CLI::Base do
|
|
99
100
|
end
|
100
101
|
end
|
101
102
|
|
103
|
+
describe '#post_receive' do
|
104
|
+
|
105
|
+
before :each do
|
106
|
+
@some_target_name = 'test_target'
|
107
|
+
config = Blazing::Config.new
|
108
|
+
config.target(@some_target_name, :deploy_to => 'smoeone@somewhere:/asdasdasd')
|
109
|
+
@base.instance_variable_set('@config', config)
|
110
|
+
end
|
111
|
+
|
112
|
+
it 'instantiates a new remote and calls its post_receive method' do
|
113
|
+
Blazing::Remote.should_receive(:new).with(@some_target_name).and_return(double('remote', :post_receive => nil))
|
114
|
+
@base.post_receive
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
describe '#rvm' do
|
119
|
+
|
120
|
+
before :each do
|
121
|
+
@some_target_name = 'test_target'
|
122
|
+
hook = double('hook', :new => double('template', :generate => nil))
|
123
|
+
@config = Blazing::Config.new
|
124
|
+
@config.target(@some_target_name, :deploy_to => 'smoeone@somewhere:/asdasdasd', :_logger => @logger, :_runner => @runner, :_hook => hook)
|
125
|
+
@base.instance_variable_set('@config', @config)
|
126
|
+
end
|
127
|
+
|
128
|
+
it 'writes a log with the rvm string if the target has rvm enabled' do
|
129
|
+
@logger.should_receive(:log).with(:info, 'someruby@somegemset')
|
130
|
+
Blazing::Remote.stub!(:new).and_return(double('remote', :use_rvm? => 'someruby@somegemset'))
|
131
|
+
@base.rvm(@some_target_name)
|
132
|
+
end
|
133
|
+
|
134
|
+
it 'writes a log saying false if the target has no rvm enabled' do
|
135
|
+
@logger.should_receive(:log).with(:info, false)
|
136
|
+
Blazing::Remote.stub!(:new).and_return(double('remote', :use_rvm? => false))
|
137
|
+
@base.rvm(@some_target_name)
|
138
|
+
end
|
139
|
+
end
|
102
140
|
end
|
@@ -6,7 +6,8 @@ describe Blazing::CLI::Create do
|
|
6
6
|
|
7
7
|
before :each do
|
8
8
|
@logger = double('logger', :log => nil, :report => nil)
|
9
|
-
@config_generator = Blazing::CLI::Create.new
|
9
|
+
@config_generator = Blazing::CLI::Create.new
|
10
|
+
@config_generator.instance_variable_set('@logger', @logger)
|
10
11
|
end
|
11
12
|
|
12
13
|
it 'knows the source root for its tempate' do
|
data/spec/blazing/recipe_spec.rb
CHANGED
@@ -4,7 +4,6 @@ require 'blazing/recipe'
|
|
4
4
|
describe Blazing::Recipe do
|
5
5
|
|
6
6
|
context 'initializer' do
|
7
|
-
|
8
7
|
it 'takes a string as name parameter' do
|
9
8
|
recipe = Blazing::Recipe.new('some_recipe')
|
10
9
|
recipe.name.should == 'some_recipe'
|
@@ -19,7 +18,6 @@ describe Blazing::Recipe do
|
|
19
18
|
recipe = Blazing::Recipe.new(:some_recipe, :an_option => 'yeah')
|
20
19
|
recipe.options[:an_option].should == 'yeah'
|
21
20
|
end
|
22
|
-
|
23
21
|
end
|
24
22
|
|
25
23
|
context 'recipe discovery' do
|
@@ -40,49 +38,35 @@ describe Blazing::Recipe do
|
|
40
38
|
recipes = Blazing::Recipe.list
|
41
39
|
recipes.should be_all { |recipe| recipe.superclass.should == Blazing::Recipe }
|
42
40
|
end
|
43
|
-
|
44
41
|
end
|
45
42
|
|
46
|
-
|
47
|
-
|
48
|
-
it 'delegates running a recipe to the recipe implementation' do
|
43
|
+
describe '#recipe_class' do
|
44
|
+
it 'construct the correct classname to use from recipe name' do
|
49
45
|
Blazing::Recipe.load_builtin_recipes
|
50
|
-
Blazing::RvmRecipe.should_receive(:run)
|
51
|
-
Blazing::Recipe.new(:rvm).run
|
52
|
-
end
|
53
|
-
|
54
|
-
it 'construct the correct classname to use from recie name' do
|
55
46
|
Blazing::Recipe.new(:rvm).recipe_class.should == Blazing::RvmRecipe
|
56
47
|
end
|
57
48
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
end
|
62
|
-
|
63
|
-
context 'unknown recipe' do
|
64
|
-
|
65
|
-
before :all do
|
66
|
-
@unknown_recipe_name = :undefined
|
67
|
-
end
|
68
|
-
|
69
|
-
it 'does not crash when a recipe can not be loaded' do
|
70
|
-
lambda { Blazing::Recipe.new(@unknown_recipe_name).run }.should_not raise_error
|
49
|
+
context 'when trying to load an unknown recipe' do
|
50
|
+
it 'does not raise a NameError' do
|
51
|
+
lambda { Blazing::Recipe.new('weirdname').recipe_class }.should_not raise_error NameError
|
71
52
|
end
|
72
53
|
|
73
|
-
it 'logs an error
|
74
|
-
@logger = double
|
75
|
-
@
|
76
|
-
|
77
|
-
@recipe.run
|
54
|
+
it 'logs an error message' do
|
55
|
+
@logger = double('logger')
|
56
|
+
@logger.should_receive(:log).with(:error, "unable to load weirdname recipe")
|
57
|
+
Blazing::Recipe.new('weirdname', :_logger => @logger).recipe_class
|
78
58
|
end
|
79
|
-
|
80
59
|
end
|
81
60
|
end
|
82
61
|
|
62
|
+
describe '#run' do
|
63
|
+
it 'raise an error when a recipe has no run method defined' do
|
64
|
+
class Blazing::BlahRecipe < Blazing::Recipe; end
|
65
|
+
lambda { Blazing::Recipe.new(:blah).run }.should raise_error RuntimeError
|
66
|
+
end
|
67
|
+
end
|
83
68
|
|
84
69
|
context 'builtin recipes' do
|
85
|
-
|
86
70
|
it 'include an rvm recipe' do
|
87
71
|
lambda { Blazing::RvmRecipe }.should_not raise_error NameError
|
88
72
|
end
|
@@ -90,6 +74,5 @@ describe Blazing::Recipe do
|
|
90
74
|
it 'include a bundler recipe' do
|
91
75
|
lambda { Blazing::BundlerRecipe }.should_not raise_error NameError
|
92
76
|
end
|
93
|
-
|
94
77
|
end
|
95
78
|
end
|
@@ -2,5 +2,31 @@ require 'spec_helper'
|
|
2
2
|
require 'blazing/recipes/bundler_recipe'
|
3
3
|
|
4
4
|
describe Blazing::BundlerRecipe do
|
5
|
-
|
5
|
+
|
6
|
+
before :each do
|
7
|
+
@recipe_without_options = Blazing::BundlerRecipe.new('bundler')
|
8
|
+
@recipe_with_options = Blazing::BundlerRecipe.new('bundler', :flags => '--without=production')
|
9
|
+
@runner = double('runner', :run => nil)
|
10
|
+
@recipe_with_options.instance_variable_set('@runner', @runner)
|
11
|
+
@recipe_without_options.instance_variable_set('@runner', @runner)
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '#run' do
|
15
|
+
it 'fails if there is no gemfile' do
|
16
|
+
File.stub!(:exists?).and_return(false)
|
17
|
+
@recipe_without_options.run.should be false
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'runs bundle install with default options when no options given' do
|
21
|
+
File.stub!(:exists?).and_return(true)
|
22
|
+
@runner.should_receive(:run).with('bundle install --deployment')
|
23
|
+
@recipe_without_options.run
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'runs bundle install with the options supplied' do
|
27
|
+
File.stub!(:exists?).and_return(true)
|
28
|
+
@runner.should_receive(:run).with('bundle install --without=production')
|
29
|
+
@recipe_with_options.run
|
30
|
+
end
|
31
|
+
end
|
6
32
|
end
|
@@ -2,5 +2,10 @@ require 'spec_helper'
|
|
2
2
|
require 'blazing/recipes/rvm_recipe'
|
3
3
|
|
4
4
|
describe Blazing::RvmRecipe do
|
5
|
-
|
5
|
+
|
6
|
+
describe '#run' do
|
7
|
+
it 'returns false, as the recipe itself is handled in shellscript' do
|
8
|
+
Blazing::RvmRecipe.new('rvm_recipe').run.should be false
|
9
|
+
end
|
10
|
+
end
|
6
11
|
end
|
data/spec/blazing/remote_spec.rb
CHANGED
@@ -4,31 +4,33 @@ require 'blazing/remote'
|
|
4
4
|
describe Blazing::Remote do
|
5
5
|
|
6
6
|
before :each do
|
7
|
-
|
7
|
+
# recipes = []
|
8
|
+
# @config = double('config', :load => double('actual_config', :recipes => recipes, :find_target => double('target', :recipes => recipes)))
|
9
|
+
@config = Blazing::Config.new
|
10
|
+
@config.target :some_name, :deploy_to => 'user@hostname:/path'
|
11
|
+
@remote = Blazing::Remote.new('some_name', :config => @config)
|
8
12
|
@remote.instance_variable_set('@_dir', double('Dir', :chdir => nil))
|
9
13
|
end
|
10
14
|
|
11
15
|
describe '#post_receive' do
|
12
16
|
before :each do
|
13
|
-
recipes = []
|
14
|
-
config = double('config', :load => double('actual_config', :recipes => recipes, :find_target => double('target', :recipes => recipes)))
|
15
|
-
@remote.instance_variable_set('@_config', config)
|
16
17
|
@remote.instance_variable_set('@runner', double('runner', :run => true))
|
18
|
+
Dir.stub!(:chdir)
|
17
19
|
end
|
18
20
|
|
19
21
|
it 'sets up the git dir' do
|
20
22
|
@remote.should_receive(:set_git_dir)
|
21
|
-
@remote.post_receive
|
23
|
+
@remote.post_receive
|
22
24
|
end
|
23
25
|
|
24
26
|
it 'runs the recipes' do
|
25
|
-
@remote.should_receive(:
|
26
|
-
@remote.post_receive
|
27
|
+
@remote.should_receive(:run_recipes)
|
28
|
+
@remote.post_receive
|
27
29
|
end
|
28
30
|
|
29
31
|
it 'resets the git repository' do
|
30
32
|
@remote.should_receive(:reset_head!)
|
31
|
-
@remote.post_receive
|
33
|
+
@remote.post_receive
|
32
34
|
end
|
33
35
|
end
|
34
36
|
|
@@ -41,10 +43,8 @@ describe Blazing::Remote do
|
|
41
43
|
|
42
44
|
describe '#set_git_dir' do
|
43
45
|
it 'sets .git as gitdir if git dir is "."' do
|
44
|
-
|
45
|
-
@remote.
|
46
|
-
@remote.set_git_dir
|
47
|
-
@remote.instance_variable_get('@_env')['GIT_DIR'].should == '.git'
|
46
|
+
# Dir.should_receive(:chdir).with('.git')
|
47
|
+
# @remote.set_git_dir
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
@@ -57,24 +57,15 @@ describe Blazing::Remote do
|
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
60
|
-
describe '#config' do
|
61
|
-
it 'loads the blazing config' do
|
62
|
-
config = double('config', :load => nil)
|
63
|
-
@remote.instance_variable_set('@_config', config)
|
64
|
-
config.should_receive(:load)
|
65
|
-
@remote.config
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
60
|
describe '#use_rvm?' do
|
70
61
|
context 'with rvm recipe enabled' do
|
71
|
-
it 'returns
|
72
|
-
@remote.instance_variable_set('@recipes', double('
|
73
|
-
@remote.use_rvm?.should
|
62
|
+
it 'returns the rvm string' do
|
63
|
+
@remote.instance_variable_set('@recipes', double('recipes', :find => double('recipe', :options => { :rvm_string => 'someruby@somegemset'}), :delete_if => nil))
|
64
|
+
@remote.use_rvm?.should == 'someruby@somegemset'
|
74
65
|
end
|
75
66
|
|
76
67
|
it 'deletes the rvm recipes from the recipes array' do
|
77
|
-
@remote.instance_variable_set('@recipes', [double('rvm_recipe', :name => 'rvm')])
|
68
|
+
@remote.instance_variable_set('@recipes', [double('rvm_recipe', :name => 'rvm', :options => {})])
|
78
69
|
@remote.use_rvm?
|
79
70
|
@remote.instance_variable_get('@recipes').should be_blank
|
80
71
|
end
|
@@ -88,14 +79,13 @@ describe Blazing::Remote do
|
|
88
79
|
end
|
89
80
|
end
|
90
81
|
|
91
|
-
describe '#
|
82
|
+
describe '#setup_recipes' do
|
92
83
|
context 'when the target has no recipes' do
|
93
84
|
it 'assigns the global recipes settings from the config' do
|
94
85
|
recipe_probe = double('recipe_probe', :name => 'noname', :run => nil)
|
95
|
-
|
96
|
-
|
97
|
-
@remote.
|
98
|
-
@remote.setup_and_run_recipes
|
86
|
+
config = double('config', :recipes => [recipe_probe])
|
87
|
+
@remote.instance_variable_set('@config', config)
|
88
|
+
@remote.setup_recipes
|
99
89
|
@remote.instance_variable_get('@recipes').first.should be recipe_probe
|
100
90
|
end
|
101
91
|
end
|
@@ -108,7 +98,7 @@ describe Blazing::Remote do
|
|
108
98
|
blazing_config_class = double('blazing_config', :load => global_config)
|
109
99
|
@remote.instance_variable_set('@_config', blazing_config_class)
|
110
100
|
@remote.instance_variable_set('@recipes', [target_recipe_probe])
|
111
|
-
@remote.
|
101
|
+
@remote.setup_recipes
|
112
102
|
@remote.instance_variable_get('@recipes').first.name.should == 'target'
|
113
103
|
end
|
114
104
|
end
|
@@ -126,11 +116,21 @@ describe Blazing::Remote do
|
|
126
116
|
end
|
127
117
|
|
128
118
|
describe '#run_bootstrap_recipes' do
|
129
|
-
|
130
|
-
|
131
|
-
@
|
132
|
-
|
119
|
+
|
120
|
+
before :each do
|
121
|
+
@bundler = double('bundler', :name => 'bundler', :run => nil)
|
122
|
+
@recipes = [@bundler, double('two', :name => nil), double('three', :name => nil)]
|
123
|
+
@remote.instance_variable_set('@recipes', @recipes)
|
124
|
+
end
|
125
|
+
|
126
|
+
it 'runs bundler recipe if it is enabled' do
|
127
|
+
@bundler.should_receive(:run)
|
128
|
+
@remote.run_bootstrap_recipes
|
129
|
+
end
|
130
|
+
|
131
|
+
it 'deletes the bundler recipe from the array after running it' do
|
133
132
|
@remote.run_bootstrap_recipes
|
133
|
+
@recipes.find { |r| r.name == 'bundler' }.should be nil
|
134
134
|
end
|
135
135
|
end
|
136
136
|
end
|
data/spec/blazing/runner_spec.rb
CHANGED
@@ -1,9 +1,12 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Blazing::Runner do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
describe '#run' do
|
5
|
+
it 'delegates run to Kernel#system' do
|
6
|
+
@command = 'ls'
|
7
|
+
@runner = Blazing::Runner.new
|
8
|
+
@runner.should_receive(:system).with(@command)
|
9
|
+
@runner.run(@command)
|
10
|
+
end
|
8
11
|
end
|
9
12
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -6,3 +6,31 @@ begin
|
|
6
6
|
rescue LoadError
|
7
7
|
puts 'ignoring simplecov, needs ruby-1.9'
|
8
8
|
end
|
9
|
+
|
10
|
+
#
|
11
|
+
# Stuff borrowed from carlhuda/bundler
|
12
|
+
#
|
13
|
+
RSpec.configure do |config|
|
14
|
+
def capture(stream)
|
15
|
+
begin
|
16
|
+
stream = stream.to_s
|
17
|
+
eval "$#{stream} = StringIO.new"
|
18
|
+
yield
|
19
|
+
result = eval("$#{stream}").string
|
20
|
+
ensure
|
21
|
+
eval("$#{stream} = #{stream.upcase}")
|
22
|
+
end
|
23
|
+
|
24
|
+
result
|
25
|
+
end
|
26
|
+
|
27
|
+
def source_root
|
28
|
+
File.join(File.dirname(__FILE__), 'fixtures')
|
29
|
+
end
|
30
|
+
|
31
|
+
def destination_root
|
32
|
+
File.join(File.dirname(__FILE__), 'sandbox')
|
33
|
+
end
|
34
|
+
|
35
|
+
alias :silence :capture
|
36
|
+
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: blazing
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.8
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Felipe Kaufmann
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-06-09 00:00:00 +02:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -64,9 +64,11 @@ files:
|
|
64
64
|
- MIT-LICENCE
|
65
65
|
- README.md
|
66
66
|
- Rakefile
|
67
|
+
- TODO
|
67
68
|
- bin/blazing
|
68
69
|
- blazing.gemspec
|
69
70
|
- lib/blazing.rb
|
71
|
+
- lib/blazing/base.rb
|
70
72
|
- lib/blazing/cli/base.rb
|
71
73
|
- lib/blazing/cli/create.rb
|
72
74
|
- lib/blazing/cli/hook.rb
|
@@ -83,6 +85,7 @@ files:
|
|
83
85
|
- lib/blazing/runner.rb
|
84
86
|
- lib/blazing/target.rb
|
85
87
|
- lib/blazing/version.rb
|
88
|
+
- spec/blazing/binary_spec.rb
|
86
89
|
- spec/blazing/cli/base_spec.rb
|
87
90
|
- spec/blazing/cli/create_spec.rb
|
88
91
|
- spec/blazing/cli/hook_spec.rb
|
@@ -126,6 +129,7 @@ signing_key:
|
|
126
129
|
specification_version: 3
|
127
130
|
summary: blazing fast deployment
|
128
131
|
test_files:
|
132
|
+
- spec/blazing/binary_spec.rb
|
129
133
|
- spec/blazing/cli/base_spec.rb
|
130
134
|
- spec/blazing/cli/create_spec.rb
|
131
135
|
- spec/blazing/cli/hook_spec.rb
|