namespace :deploy do
before :starting, :confirm_action do if fetch(:magento_deploy_confirm_roles).include? fetch(:stage).to_s print "\e[0;31m Are you sure you want to deploy to #{fetch(:stage).to_s}? [y/n] \e[0m" proceed = STDIN.gets[0..0] rescue nil exit unless proceed == 'y' || proceed == 'Y' end end Rake::Task["cleanup"].clear_actions desc "Clean up old releases" task :cleanup do on release_roles :all do |host| releases = capture(:ls, "-x", releases_path).split valid, invalid = releases.partition { |e| /^\d{14}$/ =~ e } keep = fetch(:keep_releases).to_i warn t(:skip_cleanup, host: host.to_s) if invalid.any? if valid.count >= keep info t(:keeping_releases, host: host.to_s, keep_releases: keep, releases: valid.count) directories = (valid - valid.last(keep)) if directories.any? directories_str = directories.map do |release| releases_path.join(release) end.join(" ") execute :sudo, 'rm', "-rf", directories_str # TODO re-symlink the old directory else info t(:no_old_releases, host: host.to_s, keep_releases: keep) end end end end Rake::Task["failed"].clear_actions desc "Failed deployment tasks" task :failed do on release_roles :all do |host| on roles :production, :staging, :testing do # Hold for a few seconds to make sure all disk related actions have completed info "Waiting for file / disk writing to complete" sleep(3) # Added sudo to make sure we can clear everything info "Removing failed deployment" execute :sudo, 'rm', '-rf', release_path info "Removed failed deployment" end end end
end