lib/o2h/recipes/deploy.rb in o2h-0.0.5 vs lib/o2h/recipes/deploy.rb in o2h-0.1.0
- old
+ new
@@ -1,12 +1,88 @@
+set(:strategy) do
+ require 'o2h/capistrano/deploy/strategy/git'
+ Capistrano::Deploy::Strategy::Git.new(self)
+end
+
set(:deploy_to) { "/var/www/#{domain}" }
set :group, :www
-after :deploy, 'deploy:set_permissions', :roles => :web
+set(:latest_release) { fetch(:current_path) }
+set(:release_path) { fetch(:current_path) }
+set(:current_release) { fetch(:current_path) }
+set(:current_revision) { capture("cd #{current_path}; git rev-parse --short HEAD").strip }
+set(:latest_revision) { capture("cd #{current_path}; git rev-parse --short HEAD").strip }
+set(:previous_revision) { capture("cd #{current_path}; git rev-parse --short HEAD@{1}").strip }
+
+#after :'deploy:update_code', :'deploy:set_permissions', :roles => :web
+
namespace :deploy do
task :set_permissions do
# Change the owner and group of everything under the
# deployment directory to webadmin and apache
try_sudo "chgrp -R #{group} #{deploy_to}"
+ end
+
+ desc find_task(:default).description
+ task :default do
+ update
+ restart
+ end
+
+ desc find_task(:setup).description
+ task :setup, :except => { :no_release => true } do
+ dirs = [deploy_to, shared_path]
+ dirs += shared_children.map { |d| File.join(shared_path, d) }
+ run "#{try_sudo} mkdir -p #{dirs.join(' ')} && #{try_sudo} chmod g+w #{dirs.join(' ')}"
+ strategy.clone!
+ end
+
+ desc find_task(:cold).description
+ task :cold do
+ update
+ migrate
+ start
+ end
+
+ desc "Resets to HEAD of branch"
+ task :update do
+ transaction do
+ update_code
+ end
+ end
+
+ desc find_task(:update_code).description
+ task :update_code, :except => { :no_release => true } do
+ strategy.deploy!
+ finalize_update
+ end
+
+ desc find_task(:migrations).description
+ task :migrations do
+ set :migrate_target, :latest
+ update
+ migrate
+ restart
+ end
+
+ task :celanup do
+ nil
+ end
+
+ task :symlink do
+ nil
+ end
+
+ namespace :rollback do
+ desc "Moves the repo back to the previous version of HEAD"
+ task :revision, :except => { :no_release => true } do
+ set :branch, "HEAD@{1}"
+ deploy.update_code
+ end
+
+ desc "Rewrite reflog so HEAD@{1} will continue to point to at the next previous release."
+ task :cleanup, :except => { :no_release => true } do
+ run "cd #{current_path}; git reflog delete --rewrite HEAD@{1}; git reflog delete --rewrite HEAD@{1}"
+ end
end
end