blazing 0.4.2 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +183 -0
- data/.travis.yml +8 -4
- data/CHANGELOG.md +7 -1
- data/Gemfile +1 -1
- data/Guardfile +6 -7
- data/README.md +30 -152
- data/Rakefile +5 -6
- data/bin/blazing +1 -2
- data/blazing.gemspec +17 -26
- data/lib/blazing.rb +2 -14
- data/lib/blazing/cli.rb +32 -39
- data/lib/blazing/commands.rb +18 -26
- data/lib/blazing/config.rb +21 -51
- data/lib/blazing/dsl.rb +37 -0
- data/lib/blazing/hook.rb +15 -11
- data/lib/blazing/logger.rb +13 -17
- data/lib/blazing/repository.rb +5 -1
- data/lib/blazing/shell.rb +5 -5
- data/lib/blazing/target.rb +3 -3
- data/lib/blazing/templates/config.erb +10 -45
- data/lib/blazing/templates/hook/base.erb +0 -3
- data/lib/blazing/templates/hook/bundler.erb +4 -3
- data/lib/blazing/templates/hook/env-scripts.erb +3 -3
- data/lib/blazing/templates/hook/rake.erb +0 -1
- data/lib/blazing/templates/hook/rvm.erb +3 -31
- data/lib/blazing/templates/hook/setup.erb +1 -1
- data/lib/blazing/version.rb +3 -0
- data/spec/blazing/cli_spec.rb +1 -11
- data/spec/blazing/commands_spec.rb +35 -65
- data/spec/blazing/config_spec.rb +22 -102
- data/spec/blazing/dsl_spec.rb +60 -0
- data/spec/blazing/hook_spec.rb +31 -82
- data/spec/blazing/integration/deployment_spec.rb +20 -22
- data/spec/blazing/integration/init_spec.rb +2 -4
- data/spec/blazing/integration/setup_spec.rb +30 -30
- data/spec/blazing/integration/update_spec.rb +35 -35
- data/spec/blazing/logger_spec.rb +0 -4
- data/spec/blazing/repository_spec.rb +8 -10
- data/spec/blazing/shell_spec.rb +2 -4
- data/spec/blazing/target_spec.rb +12 -13
- data/spec/spec_helper.rb +8 -12
- data/spec/support/dummy_config.rb +6 -0
- metadata +18 -35
- data/lib/blazing/dsl_setter.rb +0 -20
- data/lib/blazing/recipe.rb +0 -45
- data/lib/blazing/templates/hook/recipes.erb +0 -5
- data/spec/blazing/dsl_setter_spec.rb +0 -29
- data/spec/blazing/integration/list_spec.rb +0 -20
- data/spec/blazing/integration/recipes_spec.rb +0 -29
- data/spec/blazing/recipe_spec.rb +0 -42
data/spec/blazing/config_spec.rb
CHANGED
@@ -1,129 +1,49 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
|
2
|
+
require_relative '../../lib/blazing/config'
|
3
3
|
|
4
4
|
describe Blazing::Config do
|
5
|
+
let(:config) { Blazing::Config.new }
|
5
6
|
|
6
7
|
describe '#initialize' do
|
7
8
|
it 'takes the path of the config file as an argument' do
|
8
9
|
config = Blazing::Config.new('/some/where/config.rb')
|
9
|
-
config.file.
|
10
|
+
expect(config.file).to eq '/some/where/config.rb'
|
10
11
|
end
|
11
12
|
|
12
13
|
it 'takes the default config path if no path is specified' do
|
13
14
|
config = Blazing::Config.new
|
14
|
-
config.file.
|
15
|
+
expect(config.file).to eq 'config/blazing.rb'
|
15
16
|
end
|
16
17
|
end
|
17
18
|
|
18
19
|
describe '.parse' do
|
19
|
-
|
20
20
|
it 'returns a config object' do
|
21
|
-
Blazing::Config.parse('spec/support/empty_config.rb').
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
25
|
-
|
26
|
-
describe '#default_target' do
|
27
|
-
|
28
|
-
it 'returns a target object if only one is present' do
|
29
|
-
config = Blazing::Config.new
|
30
|
-
config.target :sometarget, 'somewhere'
|
31
|
-
config.default_target.name.should be :sometarget
|
32
|
-
end
|
33
|
-
|
34
|
-
end
|
35
|
-
|
36
|
-
describe 'DSL' do
|
37
|
-
|
38
|
-
before :each do
|
39
|
-
@config = Blazing::Config.new
|
40
|
-
end
|
41
|
-
|
42
|
-
describe 'target' do
|
43
|
-
|
44
|
-
it 'creates a target object for each target call' do
|
45
|
-
@config.target :somename, 'someuser@somehost:/path/to/deploy/to'
|
46
|
-
@config.target :someothername, 'someuser@somehost:/path/to/deploy/to'
|
47
|
-
|
48
|
-
@config.targets.each { |t| t.should be_a Blazing::Target }
|
49
|
-
@config.targets.size.should be 2
|
50
|
-
end
|
51
|
-
|
52
|
-
it 'does not allow the creation of two targets with the same name' do
|
53
|
-
@config.target :somename, 'someuser@somehost:/path/to/deploy/to'
|
54
|
-
lambda { @config.target :somename, 'someuser@somehost:/path/to/deploy/to' }.should raise_error
|
55
|
-
end
|
21
|
+
expect(Blazing::Config.parse('spec/support/empty_config.rb')).to be_a Blazing::Config
|
56
22
|
end
|
57
23
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
end
|
64
|
-
|
65
|
-
it 'is an empty array if nothing was set' do
|
66
|
-
@config.recipes.should be_a Array
|
67
|
-
end
|
68
|
-
|
69
|
-
it 'accepts a single recipe as argument' do
|
70
|
-
@config.recipe :dummy
|
71
|
-
@config.recipes.first.should be_a Blazing::Recipe::Dummy
|
72
|
-
end
|
73
|
-
|
74
|
-
it 'allows multiple recipes to be defined' do
|
75
|
-
@config.recipe :dummy
|
76
|
-
@config.recipe :dummy
|
77
|
-
@config.recipes.size.should be 2
|
78
|
-
@config.recipes.each { |r| r.should be_a Blazing::Recipe::Dummy }
|
79
|
-
end
|
80
|
-
|
81
|
-
it 'passes the options to the recipe initializer' do
|
82
|
-
@config.recipe :dummy, :something => 'blah'
|
83
|
-
@config.recipes.first.options[:something].should == 'blah'
|
84
|
-
end
|
24
|
+
it 'creates a new DSL object and instance_evals the config file' do
|
25
|
+
dsl_double = double('dsl double')
|
26
|
+
expect(Blazing::DSL).to receive(:new).and_return(dsl_double)
|
27
|
+
expect(dsl_double).to receive(:instance_eval)
|
28
|
+
Blazing::Config.parse('spec/support/empty_config.rb')
|
85
29
|
end
|
86
30
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
@config.instance_variable_get('@rake').should == { :task => :post_deploy }
|
92
|
-
end
|
93
|
-
|
94
|
-
it 'accepts environment variables to pass along to rake' do
|
95
|
-
@config.rake :post_deploy, 'RAILS_ENV=production'
|
96
|
-
@config.instance_variable_get('@rake').should == { :task => :post_deploy, :env => 'RAILS_ENV=production' }
|
97
|
-
end
|
98
|
-
|
31
|
+
it 'loads the actual data from the config file' do
|
32
|
+
config = Blazing::Config.parse('spec/support/dummy_config.rb')
|
33
|
+
expect(config.targets.size).to be 1
|
34
|
+
expect(config.target(:staging)).to be_a Blazing::Target
|
99
35
|
end
|
36
|
+
end
|
100
37
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
end
|
107
|
-
|
108
|
-
it 'returns the rvm string if no argument given' do
|
109
|
-
@config.rvm 'ruby-1.9.2@rails31'
|
110
|
-
@config.rvm.should == 'ruby-1.9.2@rails31'
|
111
|
-
end
|
112
|
-
|
38
|
+
describe 'target' do
|
39
|
+
it 'returns a target object if the target exists in config' do
|
40
|
+
target = double('dummy_target', name: 'foo')
|
41
|
+
config.targets << target
|
42
|
+
expect(config.target('foo')).to be target
|
113
43
|
end
|
114
44
|
|
115
|
-
|
116
|
-
|
117
|
-
it 'takes an string as argument' do
|
118
|
-
@config.rvm_scripts '/opt/rvm/scripts'
|
119
|
-
@config.instance_variable_get('@env_scripts').should == '/opt/rvm/scripts'
|
120
|
-
end
|
121
|
-
|
122
|
-
it 'returns the string if no argument given' do
|
123
|
-
@config.rvm_scripts '/opt/rvm/scripts'
|
124
|
-
@config.rvm_scripts.should == '/opt/rvm/scripts'
|
125
|
-
end
|
126
|
-
|
45
|
+
it 'returns nil if the target does not exist in config' do
|
46
|
+
expect(config.target('foo')).to be nil
|
127
47
|
end
|
128
48
|
end
|
129
49
|
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'blazing/dsl'
|
3
|
+
|
4
|
+
module Blazing
|
5
|
+
describe DSL do
|
6
|
+
let(:dsl) { Blazing::DSL.new(config) }
|
7
|
+
let(:config) { double('config') }
|
8
|
+
|
9
|
+
describe 'target' do
|
10
|
+
let(:config) { double('config', targets: []) }
|
11
|
+
|
12
|
+
it 'adds a target to the config object' do
|
13
|
+
dsl.target :somename, 'someuser@somehost:/path/to/deploy/to'
|
14
|
+
dsl.target :someothername, 'someuser@somehost:/path/to/deploy/to'
|
15
|
+
expect(config.targets.size).to be 2
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'does not allow the creation of two targets with the same name' do
|
19
|
+
dsl.target :somename, 'someuser@somehost:/path/to/deploy/to'
|
20
|
+
expect { dsl.target :somename, 'someuser@somehost:/path/to/deploy/to' }.to raise_error(RuntimeError, 'Name already taken')
|
21
|
+
expect(config.targets.size).to be 1
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe 'rake' do
|
26
|
+
it 'sets the rake task to the given name' do
|
27
|
+
expect(config).to receive(:rake_task=).with('some_task')
|
28
|
+
dsl.rake 'some_task'
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe 'env_script' do
|
33
|
+
it 'sets the env script to the given path' do
|
34
|
+
expect(config).to receive(:env_script=).with('/path/to/script')
|
35
|
+
dsl.env_script '/path/to/script'
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe 'rvm_scripts' do
|
40
|
+
it 'is deprecated and outputs a warning' do
|
41
|
+
expect(dsl).to receive(:warn)
|
42
|
+
dsl.rvm_scripts '/path/to/script'
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe 'rvm' do
|
47
|
+
it 'is deprecated and outputs a warning' do
|
48
|
+
expect(dsl).to receive(:warn)
|
49
|
+
dsl.rvm '/path/to/script'
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe 'recipes' do
|
54
|
+
it 'is deprecated and outputs a warning' do
|
55
|
+
expect(dsl).to receive(:warn)
|
56
|
+
dsl.recipes '/path/to/script'
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
data/spec/blazing/hook_spec.rb
CHANGED
@@ -1,148 +1,97 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'blazing/hook'
|
3
|
+
require 'blazing/config'
|
2
4
|
|
3
5
|
module Blazing
|
4
|
-
|
5
|
-
class Recipe::Dummy < Blazing::Recipe
|
6
|
-
end
|
7
|
-
|
8
6
|
describe Hook do
|
9
|
-
|
10
|
-
let(:config) { Config.new }
|
7
|
+
let(:config) { Blazing::Config.new }
|
11
8
|
|
12
9
|
describe '#rake_command' do
|
13
|
-
it 'prepends the
|
14
|
-
config.
|
15
|
-
target = Blazing::Target.new(:sometarget, '/path', config)
|
10
|
+
it 'prepends the RAILS_ENV specified as :rails_env option to the target call' do
|
11
|
+
config.rake_task = :deploy
|
12
|
+
target = Blazing::Target.new(:sometarget, '/path', config, rails_env: 'production')
|
16
13
|
hook = Hook.new(target)
|
17
|
-
hook.rake_command.
|
14
|
+
expect(hook.rake_command).to eq('RAILS_ENV=production bundle exec rake deploy')
|
18
15
|
end
|
19
16
|
|
20
|
-
it '
|
21
|
-
config.
|
22
|
-
target = Blazing::Target.new(:sometarget, '/path', config, :
|
17
|
+
it 'prepends the any other option specified specified in the target call' do
|
18
|
+
config.rake_task = :deploy
|
19
|
+
target = Blazing::Target.new(:sometarget, '/path', config, rails_env: 'production', foo: 'bar')
|
23
20
|
hook = Hook.new(target)
|
24
|
-
hook.rake_command.
|
21
|
+
expect(hook.rake_command).to include('RAILS_ENV=production')
|
22
|
+
expect(hook.rake_command).to include('FOO=bar')
|
23
|
+
expect(hook.rake_command).to include('bundle exec rake deploy')
|
25
24
|
end
|
26
25
|
|
27
26
|
it 'returns nil when no rake task was specified in config' do
|
28
|
-
target = Blazing::Target.new(:sometarget, '/path', config, :
|
27
|
+
target = Blazing::Target.new(:sometarget, '/path', config, rails_env: 'production')
|
29
28
|
hook = Hook.new(target)
|
30
|
-
hook.rake_command.
|
29
|
+
expect(hook.rake_command).to be nil
|
31
30
|
end
|
32
31
|
end
|
33
32
|
|
34
33
|
describe 'Generated Hook' do
|
35
|
-
|
36
|
-
let(:target) { Blazing::Target.new(:sometarget, '/path', config, :rails_env => 'production') }
|
34
|
+
let(:target) { Blazing::Target.new(:sometarget, '/path', config, rails_env: 'production') }
|
37
35
|
let(:hook_file) { Hook.new(target).send(:generate_hook) }
|
38
36
|
|
39
37
|
context 'Always' do
|
40
38
|
it 'logs the header with the target name' do
|
41
|
-
hook_file.
|
39
|
+
expect(hook_file).to include('ENTERING POST RECEIVE HOOK FOR: sometarget')
|
42
40
|
end
|
43
41
|
|
44
42
|
it 'goes one directory up' do
|
45
|
-
hook_file.
|
43
|
+
expect(hook_file).to include('cd ..')
|
46
44
|
end
|
47
45
|
|
48
46
|
it 'sets the GIT_DIR variable to .git' do
|
49
|
-
hook_file.
|
47
|
+
expect(hook_file).to include("GIT_DIR='.git'")
|
50
48
|
end
|
51
49
|
|
52
50
|
it 'does a hard reset' do
|
53
|
-
hook_file.
|
51
|
+
expect(hook_file).to include('git reset --hard HEAD')
|
54
52
|
end
|
55
53
|
|
56
54
|
it 'checks out the pushed branch' do
|
57
|
-
hook_file.
|
55
|
+
expect(hook_file).to include('git checkout $refname')
|
58
56
|
end
|
59
57
|
|
60
58
|
it 'resets the GIT_DIR variable' do
|
61
|
-
hook_file.
|
59
|
+
expect(hook_file).to include('unset GIT_DIR')
|
62
60
|
end
|
63
61
|
|
64
62
|
it 'resets the GIT_WORK_TREE variable' do
|
65
|
-
hook_file.
|
63
|
+
expect(hook_file).to include('unset GIT_WORK_TREE')
|
66
64
|
end
|
67
65
|
|
68
66
|
it 'runs bundler with the correct options' do
|
69
|
-
hook_file.
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
context 'RVM Setup' do
|
74
|
-
context 'when rvm is enabled' do
|
75
|
-
context 'loading rvm' do
|
76
|
-
it 'uses the load mechanism suggested by rvm' do
|
77
|
-
config.rvm 'someruby@somegemset'
|
78
|
-
hook_file.should include("source \"$HOME/.rvm/scripts/rvm\"")
|
79
|
-
hook_file.should include("source \"/usr/local/rvm/scripts/rvm\"")
|
80
|
-
end
|
81
|
-
|
82
|
-
it 'sources the rvm_scripts directory when rvm_scripts is specified' do
|
83
|
-
config.rvm 'someruby@somegemset'
|
84
|
-
config.rvm_scripts '/location/of/rvm/scripts'
|
85
|
-
hook_file.should include("source /location/of/rvm/scripts")
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
context 'loading the rvm ruby and gemset' do
|
90
|
-
it 'sources the rvmrc to load the env' do
|
91
|
-
config.rvm 'someruby@somegemset'
|
92
|
-
hook_file.should include("rvm use someruby@somegemset")
|
93
|
-
end
|
94
|
-
|
95
|
-
it 'uses rvm use to load the env when an rvm string was specified' do
|
96
|
-
config.rvm :rvmrc
|
97
|
-
hook_file.should include("source .rvmrc")
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
context 'when rvm is disabled' do
|
103
|
-
it 'does not include any rvm handling' do
|
104
|
-
hook_file.should_not include("Loading rvm")
|
105
|
-
end
|
67
|
+
expect(hook_file).to include('bundle --deployment --quiet --without development test')
|
106
68
|
end
|
107
69
|
end
|
108
70
|
|
109
|
-
context '
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
hook_file.should_not include("bundle exec blazing recipes")
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
context 'when there are recipes configured' do
|
118
|
-
before :each do
|
119
|
-
config.recipe :dummy
|
120
|
-
end
|
121
|
-
|
122
|
-
it 'runs the blazing recipes command with the correct target name' do
|
123
|
-
hook_file.should include("bundle exec blazing recipes sometarget")
|
124
|
-
end
|
71
|
+
context 'env script' do
|
72
|
+
it 'sources the specified directory when env_script is specified' do
|
73
|
+
config.env_script = '/location/of/script'
|
74
|
+
expect(hook_file).to include('source /location/of/script')
|
125
75
|
end
|
126
76
|
end
|
127
77
|
|
128
78
|
context 'Rake Command Handling' do
|
129
79
|
context 'when the rake_command is specified' do
|
130
80
|
before :each do
|
131
|
-
config.
|
81
|
+
config.rake_task = :deploy
|
132
82
|
end
|
133
83
|
|
134
84
|
it 'runs the rake command' do
|
135
|
-
hook_file.
|
85
|
+
expect(hook_file).to include(' RAILS_ENV=production bundle exec rake deploy')
|
136
86
|
end
|
137
87
|
end
|
138
88
|
|
139
89
|
context 'when no rake_command is specified' do
|
140
90
|
it 'does not run the rake_command' do
|
141
|
-
hook_file.
|
91
|
+
expect(hook_file).not_to include(' RAILS_ENV=production bundle exec rake')
|
142
92
|
end
|
143
93
|
end
|
144
94
|
end
|
145
95
|
end
|
146
96
|
end
|
147
97
|
end
|
148
|
-
|
@@ -1,32 +1,30 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe 'deployment with git push' do
|
4
|
+
before :each do
|
5
|
+
setup_sandbox
|
6
|
+
# @config = Blazing::Config.new
|
7
|
+
# @config.target :production, "#{@sandbox_directory}/target"
|
8
|
+
# @config.target :staging, "#{@sandbox_directory}/staging"
|
9
|
+
# @cli = Blazing::CLI.new
|
10
|
+
# Blazing::Config.stub(:parse).and_return @config
|
11
|
+
end
|
4
12
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
#@config.target :production, "#{@sandbox_directory}/target"
|
9
|
-
#@config.target :staging, "#{@sandbox_directory}/staging"
|
10
|
-
#@cli = Blazing::CLI.new
|
11
|
-
#Blazing::Config.stub(:parse).and_return @config
|
12
|
-
end
|
13
|
+
after :each do
|
14
|
+
teardown_sandbox
|
15
|
+
end
|
13
16
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
+
context 'git push <remote> <ref>' do
|
18
|
+
it 'deploys the pushed ref'
|
19
|
+
end
|
17
20
|
|
18
|
-
|
21
|
+
context 'git push <remote>' do
|
22
|
+
context 'when one ref is pushed' do
|
19
23
|
it 'deploys the pushed ref'
|
20
24
|
end
|
21
25
|
|
22
|
-
context '
|
23
|
-
|
24
|
-
it 'deploys the pushed ref'
|
25
|
-
end
|
26
|
-
|
27
|
-
context 'when multiple refs are pushed' do
|
28
|
-
it 'deploys the currently checked out ref'
|
29
|
-
end
|
26
|
+
context 'when multiple refs are pushed' do
|
27
|
+
it 'deploys the currently checked out ref'
|
30
28
|
end
|
31
|
-
|
32
|
-
|
29
|
+
end
|
30
|
+
end
|
@@ -3,7 +3,6 @@ require 'blazing/config'
|
|
3
3
|
require 'blazing/commands'
|
4
4
|
|
5
5
|
describe '$ blazing init' do
|
6
|
-
|
7
6
|
before :each do
|
8
7
|
setup_sandbox
|
9
8
|
Blazing::Commands.new.init
|
@@ -14,11 +13,10 @@ describe '$ blazing init' do
|
|
14
13
|
end
|
15
14
|
|
16
15
|
it 'creates a config directory if none exists yet' do
|
17
|
-
File.
|
16
|
+
expect(File.exist?('config')).to be true
|
18
17
|
end
|
19
18
|
|
20
19
|
it 'creates a config file in config/blazing.rb' do
|
21
|
-
File.
|
20
|
+
expect(File.exist?('config/blazing.rb')).to be true
|
22
21
|
end
|
23
22
|
end
|
24
|
-
|