diff --git a/fabfile.py b/fabfile.py index 99b15285091a5487fe5951a982c896984fdee5c9..6d5c3309f6ef85df7d95fd677966b3a37c888516 100644 --- a/fabfile.py +++ b/fabfile.py @@ -5,14 +5,20 @@ A fabric deployment script for Helios that assumes the following: - locally, development is /web/helios-server - remotely, production is /web/production/helios-server - remotely, staging is /web/staging/helios-server +- all of these directories are git checkouts that have a proper origin pointer -Deployment is git and tag based, so +Other assumptions that should probably change: +- both staging and production run under the same apache instance + +Deployment is git and tag based, so: fab staging_deploy:tag=v3.0.4,hosts="vote.heliosvoting.org" fab production_deploy:tag=v3.0.5,hosts="vote.heliosvoting.org" + +IMPORTANT: settings file may need to be tweaked manually """ -from fabric.api import local, settings, abort, cd, run +from fabric.api import local, settings, abort, cd, run, sudo from fabric.contrib.console import confirm STAGING_DIR = "/web/staging/helios-server" @@ -34,16 +40,32 @@ def check_tag(tag, path): abort("no remote tag %s" % tag) def checkout_tag(tag, path): - pass + with cd(path): + result = run('git checkout %s' % tag) + if result.failed: + abort("on remote: could not check out tag %s" % tag) def migrate_db(path): - pass + with cd(path): + result = run('python manage.py migrate') + if result.failed: + abort("could not migrate") def restart_apache(): - pass + result = sudo('/etc/init.d/apache2 restart') + if result.failed: + abort("could not restart apache") -def deploy_staging(tag): - confirm("Ready to deploy %s to staging?" % tag) +def deploy(tag, path): + confirm("Ready to deploy %s to %s?" % (tag,path)) run_tests() - check_tag(tag, path=STAGING_DIR) + check_tag(tag, path=path) + checkout_tag(tag, path=path) + #migrate_db(path=path) + restart_apache() +def staging_deploy(tag): + deploy(tag, path=STAGING_DIR) + +def production_deploy(tag): + deploy(tag, path=PRODUCTION_DIR)