class Billy::Commands::Walk

Public Instance Methods

prepare_capistrano( destination ) click to toggle source
# File lib/billy/commands/walk.rb, line 39
def prepare_capistrano( destination )
  
  cap = Capistrano::Configuration.new
  cap.load "standard"
  cap.load "deploy"
  cap.trigger( :load )
  config = Billy::Config.instance
  
  if config.deploy_to.nil?
    Billy::Util::UI.err "Billy doesn't know remote deploy path. Please provide it in config under deploy_to key."
    exit 1
  end
  cap.set :deploy_to, File.join( config.deploy_to, destination )
  cap.set :normalize_asset_timestamps, false
  
  reject_keys = [ :deploy_to, :server ]
  
  {
    :scm => :git,
    :use_sudo => false,
    :deploy_via => :remote_cache,
    :application => destination
  }.merge( config.storage.reject{ |k, v| reject_keys.include?( k.to_sym ) } ).each_pair do |k, v|
    cap.set k, v
  end
  
  Billy::Util::Scm.configure!( cap, config )
  
  cap.server config.server, :app, :web, :db, :primary => true
  
  cap.namespace :deploy do
    cap.task :start, :roles => :app do; end
    cap.task :stop, :roles => :app do; end
    cap.task :restart, :roles => :app do; end
  end
  
  cap
end
proceed!( arguments = nil ) click to toggle source
# File lib/billy/commands/walk.rb, line 8
def proceed!( arguments = nil )
  
  if !Billy::Config.load
    Billy::Util::UI.inform "Billy config could not be found. Say Billy hello."
    exit 1
  end
  
  destination = ( arguments.shift rescue nil ) || Billy::Config.instance.destination
  
  if destination.nil?
    Billy::Util::UI.err "Billy doesn't know where to walk."
    Billy::Util::UI.err "You have to provide deploy folder, e.g.: billy walk my_super_project."
    exit 1
  end
  
  begin
    cap = prepare_capistrano( destination )
    %w(deploy:setup deploy).each do |command|
      cap.find_and_execute_task(command, :before => :start, :after => :finish)
    end
    cap.trigger( :exit )
    Billy::Util::UI.succ 'Billy has successfully deployed project!'
    Billy::Util::UI.succ "Check http://#{Billy::Config.instance.server}/#{cap.application}/"
  rescue Exception => e
    Billy::Util::UI.err "Billy could not complete task: #{e.message}"
    exit 1
  end
  
  Billy::Util::UI.succ "All done! Billy is a clever boy!"
end