blazing 0.2.10 → 0.2.11

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.
Files changed (43) hide show
  1. data/.rvmrc +26 -20
  2. data/CHANGELOG.md +28 -8
  3. data/Gemfile +0 -1
  4. data/Guardfile +10 -2
  5. data/README.md +3 -3
  6. data/blazing.gemspec +8 -5
  7. data/lib/blazing/cli.rb +6 -7
  8. data/lib/blazing/commands.rb +72 -0
  9. data/lib/blazing/config.rb +5 -0
  10. data/lib/blazing/hook.rb +85 -0
  11. data/lib/blazing/logger.rb +1 -0
  12. data/lib/blazing/recipe.rb +5 -0
  13. data/lib/blazing/repository.rb +53 -0
  14. data/lib/blazing/target.rb +35 -91
  15. data/lib/blazing/templates/config.erb +1 -1
  16. data/lib/blazing/templates/hook/base.erb +7 -0
  17. data/lib/blazing/templates/hook/bundler.erb +3 -0
  18. data/lib/blazing/templates/hook/git-reset.erb +10 -0
  19. data/lib/blazing/templates/hook/rake.erb +5 -0
  20. data/lib/blazing/templates/hook/recipes.erb +5 -0
  21. data/lib/blazing/templates/{hook.erb → hook/rvm.erb} +0 -29
  22. data/lib/blazing/templates/hook/setup.erb +9 -0
  23. data/lib/blazing.rb +3 -2
  24. data/spec/blazing/cli_spec.rb +33 -0
  25. data/spec/blazing/commands_spec.rb +134 -0
  26. data/spec/blazing/dsl_setter_spec.rb +29 -0
  27. data/spec/blazing/hook_spec.rb +148 -0
  28. data/spec/blazing/integration/deployment_spec.rb +32 -0
  29. data/spec/blazing/integration/init_spec.rb +3 -4
  30. data/spec/blazing/integration/list_spec.rb +4 -3
  31. data/spec/blazing/integration/recipes_spec.rb +2 -2
  32. data/spec/blazing/integration/setup_spec.rb +2 -2
  33. data/spec/blazing/integration/update_spec.rb +1 -3
  34. data/spec/blazing/logger_spec.rb +34 -0
  35. data/spec/blazing/recipe_spec.rb +1 -1
  36. data/spec/blazing/repository_spec.rb +41 -0
  37. data/spec/blazing/shell_spec.rb +19 -0
  38. data/spec/blazing/target_spec.rb +0 -25
  39. metadata +66 -35
  40. data/.rspec +0 -2
  41. data/lib/blazing/runner.rb +0 -79
  42. data/lib/blazing/version.rb +0 -7
  43. data/spec/blazing/runner_spec.rb +0 -24
data/.rvmrc CHANGED
@@ -4,22 +4,35 @@
4
4
  # development environment upon cd'ing into the directory
5
5
 
6
6
  # First we specify our desired <ruby>[@<gemset>], the @gemset name is optional.
7
- environment_id="ruby-1.9.2@blazing-rework"
7
+ environment_id="ruby-1.9.3-p0@blazing"
8
+
9
+ #
10
+ # Uncomment following line if you want options to be set only for given project.
11
+ #
12
+ # PROJECT_JRUBY_OPTS=( --1.9 )
8
13
 
9
14
  #
10
15
  # First we attempt to load the desired environment directly from the environment
11
- # file. This is very fast and efficicent compared to running through the entire
16
+ # file. This is very fast and efficient compared to running through the entire
12
17
  # CLI and selector. If you want feedback on which environment was used then
13
18
  # insert the word 'use' after --create as this triggers verbose mode.
14
19
  #
15
20
  if [[ -d "${rvm_path:-$HOME/.rvm}/environments" \
16
- && -s "${rvm_path:-$HOME/.rvm}/environments/$environment_id" ]] ; then
21
+ && -s "${rvm_path:-$HOME/.rvm}/environments/$environment_id" ]]
22
+ then
17
23
  \. "${rvm_path:-$HOME/.rvm}/environments/$environment_id"
18
24
 
