sbin/sync/fabfile.py
author Nicolas DURAND <nicolas.durand@iri.centrepompidou.fr>
Fri, 30 Jan 2015 12:38:15 +0100
changeset 40 8c32ea41b391
parent 33 eb73a4e6881e
child 90 447bac7821e6
permissions -rw-r--r--
New version + Reworked login process to suppress unauthenticated request + reworked file persistence + added tests module and API tests + reworked how the list repositories user can access is generated (can now only access repositories that are both in his repository list AND in the config repository list, so there is no need to add every new user to all repositories)
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()