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/lib/blazing/hook.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'erb'
|
2
|
+
require_relative 'target'
|
2
3
|
|
3
4
|
module Blazing
|
4
5
|
class Hook
|
5
|
-
|
6
6
|
include Blazing::Logger
|
7
7
|
|
8
8
|
attr_accessor :target
|
@@ -20,16 +20,21 @@ module Blazing
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def rake_command
|
23
|
-
|
24
|
-
rails_env = "RAILS_ENV=#{@options[:rails_env]}" if @options[:rails_env]
|
25
|
-
|
26
|
-
if rake_config[:task]
|
27
|
-
"#{rake_config[:env]} #{rails_env} bundle exec rake #{rake_config[:task]}"
|
28
|
-
end
|
23
|
+
"#{options_as_vars}bundle exec rake #{@config.rake_task}" if @config.rake_task
|
29
24
|
end
|
30
25
|
|
31
26
|
private
|
32
27
|
|
28
|
+
def options_as_vars
|
29
|
+
keys = @options.keys
|
30
|
+
options = ''
|
31
|
+
keys.each do |key|
|
32
|
+
options << "#{key.to_s.upcase}=#{@options[key]} "
|
33
|
+
end
|
34
|
+
|
35
|
+
options
|
36
|
+
end
|
37
|
+
|
33
38
|
def load_template(template_name)
|
34
39
|
::ERB.new(File.read(find_template(template_name))).result(binding)
|
35
40
|
end
|
@@ -55,7 +60,7 @@ module Blazing
|
|
55
60
|
end
|
56
61
|
|
57
62
|
def write(hook)
|
58
|
-
File.open(Blazing::TMP_HOOK,
|
63
|
+
File.open(Blazing::TMP_HOOK, 'wb') do |f|
|
59
64
|
f.puts hook
|
60
65
|
end
|
61
66
|
end
|
@@ -69,7 +74,7 @@ module Blazing
|
|
69
74
|
end
|
70
75
|
|
71
76
|
def copy_hook
|
72
|
-
debug
|
77
|
+
debug 'Making hook executable'
|
73
78
|
# TODO: handle missing user?
|
74
79
|
if @target.host
|
75
80
|
@shell.run "scp #{Blazing::TMP_HOOK} #{@target.user}@#{@target.host}:#{@target.path}/.git/hooks/post-receive"
|
@@ -79,9 +84,8 @@ module Blazing
|
|
79
84
|
end
|
80
85
|
|
81
86
|
def make_hook_executable
|
82
|
-
debug
|
87
|
+
debug 'Making hook executable'
|
83
88
|
"chmod +x #{@target.path}/.git/hooks/post-receive"
|
84
89
|
end
|
85
90
|
end
|
86
91
|
end
|
87
|
-
|
data/lib/blazing/logger.rb
CHANGED
@@ -2,38 +2,34 @@ require 'logging'
|
|
2
2
|
|
3
3
|
module Blazing
|
4
4
|
module Logger
|
5
|
-
|
6
5
|
# include Logging.globally
|
7
6
|
|
8
7
|
# here we setup a color scheme called 'bright'
|
9
|
-
Logging.color_scheme(
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
8
|
+
Logging.color_scheme('bright',
|
9
|
+
levels: {
|
10
|
+
debug: :green,
|
11
|
+
info: :green,
|
12
|
+
warn: :yellow,
|
13
|
+
error: [:white, :on_red],
|
14
|
+
fatal: [:white, :on_red]
|
15
|
+
}
|
16
|
+
)
|
18
17
|
|
19
18
|
Logging.appenders.stdout(
|
20
19
|
'stdout',
|
21
|
-
:
|
22
|
-
:
|
23
|
-
:
|
20
|
+
layout: Logging.layouts.pattern(
|
21
|
+
pattern: ' ------> [blazing] %-5l: %m\n',
|
22
|
+
color_scheme: 'bright'
|
24
23
|
)
|
25
24
|
)
|
26
25
|
|
27
26
|
Logging.logger.root.appenders = 'stdout'
|
28
27
|
Logging.logger.root.level = :info
|
29
|
-
Logging.consolidate :root
|
30
28
|
|
31
|
-
%w
|
29
|
+
%w(debug info warn error fatal).each do |level|
|
32
30
|
define_method level do |message|
|
33
31
|
Logging.logger[self].send(level, message)
|
34
32
|
end
|
35
33
|
end
|
36
|
-
|
37
34
|
end
|
38
35
|
end
|
39
|
-
|
data/lib/blazing/repository.rb
CHANGED
data/lib/blazing/shell.rb
CHANGED
data/lib/blazing/target.rb
CHANGED
@@ -12,59 +12,24 @@
|
|
12
12
|
# rails_env: used when calling the rake task after deployment
|
13
13
|
|
14
14
|
target :staging, 'user@server:/var/www/someproject.com',
|
15
|
-
:
|
15
|
+
:rails_env => 'production'
|
16
16
|
|
17
|
-
|
18
|
-
# Sample rvm setup:
|
17
|
+
# Sample rvm/rbenv/chruby/other setup:
|
19
18
|
#
|
20
|
-
#
|
19
|
+
# env_sript <your rvm setup scripts>
|
21
20
|
#
|
22
|
-
# Setting
|
23
|
-
#
|
24
|
-
#
|
25
|
-
#
|
26
|
-
|
27
|
-
rvm 'ruby-1.9.3@some-gemset'
|
28
|
-
|
29
|
-
|
30
|
-
# Sample config for custom rvm location:
|
31
|
-
#
|
32
|
-
# rvm_scripts <path_to_rvm_scripts>
|
33
|
-
#
|
34
|
-
# If you have installed rvm to a custom location, use this method to
|
35
|
-
# specify where the rvm scripts are located.
|
36
|
-
|
37
|
-
rvm_scripts '/opt/rvm/scripts/rvm'
|
38
|
-
|
39
|
-
# Sample rbenv/chruby/other setup:
|
40
|
-
#
|
41
|
-
# env_scripts <path_to_version_manager_script>
|
42
|
-
#
|
43
|
-
# If you need to source a file for your non-rvm version manager to
|
44
|
-
# you can do that with env_scripts. You should also remove the
|
45
|
-
# rvm/rvm_scripts options above.
|
46
|
-
|
47
|
-
env_scripts '/etc/profile.d/rbenv.sh'
|
48
|
-
|
49
|
-
# Sample recipe setup:
|
50
|
-
#
|
51
|
-
# recipe <recipe_name>, [options]
|
52
|
-
#
|
53
|
-
# The given recipe will be called with the provided options. Refer to each
|
54
|
-
# recipe's documentation for available options. Options provided here
|
55
|
-
# may be overridden by target specific options.
|
56
|
-
# Recipes will be executed in the order they are defined!yy
|
57
|
-
|
58
|
-
recipe :precompile_assets, :recipe_specific_option => 'bar'
|
59
|
-
|
21
|
+
# Setting an env_script path makes sure it is sourced before the hook
|
22
|
+
# does anything at all. That way you can setup any environment things
|
23
|
+
# you need to. Most commonly this will be sourcing rvm and setting a
|
24
|
+
# ruby, or doing something with rbenv or chruby.
|
25
|
+
env_script '/etc/profile.d/rbenv.sh'
|
60
26
|
|
61
27
|
# Sample rake file config:
|
62
28
|
#
|
63
29
|
# rake <task>, [environment variables]
|
64
30
|
#
|
65
|
-
# The provided rake task will be run after
|
31
|
+
# The provided rake task will be run after blazing has done its stuff.
|
66
32
|
# Note: you can only call a single rake task. If you need to run several
|
67
33
|
# tasks just create one task that wrapps all the others.
|
68
34
|
|
69
|
-
rake :post_deploy
|
70
|
-
|
35
|
+
rake :post_deploy
|
@@ -1,3 +1,4 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
if [ -f "Gemfile" ] ; then
|
2
|
+
echo "------> [blazing] Bundling gems"
|
3
|
+
bundle --deployment --quiet --without development test
|
4
|
+
fi
|
@@ -1,6 +1,6 @@
|
|
1
|
-
<% if @config.
|
1
|
+
<% if @config.env_script %>
|
2
2
|
|
3
|
-
source <%= @config.
|
4
|
-
echo "------> [blazing]
|
3
|
+
source <%= @config.env_script %>
|
4
|
+
echo "------> [blazing] Sourcing environment script"
|
5
5
|
|
6
6
|
<% end %>
|
@@ -1,35 +1,7 @@
|
|
1
|
-
<% if @config.rvm %>
|
1
|
+
<% if @config.rvm? %>
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
#
|
6
|
-
<% unless @config.rvm_scripts %>
|
7
|
-
# Load RVM into a shell session *as a function*
|
8
|
-
if [[ -s "$HOME/.rvm/scripts/rvm" ]] ; then
|
9
|
-
|
10
|
-
# First try to load from a user install
|
11
|
-
source "$HOME/.rvm/scripts/rvm"
|
12
|
-
|
13
|
-
elif [[ -s "/usr/local/rvm/scripts/rvm" ]] ; then
|
14
|
-
|
15
|
-
# Then try to load from a root install
|
16
|
-
source "/usr/local/rvm/scripts/rvm"
|
17
|
-
|
18
|
-
else
|
19
|
-
echo '------> [blazing] ERROR: RVM was enabled in config but no RVM installation was not found\n'
|
20
|
-
fi
|
21
|
-
<% end %>
|
22
|
-
|
23
|
-
#
|
24
|
-
# Apply rvm env
|
25
|
-
#
|
26
|
-
<% if @config.rvm == :rvmrc %>
|
27
|
-
echo "------> [blazing] Loading rvm from .rvmrc"
|
28
|
-
source .rvmrc
|
29
|
-
<% else %>
|
30
|
-
echo "------> [blazing] Loading rvm string: <%= @config.rvm %>"
|
31
|
-
rvm use <%= @config.rvm %>
|
32
|
-
<% end %>
|
3
|
+
echo "------> [blazing] Loading rvm from .rvmrc"
|
4
|
+
source .rvmrc
|
33
5
|
|
34
6
|
<% end %>
|
35
7
|
|
data/spec/blazing/cli_spec.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'blazing/cli'
|
2
3
|
|
3
4
|
module Blazing
|
4
|
-
|
5
5
|
describe CLI do
|
6
|
-
|
7
6
|
let(:cli) { CLI.new }
|
8
7
|
it 'has an init method' do
|
9
8
|
cli.respond_to? :init
|
@@ -17,17 +16,8 @@ module Blazing
|
|
17
16
|
cli.respond_to? :update
|
18
17
|
end
|
19
18
|
|
20
|
-
it 'has a recipes method' do
|
21
|
-
cli.respond_to? :recipes
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'has a list method' do
|
25
|
-
cli.respond_to? :list
|
26
|
-
end
|
27
|
-
|
28
19
|
it 'has a help method' do
|
29
20
|
cli.respond_to? :help
|
30
21
|
end
|
31
22
|
end
|
32
23
|
end
|
33
|
-
|
@@ -1,24 +1,18 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
|
2
|
+
require_relative '../../lib/blazing/commands'
|
3
|
+
require_relative '../../lib/blazing/config'
|
3
4
|
|
4
5
|
module Blazing
|
5
|
-
|
6
6
|
describe Commands do
|
7
|
-
|
8
7
|
let(:config_instance) { Blazing::Config.new }
|
9
8
|
|
10
|
-
let(:target_a) { double('target_a', :
|
11
|
-
let(:target_b) { double('target_b', :
|
9
|
+
let(:target_a) { double('target_a', name: 'target_a', update: nil, setup: nil) }
|
10
|
+
let(:target_b) { double('target_b', name: 'target_b', update: nil, setup: nil) }
|
12
11
|
let(:targets) { [target_a, target_b] }
|
13
12
|
|
14
|
-
let(:recipe_a) { double('recipe_a', :name => 'recipe_a', :run => nil) }
|
15
|
-
let(:recipe_b) { double('recipe_b', :name => 'recipe_b', :run => nil) }
|
16
|
-
let(:recipes) { [recipe_a, recipe_b] }
|
17
|
-
|
18
13
|
let(:config) do
|
19
14
|
config = config_instance
|
20
15
|
config.targets = targets
|
21
|
-
config.recipes = recipes
|
22
16
|
|
23
17
|
config
|
24
18
|
end
|
@@ -27,118 +21,94 @@ module Blazing
|
|
27
21
|
let(:commands_instance) { commands.new }
|
28
22
|
|
29
23
|
before :each do
|
30
|
-
Config.
|
24
|
+
allow(Config).to receive(:parse).and_return config
|
31
25
|
end
|
32
26
|
|
33
27
|
describe '.new' do
|
34
28
|
it 'reads the config file when the command requires it' do
|
35
|
-
Config.
|
36
|
-
commands.new(:
|
29
|
+
expect(Config).to receive(:parse).and_return config
|
30
|
+
commands.new(command: :setup)
|
37
31
|
end
|
38
32
|
|
39
33
|
it 'does not read the config file when the command does not need it' do
|
40
|
-
Config.
|
41
|
-
commands.new(:
|
34
|
+
expect(Config).not_to receive(:parse)
|
35
|
+
commands.new(command: :init)
|
42
36
|
end
|
43
37
|
end
|
44
38
|
|
45
39
|
describe '#run' do
|
46
40
|
it 'creates an instance of itself' do
|
47
|
-
commands_instance.
|
48
|
-
commands.
|
41
|
+
allow(commands_instance).to receive :dummy_command
|
42
|
+
expect(commands).to receive(:new).with(command: :dummy_command).and_return(commands_instance)
|
49
43
|
commands.run(:dummy_command)
|
50
44
|
end
|
51
45
|
|
52
46
|
it 'runs the specified command' do
|
53
|
-
commands_instance.
|
54
|
-
commands.
|
47
|
+
expect(commands_instance).to receive(:dummy_command)
|
48
|
+
allow(commands).to receive(:new).with(command: :dummy_command).and_return(commands_instance)
|
55
49
|
commands.run(:dummy_command)
|
56
50
|
end
|
57
|
-
|
58
|
-
it 'raises an exception if the command does not exist' do
|
59
|
-
pending 'Implement after reading exceptional Ruby ;-)'
|
60
|
-
end
|
61
51
|
end
|
62
52
|
|
63
53
|
describe '#init' do
|
64
54
|
it 'creates a config directory if it does not exist' do
|
65
|
-
Dir.
|
66
|
-
File.
|
67
|
-
File.
|
55
|
+
expect(Dir).to receive(:mkdir).with('config')
|
56
|
+
allow(File).to receive(:exist?).and_return(false)
|
57
|
+
allow(File).to receive(:open)
|
68
58
|
commands.run(:init)
|
69
59
|
end
|
70
60
|
|
71
61
|
it 'creates a config file' do
|
72
62
|
file = double('file').as_null_object
|
73
|
-
File.
|
63
|
+
expect(File).to receive(:open).with('config/blazing.rb', 'wb').and_yield(file)
|
74
64
|
commands.run(:init)
|
75
65
|
end
|
76
66
|
end
|
77
67
|
|
78
68
|
describe '#setup' do
|
79
69
|
it 'runs the setup method on the specified target' do
|
80
|
-
target_a.
|
81
|
-
target_b.
|
82
|
-
commands.run(:setup, :
|
70
|
+
expect(target_a).to receive(:setup)
|
71
|
+
expect(target_b).not_to receive(:setup)
|
72
|
+
commands.run(:setup, target_name: target_a.name)
|
83
73
|
end
|
84
74
|
|
85
75
|
it 'does nothing when no target is specified' do
|
86
|
-
target_a.
|
87
|
-
target_b.
|
76
|
+
expect(target_a).not_to receive(:setup)
|
77
|
+
expect(target_b).not_to receive(:setup)
|
88
78
|
commands.run(:setup)
|
89
79
|
end
|
90
80
|
|
91
81
|
it 'runs setup on all targets if "all" is specified' do
|
92
|
-
target_a.
|
93
|
-
target_b.
|
94
|
-
commands.run(:setup, :
|
82
|
+
expect(target_a).to receive(:setup)
|
83
|
+
expect(target_b).to receive(:setup)
|
84
|
+
commands.run(:setup, target_name: 'all')
|
95
85
|
end
|
96
86
|
|
97
87
|
it 'runs the update command' do
|
98
|
-
commands_instance.
|
99
|
-
commands.
|
88
|
+
expect(commands_instance).to receive(:update)
|
89
|
+
allow(commands).to receive(:new).and_return(commands_instance)
|
100
90
|
commands.run(:setup)
|
101
91
|
end
|
102
92
|
end
|
103
93
|
|
104
94
|
describe '#update' do
|
105
95
|
it 'runs the update method on the specified target' do
|
106
|
-
target_a.
|
107
|
-
target_b.
|
108
|
-
commands.run(:update, :
|
96
|
+
expect(target_a).to receive(:update)
|
97
|
+
expect(target_b).not_to receive(:update)
|
98
|
+
commands.run(:update, target_name: target_a.name)
|
109
99
|
end
|
110
100
|
|
111
101
|
it 'does nothing when no target is specified' do
|
112
|
-
target_a.
|
113
|
-
target_b.
|
102
|
+
expect(target_a).not_to receive(:update)
|
103
|
+
expect(target_b).not_to receive(:update)
|
114
104
|
commands.run(:update)
|
115
105
|
end
|
116
106
|
|
117
107
|
it 'runs update on all targets if "all" is specified' do
|
118
|
-
target_a.
|
119
|
-
target_b.
|
120
|
-
commands.run(:update, :
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
describe '#recipes' do
|
125
|
-
it 'runs each recipe' do
|
126
|
-
recipes.each { |r| r.should_receive(:run) }
|
127
|
-
commands.run(:recipes)
|
128
|
-
end
|
129
|
-
|
130
|
-
it 'passes in target_name' do
|
131
|
-
recipes.each { |r| r.should_receive(:run).with({:target_name => :testing}) }
|
132
|
-
commands.run(:recipes, :target_name => :testing)
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
describe '#list' do
|
137
|
-
it 'lists each recipe' do
|
138
|
-
Blazing::Recipe.should_receive(:pretty_list)
|
139
|
-
commands.run(:list)
|
108
|
+
expect(target_a).to receive(:update)
|
109
|
+
expect(target_b).to receive(:update)
|
110
|
+
commands.run(:update, target_name: 'all')
|
140
111
|
end
|
141
112
|
end
|
142
113
|
end
|
143
114
|
end
|
144
|
-
|