blazing 0.0.7 → 0.0.8
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/.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
|