namespace :deploy do
desc 'Compress assets' task :compress_assets, :names do |_, args| on roles(:app) do assets_path = release_path.join('public') names = args[:names].is_a?(Array) && !(args[:names].empty?) ? args[:names] : %w(*.js *.css *.ico *.svg *.pdf) names_args = "#{names.join('" -o -name "')}" execute "mkdir -p #{ assets_path + '{assets,packs}' }" execute "find -L #{assets_path + '{assets,packs}' } -type f \\( -name \"#{names_args}\" \\) -exec bash -c \"[ ! -f '{}.gz' ] && zopfli --gzip --i20 '{}'\" \\;" end end desc 'Compress pngs' task :compress_png do on roles(:app) do assets_path = release_path.join('public') execute "mkdir -p #{ assets_path + '{assets,packs}' }" execute "find -L #{assets_path + '{assets,packs}'} -type f \\( -name *.png \\) -not \\( -name 'zopflied_*.png' \\) -exec bash -c 'FULLPATH='{}'; FILENAME=${FULLPATH##*/}; BASEDIRECTORY=${FULLPATH%$FILENAME}; [ ! -f \"${BASEDIRECTORY}zopflied_${FILENAME}\" ] && zopflipng \"${FULLPATH}\" \"${BASEDIRECTORY}zopflied_${FILENAME}\" ' \\;" end end desc 'Intall compressor hooks' task :install_compressor_hooks do before 'deploy:publishing', 'deploy:compress_assets' before 'deploy:publishing', 'deploy:compress_png' end before :starting, :install_compressor_hooks
end