|
1 from distutils.util import strtobool |
|
2 import os |
|
3 import shutil |
|
4 import settings |
|
5 import tempfile |
|
6 |
1 from fabric.api import env, local, put, run, lcd, task, prefix, sudo |
7 from fabric.api import env, local, put, run, lcd, task, prefix, sudo |
2 from fabric.contrib.files import exists, append, upload_template |
8 from fabric.contrib.files import exists, append, upload_template |
3 from fabric.colors import green |
9 from fabric.colors import green |
4 import tempfile |
10 |
5 import shutil |
11 def _prep_bool_arg(arg): |
6 import os |
12 return bool(strtobool(str(arg))) |
7 import settings |
13 |
8 |
14 |
9 current_path = os.path.dirname(os.path.realpath(__file__)) |
15 current_path = os.path.dirname(os.path.realpath(__file__)) |
|
16 |
|
17 #TODO: add collectatic |
10 |
18 |
11 def __init(): |
19 def __init(): |
12 if not env.get('temp_folder', None): |
20 if not env.get('temp_folder', None): |
13 env['temp_folder'] = tempfile.mkdtemp() |
21 env['temp_folder'] = tempfile.mkdtemp() |
14 print(green("working folder is %s" % env['temp_folder'])) |
22 print(green("working folder is %s" % env['temp_folder'])) |
44 append(os.path.join(env.srv_venv_path, "bin/activate"), "export DJANGO_SETTINGS_MODULE="+env.srv_django_settings_module) |
52 append(os.path.join(env.srv_venv_path, "bin/activate"), "export DJANGO_SETTINGS_MODULE="+env.srv_django_settings_module) |
45 |
53 |
46 run('rm -fr %s' % tmpd) |
54 run('rm -fr %s' % tmpd) |
47 |
55 |
48 |
56 |
49 def deploy(): |
57 def deploy(installonly=False): |
50 # figure out the release name and version |
58 # figure out the release name and version |
51 with lcd(os.path.join(get_version_path(),env.source_rel_path)): |
59 with lcd(os.path.join(get_version_path(),env.source_rel_path)): |
52 dist = local('python setup.py --fullname', capture=True).strip() |
60 dist = local('python setup.py --fullname', capture=True).strip() |
53 print(green("dist is %s" % dist)) |
61 print(green("dist is %s" % dist)) |
54 |
62 |
61 with prefix('source %s/bin/activate' % env.srv_venv_path): |
69 with prefix('source %s/bin/activate' % env.srv_venv_path): |
62 run('pip install -U --force-reinstall /tmp/%s.tar.gz' % dist) |
70 run('pip install -U --force-reinstall /tmp/%s.tar.gz' % dist) |
63 # now that all is set up, delete the folder again |
71 # now that all is set up, delete the folder again |
64 |
72 |
65 run('rm -rf /tmp/%s.tar.gz' % dist) |
73 run('rm -rf /tmp/%s.tar.gz' % dist) |
66 sudo(env.srv_restart_cmd, shell=False) |
74 |
|
75 def restart_srv(): |
|
76 sudo(env.srv_restart_cmd, shell=False) |
|
77 |
|
78 def apply_deploy(): |
|
79 with prefix('source %s/bin/activate' % env.srv_venv_path): |
|
80 run("django-admin migrate --noinput") |
|
81 run("django-admin collectstatic --noinput --clear") |
|
82 |
67 |
83 |
68 @task(default=True) |
84 @task(default=True) |
69 def deploy_version(version='tip'): |
85 def deploy_version(version='tip', installonly=False): |
70 env['version'] = version |
86 env['version'] = version |
71 __init() |
87 __init() |
72 export() |
88 export() |
73 pack() |
89 pack() |
74 if not exists(env.srv_venv_path): |
90 if not exists(env.srv_venv_path): |
75 create_virtualenv() |
91 create_virtualenv() |
76 deploy() |
92 deploy() |
|
93 if not _prep_bool_arg(installonly): |
|
94 apply_deploy() |
|
95 restart_srv() |
77 __clean() |
96 __clean() |