19
- [[ -s ".rvm/hooks/after_use" ]] && . ".rvm/hooks/after_use"
25
+ if [[ -s "${rvm_path:-$HOME/.rvm}/hooks/after_use" ]]
26
+ then
27
+ . "${rvm_path:-$HOME/.rvm}/hooks/after_use"
28
+ fi
20
29
  else
21
30
  # If the environment file has not yet been created, use the RVM CLI to select.
22
- rvm --create "$environment_id"
31
+ if ! rvm --create "$environment_id"
32
+ then
33
+ echo "Failed to create RVM environment '${environment_id}'."
34
+ return 1
35
+ fi
23
36
  fi
24
37
 
25
38
  #
@@ -28,22 +41,15 @@ fi
28
41
  # necessary.
29
42
  #
30
43
  # filename=".gems"
31
- # if [[ -s "$filename" ]] ; then
44
+ # if [[ -s "$filename" ]]
45
+ # then
32
46
  # rvm gemset import "$filename" | grep -v already | grep -v listed | grep -v complete | sed '/^$/d'
33
47
  # fi
34
48
 
35
- #
36
- # If you use bundler and would like to run bundle each time you enter the
37
- # directory, you can uncomment the following code.
38
- #
39
- # # Ensure that Bundler is installed. Install it if it is not.
40
- # if ! command -v bundle >/dev/null; then
41
- # printf "The rubygem 'bundler' is not installed. Installing it now.\n"
42
- # gem install bundler
43
- # fi
44
- #
45
- # # Bundle while reducing excess noise.
46
- # printf "Bundling your gems. This may take a few minutes on a fresh clone.\n"
47
- # bundle | grep -v '^Using ' | grep -v ' is complete' | sed '/^$/d'
48
- #
49
+ # If you use bundler, this might be useful to you:
50
+ # if command -v bundle && [[ -s Gemfile ]]
51
+ # then
52
+ # bundle install
53
+ # fi
54
+
49
55
 
data/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  ## master
2
2
 
