namespace :file_upload do
desc 'Check required files and dirs' task :check do invoke 'file_upload:check:dirs' invoke 'file_upload:check:files' end namespace :check do desc 'Check required dirs exists' task :dirs do next unless any? :file_upload_dirs run_locally do fetch(:file_upload_dirs).each do |dir| unless test "[ -d #{dir} ]" error "Local dir '#{dir}' not found!" exit 1 end end end end desc 'Check required files exists' task :files do next unless any? :file_upload_files run_locally do fetch(:file_upload_files).each do |file| unless test "[ -f #{file} ]" error "Local file '#{file}' not found!" exit 1 end end end end end desc 'Remove existing files and dirs' task :remove do invoke 'file_upload:remove:dirs' invoke 'file_upload:remove:files' end namespace :remove do desc 'Remove existing dirs' task :dirs do next unless any? :file_upload_dirs on release_roles(fetch(:file_upload_roles)) do fetch(:file_upload_dirs).each do |dir| target = release_path.join(dir) execute :rm, '-rf', target if test "[ -d #{target} ]" end end end desc 'Remove existing files' task :files do next unless any? :file_upload_files on release_roles(fetch(:file_upload_roles)) do fetch(:file_upload_files).each do |file| target = release_path.join(file) execute :rm, target if test "[ -f #{target} ]" end end end end desc 'Upload data to server' task :upload do on release_roles(fetch(:file_upload_roles)) do fetch(:file_upload_dirs).each do |dir| upload! dir, File.join(release_path, dir), recursive: true end fetch(:file_upload_files).each do |file| upload! file, File.join(release_path, file) end end end desc 'Prepare and upload new data' task :run do invoke 'file_upload:remove' invoke 'file_upload:upload' end before 'deploy:started', 'file_upload:check' before 'deploy:updated', 'file_upload:run'
end
namespace :load do
task :defaults do set :file_upload_dirs, [] set :file_upload_files, [] set :file_upload_roles, :all end
end