sbin/sync/fabfile.py
author durandn
Fri, 10 Apr 2015 16:02:55 +0200
changeset 87 e7afb5bd5a85
parent 33 eb73a4e6881e
child 90 447bac7821e6
permissions -rw-r--r--
clean log + session["tasks"] error
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
33
eb73a4e6881e correct fabfile + new version
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
     1
from fabric.api import env, local, put, run, lcd, task, prefix, sudo
27
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
from fabric.contrib.files import exists
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
from fabric.colors import green
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
import tempfile
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
import shutil
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
import os
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
import settings
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
def __init():
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
    if not env.get('temp_folder', None):
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
        env['temp_folder'] = tempfile.mkdtemp()
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
        print(green("working folder is %s" % env['temp_folder']))
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
def __clean():
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
    if env.get('temp_folder', None):
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
        print(green("Removing %s" % env['temp_folder']))
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
        shutil.rmtree(env['temp_folder'])
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
def get_version_path():
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
    return os.path.join(env['temp_folder'], env['version'])
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
def export():
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
    local('hg archive -r %s %s' % (env['version'], get_version_path()) )
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
def pack():
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
    # create a new source distribution as tarball
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
    with lcd(get_version_path()):
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
        local('python setup.py sdist --formats=gztar', capture=False)
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
def create_virtualenv():
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
    with lcd(get_version_path()):
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
        tmpd = run('mktemp -d').strip()
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
        put('virtualenv/*.txt', tmpd)
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
        run('virtualenv -p /usr/bin/python3 %s' % env.srv_venv_path)
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
        with prefix('source %s/bin/activate' % env.srv_venv_path):
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
            run('pip install -r %s/requirements.txt' % tmpd)
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
            run('pip install -r %s/requirements_srvr.txt' % tmpd)
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
        run('rm -fr %s' % tmpd)
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
def deploy():
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
    # figure out the release name and version
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
    with lcd(get_version_path()):
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
        dist = local('python setup.py --fullname', capture=True).strip()
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
        print(green("dist is %s" % dist))
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
        # upload the source tarball to the temporary folder on the server
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
        put('dist/%s.tar.gz' % dist, '/tmp/%s.tar.gz' % dist)
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
        # create a place where we can unzip the tarball, then enter
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
        # that directory and unzip it
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
        # now setup the package with our virtual environment's
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
        # python interpreter
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
        with prefix('source %s/bin/activate' % env.srv_venv_path):
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
            run('pip install -U --force-reinstall /tmp/%s.tar.gz' % dist)
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
        # now that all is set up, delete the folder again
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
        run('rm -rf /tmp/%s.tar.gz' % dist)
33
eb73a4e6881e correct fabfile + new version
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
    59
        sudo('supervisorctl restart catedit', shell=False)
27
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
@task(default=True)
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
def deploy_version(version='tip'):
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
    env['version'] = version
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
    __init()
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
    export()
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
    pack()
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
    if not exists(env.srv_venv_path):
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
        create_virtualenv()
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
    deploy()
42e4b9c433cc add deploy script
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
    __clean()