3
+ ## 0.2.11 - July 11, 2012
4
+
5
+ * add pimpmychangelog and pimp changelog
6
+ * fix git/bundler related issue ([#60][])
7
+ * deprecate `:default` option for target
8
+ * pull hook out of target
9
+ * refactor and improve specs
10
+ * use `Blazing::Commands` in favor of `Blazing::Runner`
11
+ * other misc refactorings
12
+
3
13
  ## 0.2.10 - February 7, 2012
4
14
 
5
15
  * Fix post-receive hook (use new syntax)
@@ -17,9 +27,9 @@
17
27
  * update and improve readme and sample configuration
18
28
  * deprecate `repository` DSL method
19
29
  * allow environment variables to be defined in config when setting the
20
- rake task (#58)
30
+ rake task ([#58][])
21
31
  * allow the RAILS_ENV to be specified for a target (will be used when
22
- calling rake) (#58)
32
+ calling rake) ([#58][])
23
33
 
24
34
  ## 0.2.7 - November 24, 2011
25
35
 
@@ -37,7 +47,7 @@
37
47
  ## 0.2.4 - November 9, 2011
38
48
 
39
49
  * Fix logger, so the formatting does not get carried over to apps using
40
- blazing. (#55)
50
+ blazing. ([#55][])
41
51
 
42
52
  ## 0.2.3 - November 1, 2011
43
53
 
@@ -65,20 +75,30 @@
65
75
 
66
76
  ## 0.1.2 - October 25, 2011
67
77
 
68
- * setup initializes an empty repository, so first push will work (#47)
78
+ * setup initializes an empty repository, so first push will work ([#47][])
69
79
 
70
- * simplified cli workflow (#45):
80
+ * simplified cli workflow ([#45][]):
71
81
  * update runs update and setup:local
72
82
  * setup:remote renamed to setup
73
83
  * setup:remote also runs update
74
84
 
75
85
  ## 0.1.1 - October 25, 2011
76
86
 
77
- * [BUG]: fix #48: dont bundle test and dev gems, do it quietly
78
- * [BUG]: fix #44: accept target as argument
79
- * [BUG]: fix #41: recipe gem loading issues resolved
87
+ * [BUG]: fix [#48][]: dont bundle test and dev gems, do it quietly
88
+ * [BUG]: fix [#44][]: accept target as argument
89
+ * [BUG]: fix [#41][]: recipe gem loading issues resolved
80
90
  * remove documentation of external recipes
81
91
 
82
92
  ## 0.1.0 - October 24, 2011
83
93
 
84
94
  [@effkay]: https://github.com/effkay
95
+ <!--- The following link definition list is generated by PimpMyChangelog --->
96
+ [#41]: https://github.com/effkay/blazing/issues/41
97
+ [#44]: https://github.com/effkay/blazing/issues/44
98
+ [#45]: https://github.com/effkay/blazing/issues/45
99
+ [#47]: https://github.com/effkay/blazing/issues/47
100
+ [#48]: https://github.com/effkay/blazing/issues/48
101
+ [#55]: https://github.com/effkay/blazing/issues/55
102
+ [#58]: https://github.com/effkay/blazing/issues/58
103
+ [#60]: https://github.com/effkay/blazing/issues/60
104
+ [@effkay]: https://github.com/effkay
data/Gemfile CHANGED
@@ -1,4 +1,3 @@
1
1
  source "http://rubygems.org"
2
2
 
3
- # Specify your gem's dependencies in blazing.gemspec
4
3
  gemspec
data/Guardfile CHANGED
@@ -1,9 +1,17 @@
1
- guard :rspectacle, :version => 2, :cli => "--colour --fail-fast --format nested" do
1
+ guard :rspec, :version => 2, :cli => "--colour --fail-fast --format nested" do
2
+
3
+ # Generated: by guard-rspec
4
+ watch(%r{^spec/.+_spec\.rb})
5
+ watch(%r{^lib/(.+)\.rb}) { |m| "spec/lib/#{m[1]}_spec.rb" }
6
+ watch('spec/spec_helper.rb') { "spec" }
7
+
8
+ # Not Generated
2
9
  watch('spec/spec_helper.rb') { %w(spec/spec_helper spec) }
3
10
  watch(%r{^spec/.+_spec\.rb})
4
11
  watch(%r{^lib/(.+)\.rb}) { |m| "spec/#{m[1]}_spec.rb" }
5
12
  watch(%r{^lib/blazing/(.+)\.rb}) { |m| "spec/blazing/#{m[1]}_spec.rb" }
6
13
  watch('spec/spec_helper.rb') { "spec" }
7
14
  watch(%r{^lib/blazing/templates/(.+)}) { "spec" }
8
- watch('lib/blazing/runner.rb') { "spec/blazing/integration/*" }
15
+ watch('lib/blazing/cli.rb') { "spec/blazing/integration/*" }
16
+ watch('lib/blazing/commands.rb') { "spec/blazing/integration/*" }
9
17
  end
data/README.md CHANGED
@@ -10,7 +10,7 @@ Not everyone can or wants to deploy on heroku. But now you can have the same (we
10
10
  Quickstart
11
11
  ----------
12
12
 
13
- `blazing init`, edit your blaing config, run `blazing setup [target]` to deploy your post-receive hook and you're set. Deploy with `git push <target> <branch>`.
13
+ `blazing init`, edit your blazing config, run `blazing setup [target]` to deploy your post-receive hook and you're set. Deploy with `git push <target> <branch>`.
14
14
 
15
15
  Features
16
16
  --------
@@ -77,7 +77,7 @@ List available recipes
77
77
 
78
78
  Run the configured recipes (used on deployment target, can be used to test recipes localy)
79
79
 
80
- The `setup` and `update` commands also take 'all' as an option. This .
80
+ The `setup` and `update` commands also take 'all' as an option. This will perform the action on all your defined targets.
81
81
 
82
82
  #### Configuration (blazing DSL)
83
83
 
@@ -92,7 +92,7 @@ The `setup` and `update` commands also take 'all' as an option. This .
92
92
  # Options recognized by blazing core:
93
93
  # rails_env: used when calling the rake task after deployment
94
94
 
95
- target :staging, 'screenconcept@ruby:/var/www/vischer.ruby.screenconcept.ch',
95
+ target :staging, 'user@server:/var/www/someproject.com',
96
96
  :recipe_specific_option => 'foo', :rails_env => 'production'
97
97
 
98
98
 
data/blazing.gemspec CHANGED
@@ -1,18 +1,20 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  $:.push File.expand_path("../lib", __FILE__)
3
- require "blazing/version"
4
3
 
5
4
  Gem::Specification.new do |s|
6
5
  s.name = "blazing"
7
- s.version = Blazing::VERSION
6
+
7
+ #
8
+ # TODO: Remove Config.repository in 0.3
9
+ #
10
+ s.version = '0.2.11'
11
+
8
12
  s.authors = ["Felipe Kaufmann"]
9
13
  s.email = ["felipekaufmann@gmail.com"]
10
14
  s.homepage = "https://github.com/effkay/blazing"
11
15
  s.summary = %q{git push deployment helper}
12
16
  s.description = %q{painless git push deployments for everyone}
13
-
14
17
  s.rubyforge_project = "blazing"
15
-
16
18
  s.files = `git ls-files`.split("\n")
17
19
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
20
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
@@ -25,10 +27,11 @@ Gem::Specification.new do |s|
25
27
  s.add_development_dependency('rake','~> 0.9.2')
26
28
  s.add_development_dependency('rspec')
27
29
  s.add_development_dependency('guard')
28
- s.add_development_dependency('guard-rspectacle')
30
+ s.add_development_dependency('guard-rspec')
29
31
  s.add_development_dependency('ruby_gntp')
30
32
  s.add_development_dependency('rb-fsevent')
31
33
  s.add_development_dependency('pry')
34
+ s.add_development_dependency('pimpmychangelog')
32
35
 
33
36
  s.add_dependency('grit')
34
37
  s.add_dependency('logging')
data/lib/blazing/cli.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  require 'thor'
2
- require 'blazing/runner'
2
+ require 'blazing/commands'
3
3
 
4
4
  module Blazing
5
5
  class CLI < Thor
@@ -12,7 +12,7 @@ module Blazing
12
12
  # Bootstrap blazing by creating a sample config file
13
13
  #
14
14
  def init
15
- Blazing::Runner.init
15
+ Blazing::Commands.run(:init)
16
16
  end
17
17
 
18
18
  desc 'setup [TARGET]', 'Setup local and remote repository/repositories for deployment'
@@ -26,7 +26,7 @@ module Blazing
26
26
  # Setup a target to be deployed with blazing
27
27
  #
28
28
  def setup(target_name = nil)
29
- Blazing::Runner.new(target_name, options).setup
29
+ Blazing::Commands.run(:setup, :target_name => target_name, :options => options)
30
30
  end
31
31
 
32
32
  desc 'update [TARGET]', 'Re-Generate and uplaod hook based on current configuration'
@@ -40,7 +40,7 @@ module Blazing
40
40
  # Update the target hook so it matches the settings in the config
41
41
  #
42
42
  def update(target_name = nil)
43
- Blazing::Runner.new(target_name, options).update
43
+ Blazing::Commands.run(:update, :target_name => target_name, :options => options)
44
44
  end
45
45
 
46
46
  desc 'recipes [TARGET]', 'Run the recipes for the given target'
@@ -49,7 +49,7 @@ module Blazing
49
49
  # Run the configured blazing recipes (used on remote machien)
50
50
  #
51
51
  def recipes(target_name)
52
- Blazing::Runner.new(target_name, options).recipes
52
+ Blazing::Commands.run(:recipes, :target_name => target_name, :options => options)
53
53
  end
54
54
 
55
55
  desc 'list', 'List available recipes'
@@ -58,8 +58,7 @@ module Blazing
58
58
  # List the available blazing recipes
59
59
  #
60
60
  def list
61
- Blazing::Runner.list
61
+ Blazing::Commands.run(:list)
62
62
  end
63
-
64
63
  end
65
64
  end
@@ -0,0 +1,72 @@
1
+ module Blazing
2
+ class Commands
3
+
4
+ include Logger
5
+
6
+ class << self
7
+ def run(command, options = {})
8
+ self.new(options).send(command)
9
+ end
10
+ end
11
+
12
+ def initialize(options = {})
13
+ warn 'The :default Target option has been deprecated and will be ignored' if options.has_key?(:default)
14
+
15
+ @target_name = options[:target_name]
16
+ @config_file = options[:file]
17
+
18
+ @config ||= Config.parse(@config_file)
19
+ @targets = determine_targets
20
+
21
+ error 'no target given or found' if @targets.empty?
22
+
23
+ # TODO: better exception handling, like this?
24
+ #raise RuntimeError if @targets.empty?
25
+ end
26
+
27
+ def init
28
+ info "Creating an example config file in #{Blazing::DEFAULT_CONFIG_LOCATION}"
29
+ info "Customize it to your needs"
30
+ create_config_directory
31
+ write_config_file
32
+ end
33
+
34
+ def setup
35
+ @targets.each { |target| target.setup }
36
+ update
37
+ end
38
+
39
+ def update
40
+ @targets.each { |target| target.update }
41
+ end
42
+
43
+ def recipes
44
+ @config.recipes.each { |recipe| recipe.run }
45
+ end
46
+
47
+ def list
48
+ Blazing::Recipe.pretty_list
49
+ end
50
+
51
+ private
52
+
53
+ def create_config_directory
54
+ Dir.mkdir 'config' unless File.exists? 'config'
55
+ end
56
+
57
+ def write_config_file
58
+ config = ERB.new(File.read("#{Blazing::TEMPLATE_ROOT}/config.erb")).result
59
+ File.open(Blazing::DEFAULT_CONFIG_LOCATION,"wb") { |f| f.puts config }
60
+ end
61
+
62
+ def determine_targets
63
+ if @target_name == 'all'
64
+ @config.targets
65
+ else
66
+ targets = []
67
+ targets << @config.find_target(@target_name)
68
+ targets.compact
69
+ end
70
+ end
71
+ end
72
+ end
@@ -51,4 +51,9 @@ class Blazing::Config
51
51
  end
52
52
  end
53
53
 
54
+ # TODO: Spec it!
55
+ def find_target(target_name)
56
+ targets.find { |t| t.name.to_s == target_name.to_s }
57
+ end
58
+
54
59
  end
@@ -0,0 +1,85 @@
1
+ module Blazing
2
+ class Hook
3
+
4
+ include Blazing::Logger
5
+
6
+ attr_accessor :target
7
+
8
+ def initialize(target)
9
+ @target = target
10
+ @config = target.config
11
+ @options = target.options
12
+ @shell = Blazing::Shell.new
13
+ end
14
+
15
+ def setup
16
+ prepare_hook
17
+ deploy_hook
18
+ end
19
+
20
+ def rake_command
21
+ rake_config = @config.instance_variable_get("@rake") || {}
22
+ rails_env = "RAILS_ENV=#{@options[:rails_env]}" if @options[:rails_env]
23
+
24
+ if rake_config[:task]
25
+ "#{rake_config[:env]} #{rails_env} bundle exec rake #{rake_config[:task]}"
26
+ end
27
+ end
28
+
29
+ private
30
+
31
+ def load_template(template_name)
32
+ ERB.new(File.read(find_template(template_name))).result(binding)
33
+ end
34
+
35
+ def find_template(template_name)
36
+ "#{Blazing::TEMPLATE_ROOT}/#{template_name}.erb"
37
+ end
38
+
39
+ def prepare_hook
40
+ info "Generating and uploading post-receive hook for #{@target.name}"
41
+ hook = generate_hook
42
+ write hook
43
+ end
44
+
45
+ def deploy_hook
46
+ debug "Copying hook for #{@target.name} to #{@target.location}"
47
+ copy_hook
48
+ set_hook_permissions
49
+ end
50
+
51
+ def generate_hook
52
+ load_template 'hook/base'
53
+ end
54
+
55
+ def write(hook)
56
+ File.open(Blazing::TMP_HOOK, "wb") do |f|
57
+ f.puts hook
58
+ end
59
+ end
60
+
61
+ def set_hook_permissions
62
+ if @target.host
63
+ @shell.run "ssh #{@target.user}@#{@target.host} #{make_hook_executable}"
64
+ else
65
+ @shell.run "#{make_hook_executable}"
66
+ end
67
+ end
68
+
69
+ def copy_hook
70
+ debug "Making hook executable"
71
+ # TODO: handle missing user?
72
+ if @target.host
73
+ @shell.run "scp #{Blazing::TMP_HOOK} #{@target.user}@#{@target.host}:#{@target.path}/.git/hooks/post-receive"
74
+ else
75
+ @shell.run "cp #{Blazing::TMP_HOOK} #{@target.path}/.git/hooks/post-receive"
76
+ end
77
+ end
78
+
79
+ def make_hook_executable
80
+ debug "Making hook executable"
81
+ "chmod +x #{@target.path}/.git/hooks/post-receive"
82
+ end
83
+ end
84
+ end
85
+
@@ -36,3 +36,4 @@ module Blazing
36
36
 
37
37
  end
38
38
  end
39
+
@@ -1,3 +1,4 @@
1
+ require 'blazing/logger'
1
2
  require 'active_support/inflector'
2
3
 
3
4
  class Blazing::Recipe
@@ -34,5 +35,9 @@ class Blazing::Recipe
34
35
  gems.each { |gem| require gem }
35
36
  end
36
37
 
38
+ def pretty_list
39
+ list.each { |r| puts r.to_s.demodulize.underscore }
40
+ end
41
+
37
42
  end
38
43
  end
@@ -0,0 +1,53 @@
1
+ require 'grit'
2
+
3
+ module Blazing
4
+ class Repository
5
+
6
+ include Blazing::Logger
7
+
8
+ def initialize(target)
9
+ @target = target
10
+ @shell = Blazing::Shell.new
11
+ end
12
+
13
+ def setup
14
+ # TODO: Handle case where user is empty
15
+ if @target.host
16
+ @shell.run "ssh #{@target.user}@#{@target.host} '#{init_repository} && #{setup_repository}'"
17
+ else
18
+ @shell.run "#{init_repository} && #{setup_repository}"
19
+ end
20
+ end
21
+
22
+ def add_git_remote
23
+ info "Adding new remote #{@target.name} pointing to #{@target.location}"
24
+ set_git_remote!
25
+ end
26
+
27
+ private
28
+
29
+ #
30
+ # Initialize an empty repository
31
+ #
32
+ def init_repository
33
+ # Instead of git init with a path, so it does not fail on older
34
+ # git versions (https://github.com/effkay/blazing/issues/53)
35
+ "mkdir #{@target.path}; cd #{@target.path} && git init"
36
+ end
37
+
38
+ #
39
+ # Allow pushing to currently checked out branch
40
+ #
41
+ def setup_repository
42
+ "cd #{@target.path} && git config receive.denyCurrentBranch ignore"
43
+ end
44
+
45
+ def grit_repository_object
46
+ @grit_object ||= Grit::Repo.new(Dir.pwd)
47
+ end
48
+
49
+ def set_git_remote!
50
+ grit_repository_object.config["remote.#{@target.name}.url"] = @target.location
51
+ end
52
+ end
53
+ end
@@ -1,108 +1,52 @@
1
- require 'blazing/shell'
2
- require 'grit'
1
+ module Blazing
3
2
 
4
- class Blazing::Target
3
+ class Target
5
4
 
6
- include Blazing::Logger
5
+ include Blazing::Logger
7
6
 
8
- attr_accessor :name, :location, :options
7
+ attr_accessor :name, :location, :options, :config
9
8
 
10
- def initialize(name, location, config, options = {})
11
- @name = name
12
- @location = location
13
- @config = config
14
- @options = options
15
- @shell = Blazing::Shell.new
16
- @target = self
17
- end
18
-
19
- def setup
20
- info "Setting up repository for #{name} in #{location}"
21
-
22
- # TODO: Handle case where user is empty
23
- if host
24
- @shell.run "ssh #{user}@#{host} '#{init_repository} && #{setup_repository}'"
25
- else
26
- @shell.run "#{init_repository} && #{setup_repository}"
9
+ def initialize(name, location, config, options = {})
10
+ @name = name
11
+ @location = location
12
+ @config = config
13
+ @options = options
14
+ @target = self
27
15
  end
28
- end
29
-
30
- def apply_hook
31
- info "Generating and uploading post-receive hook for #{name}"
32
- hook = ERB.new(File.read("#{Blazing::TEMPLATE_ROOT}/hook.erb")).result(binding)
33
16
 
34
- File.open(Blazing::TMP_HOOK, "wb") do |f|
35
- f.puts hook
17
+ #
18
+ # Set up Repositories and Hook
19
+ #
20
+ def setup
21
+ info "Setting up repository for #{name} in #{location}"
22
+ Repository.new(self).setup
36
23
  end
37
24
 
38
- debug "Copying hook for #{name} to #{location}"
39
- copy_hook
40
- if host
41
- @shell.run "ssh #{user}@#{host} #{make_hook_executable}"
42
- else
43
- @shell.run "#{make_hook_executable}"
25
+ #
26
+ # Update git remote and hook
27
+ #
28
+ def update
29
+ Repository.new(self).add_git_remote
30
+ Hook.new(self).setup
44
31
  end
45
- end
46
32
 
47
- def setup_git_remote
48
- repository = Grit::Repo.new(Dir.pwd)
49
- info "Adding new remote #{name} pointing to #{location}"
50
- repository.config["remote.#{name}.url"] = location
51
- end
52
-
53
- def path
54
- if host
55
- @location.match(/:(.*)$/)[1]
56
- else
57
- @location
33
+ def path
34
+ if host
35
+ @location.match(/:(.*)$/)[1]
36
+ else
37
+ @location
38
+ end
58
39
  end
59
- end
60
40
 
61
- def host
62
- host = @location.match(/@(.*):/)
63
- host[1] unless host.nil?
64
- end
65
-
66
- def user
67
- user = @location.match(/(.*)@/)
68
- user[1] unless user.nil?
69
- end
70
-
71
- #
72
- # Initialize an empty repository, so we can push to it
73
- #
74
- def init_repository
75
- # Instead of git init with a path, so it does not fail on older
76
- # git versions (https://github.com/effkay/blazing/issues/53)
77
- "mkdir #{path}; cd #{path} && git init"
78
- end
79
-
80
- def copy_hook
81
- debug "Making hook executable"
82
- # TODO: handle missing user?
83
- if host
84
- @shell.run "scp #{Blazing::TMP_HOOK} #{user}@#{host}:#{path}/.git/hooks/post-receive"
85
- else
86
- @shell.run "cp #{Blazing::TMP_HOOK} #{path}/.git/hooks/post-receive"
41
+ def host
42
+ host = @location.match(/@(.*):/)
43
+ host[1] unless host.nil?
87
44
  end
88
- end
89
-
90
- def make_hook_executable
91
- debug "Making hook executable"
92
- "chmod +x #{path}/.git/hooks/post-receive"
93
- end
94
45
 
95
- def setup_repository
96
- "cd #{path} && git config receive.denyCurrentBranch ignore"
97
- end
98
-
99
- def rake_command
100
- rake_config = @config.instance_variable_get("@rake") || {}
101
- rails_env = "RAILS_ENV=#{@options[:rails_env]}" if @options[:rails_env]
102
-
103
- if rake_config[:task]
104
- "#{rake_config[:env]} #{rails_env} bundle exec rake #{rake_config[:task]}"
46
+ def user
47
+ user = @location.match(/(.*)@/)
48
+ user[1] unless user.nil?
105
49
  end
106
50
  end
107
-
108
51
  end
52
+
@@ -11,7 +11,7 @@
11
11
  # Options recognized by blazing core:
12
12
  # rails_env: used when calling the rake task after deployment
13
13
 
14
- target :staging, 'screenconcept@ruby:/var/www/vischer.ruby.screenconcept.ch',
14
+ target :staging, 'user@server:/var/www/someproject.com',
15
15
  :recipe_specific_option => 'foo', :rails_env => 'production'
16
16
 
17
17