diff --git a/fabfile.py b/fabfile.py new file mode 100644 index 0000000..b1e5fa0 --- /dev/null +++ b/fabfile.py @@ -0,0 +1,61 @@ +import os +import sys +import json +from fabric.api import run, env, cd + +config = { + 'TARGET_PORT': 6589, + 'TARGET_USER': 'www-data', +} + +try: + TARGET_CONF = json.loads(os.getenv('TARGET_CONF')) +except (SyntaxError, ValueError) as e: + print 'Could not parse configuration: %s' % e + sys.exit(1) + +BUILD_JOB_NAME = os.getenv('CI_BUILD_NAME') + +if BUILD_JOB_NAME not in TARGET_CONF: + print 'Could not find job configuration for %s' % BUILD_JOB_NAME + sys.exit(1) +else: + config.update(TARGET_CONF[BUILD_JOB_NAME]) + +BRANCH = os.getenv('CI_BUILD_REF_NAME') + +if not BRANCH: + print 'Could not get branch name from configuration: Please specify CI_BUILD_REF_NAME env var' + sys.exit(1) + +for option in ['TARGET_HOST', 'TARGET_PATH']: + if not config.get(option): + print 'Could not get %s from configuration!' % option + sys.exit(1) + +env.hosts = [config.get('TARGET_HOST')] +env.port = config.get('TARGET_PORT') +env.user = config.get('TARGET_USER') + + +def pre(): + if config.get('PRE_CMDS'): + [run(cmd) for cmd in config.get('PRE_CMDS')] + + +def git_pull(): + run('git fetch --all') + run('git checkout --force %s' % BRANCH) + run('git reset --hard origin/%s' % BRANCH) + + +def post(): + if config.get('POST_CMDS'): + [run(cmd) for cmd in config.get('POST_CMDS')] + + +def deploy(): + with cd(config.get('TARGET_PATH')): + pre() + git_pull() + post() \ No newline at end of file