blazing 0.4.2 → 0.5.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.
- 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
|
-
|