Skip to content

Instantly share code, notes, and snippets.

@clemens
Created April 23, 2009 17:16
Show Gist options
  • Save clemens/100610 to your computer and use it in GitHub Desktop.
Save clemens/100610 to your computer and use it in GitHub Desktop.
# highly experimental Capistrano recipe for adva-cms-based apps
# UNTESTED
set :adva_cms_repository, "git://github.com/svenfuchs/adva_cms.git" # set this to something different if you want to use a fork
set :adva_engines, :core # list desired engines as array or use :all to install all engines
set :adva_plugins, [] # list desired plugins as array or use :all to install all plugins
namespace :adva do
desc "Install selected engines."
task :install do
rake = fetch(:rake, "rake")
engines = !adva_engines.is_a?(Array) && [:all, :core].include?(adva_engines.to_sym) ? adva_engines : adva_engines.join(',')
plugins = !adva_plugins.is_a?(Array) && :all == adva_plugins ? adva_plugins : adva_plugins.join(',')
engines = "engines=#{engines}" unless engines.blank?
plugins = "plugins=#{plugins}" unless plugins.blank?
run "cd #{current_path} && #{rake} adva:install #{engines} #{plugins} && #{rake} adva:assets:install"
end
namespace :shared_dirs do
desc "Symlink shared folders."
task :symlink do
run "ln -nfs #{shared_path}/themes #{release_path}/public/themes" if engine_included?(:adva_themes)
run "ln -nfs #{shared_path}/assets #{release_path}/public/assets" if engine_included?(:adva_assets)
run "ln -nfs #{shared_path}/photos #{release_path}/public/photos" if engine_included?(:adva_photos)
run "mkdir -p #{release_path}/vendor"
run "ln -nfs #{shared_path}/adva_cms #{release_path}/vendor/adva"
end
desc "Create shared directories."
task :create, :roles => [:app] do
dirs = %w(adva_cms)
dirs << 'themes' if engine_included?(:adva_themes)
dirs << 'assets' if engine_included?(:adva_assets)
dirs << 'photos' if engine_included?(:adva_photos)
run "umask 02 && mkdir -p #{shared_path}/{#{dirs.join(',')}}"
end
end
desc "Clone adva-cms"
task :clone_cms do
run "git clone #{adva_cms_repository} #{shared_path}/adva_cms"
end
end
# dependencies
depend :remote, :directory, "#{shared_path}/adva_cms"
depend :remote, :directory, "#{shared_path}/assets" if engine_included?(:adva_assets)
depend :remote, :directory, "#{shared_path}/photos" if engine_included?(:adva_photos)
depend :remote, :directory, "#{shared_path}/themes" if engine_included?(:adva_themes)
# callbacks
after 'deploy:update_code', 'adva:shared_dirs:symlink'
after 'deploy:symlink_shared', 'adva:install'
after 'deploy:setup', 'adva:clone_cms'
after 'deploy:setup', 'adva:shared_dirs:create'
# some utility methods
def engine_included?(engine)
if !adva_engines.is_a?(Array)
adva_engines.to_sym == :all || (adva_engines.to_sym == :core && core_engines.include?(engine))
else
adva_engines.map(&:to_sym).include?(engine.to_sym)
end
end
def core_engines
%w(adva_activity adva_blog adva_cms adva_comments adva_rbac adva_user)
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment