namespace :nodebrew do
task :validate do on release_roles(fetch(:nodebrew_roles)) do nodebrew_bin = fetch(:nodebrew_bin) unless test "[ -e #{nodebrew_bin} ]" error "nodebrew: command not found" exit 1 end nodebrew_node = fetch(:nodebrew_node) if nodebrew_node.nil? error "nodebrew: 'nodebrew_node' is not set" exit 1 end unless test "[ -d #{fetch(:nodebrew_node_dir)} ]" error "nodebrew: #{nodebrew_node} is not installed" exit 1 end end end task :map_bins do SSHKit.config.default_env.merge!({ nodebrew_root: fetch(:nodebrew_path) }) SSHKit.config.default_env.merge!({ path: "#{fetch(:nodebrew_path)}/current/bin:$PATH" }) nodebrew_prefix = fetch(:nodebrew_prefix, proc { "#{fetch(:nodebrew_bin)} exec #{fetch(:nodebrew_node)}" }) SSHKit.config.command_map[:nodebrew] = fetch(:nodebrew_bin) fetch(:nodebrew_map_bins).each do |command| SSHKit.config.command_map.prefix[command.to_sym].unshift(nodebrew_prefix) end end
end
Capistrano::DSL.stages.each do |stage|
after stage, 'nodebrew:validate' after stage, 'nodebrew:map_bins'
end
namespace :load do
task :defaults do set :nodebrew_path, -> { nodebrew_path = fetch(:nodebrew_custom_path) nodebrew_path ||= if fetch(:nodebrew_type, :user) == :system "/usr/local/nodebrew" else "~/.nodebrew" end } set :nodebrew_bin, -> { "#{fetch(:nodebrew_path)}/current/bin/nodebrew" } set :nodebrew_roles, fetch(:nodebrew_roles, :all) set :nodebrew_map_bins, %w{npm node iojs} set :nodebrew_node_dir, -> { "#{fetch(:nodebrew_path)}/node/#{fetch(:nodebrew_node)}" } end
end