-
-
Save shanlalit/71374 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# by bryan helmkamp with slight modification by chris wanstrath | |
# from http://www.brynary.com/2008/8/3/our-git-deployment-workflow | |
module GitCommands | |
extend self | |
def diff_staging | |
`git fetch` | |
puts `git diff origin/production origin/staging` | |
end | |
def tag_staging(branch_name) | |
verify_working_directory_clean | |
`git fetch` | |
`git branch -f staging origin/staging` | |
`git checkout staging` | |
`git reset --hard origin/#{branch_name}` | |
`git push -f origin staging` | |
`git checkout master` | |
`git branch -D staging` | |
end | |
def tag_producton | |
verify_working_directory_clean | |
`git fetch` | |
`git branch -f production origin/production` | |
`git checkout production` | |
`git reset --hard origin/staging` | |
`git push -f origin production` | |
`git checkout master` | |
`git branch -D production` | |
end | |
def branch_production(branch_name) | |
verify_working_directory_clean | |
`git fetch` | |
`git branch -f production origin/production` | |
`git checkout production` | |
`git branch #{branch_name}` | |
`git checkout #{branch_name}` | |
`git push origin #{branch_name}` | |
end | |
protected | |
def verify_working_directory_clean | |
return if `git status` =~ /working directory clean/ | |
raise "Must have clean working directory" | |
end | |
end | |
namespace :tag do | |
desc <<-DESC | |
Update the staging branch to prepare for a staging deploy. | |
Defaults to master. Optionally specify a BRANCH=name | |
DESC | |
task :staging do | |
branch_name = ENV['BRANCH'] || "master" | |
GitCommands.tag_staging(branch_name) | |
end | |
desc "Update the remove production branch to prepare for a release" | |
task :production => ['diff:staging'] do | |
GitCommands.tag_production | |
end | |
end | |
namespace :diff do | |
desc "Show the differences between the staging branch and the production branch" | |
task :staging do | |
GitCommands.diff_staging | |
end | |
end | |
namespace :branch do | |
desc "Branch from production for tweaks or bug fixs. Specify BRANCH=name" | |
task :production do | |
branch_name = ENV['BRANCH'] | |
raise "You must specify a branch name using BRANCH=name" unless branch_name | |
GitCommands.branch_production | |
end | |
end | |
namespace :deploy do | |
desc "Tag and deploy staging" | |
task :staging => "tag:staging" do | |
`cap staging deploy:long` | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment