Skip to content

Instantly share code, notes, and snippets.

@Nagyman
Created February 15, 2012 19:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Nagyman/1838539 to your computer and use it in GitHub Desktop.
Save Nagyman/1838539 to your computer and use it in GitHub Desktop.
Skeleton for point-release from git
def deploy():
env.release = time.strftime('%Y%m%d%H%M%S')
upload_tar_from_git()
symlink_current_release()
restart_webserver()
def deploy_version(version):
"Specify a specific version to be made live"
require('hosts', provided_by=[localhost,webserver])
require('releases')
env.version = version
current_to_previous()
run('ln -s %(releases)s/%(version)s %(current)s' % env, pty=True)
restart_webserver()
def current_to_previous():
if files.exists(env.previous):
run('rm %(previous)s' % env, pty=True)
if files.exists(env.current):
run('mv %(current)s %(previous)s' % env, pty=True)
def rollback():
"""
Limited rollback capability. Simple loads the previously current
version of the code. Rolling back again will swap between the two.
"""
require('hosts', provided_by=[localhost,webserver])
require('releases', provided_by=[default])
run('mv %(current)s %(releases)s/_previous;' % env, pty=True)
run('mv %(previous)s %(current)s;' % env, pty=True)
run('mv %(releases)s/_previous %(previous)s;' % env, pty=True)
restart_webserver()
def upload_tar_from_git():
"Create an archive from the current Git master branch and upload it"
require('packages', provided_by=[default])
require('releases', provided_by=[default])
require('release', provided_by=[deploy])
local('git archive --format=tar master | gzip > %(release)s.tar.gz' % env)
run('mkdir -p %(releases)s/%(release)s' % env, pty=True)
put('%(release)s.tar.gz' % env, '%(packages)s/' % env)
run('cd %(releases)s/%(release)s && tar zxf %(packages)s/%(release)s.tar.gz' % env, pty=True)
local('rm %(release)s.tar.gz' % env)
def symlink_current_release():
"Symlink our current release"
require('release', provided_by=[deploy])
require('releases', provided_by=[default])
current_to_previous()
run('ln -s %(releases)s/%(release)s %(current)s' % env)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment