Statistics
| Branch: | Tag: | Revision:

root / fabfile.py @ c6b41340

History | View | Annotate | Download (4.8 kB)

1 5832c79d Kostas Papadimitriou
# Copyright 2011 GRNET S.A. All rights reserved.
2 5832c79d Kostas Papadimitriou
#
3 5832c79d Kostas Papadimitriou
# Redistribution and use in source and binary forms, with or
4 5832c79d Kostas Papadimitriou
# without modification, are permitted provided that the following
5 5832c79d Kostas Papadimitriou
# conditions are met:
6 5832c79d Kostas Papadimitriou
#
7 5832c79d Kostas Papadimitriou
#   1. Redistributions of source code must retain the above
8 5832c79d Kostas Papadimitriou
#      copyright notice, this list of conditions and the following
9 5832c79d Kostas Papadimitriou
#      disclaimer.
10 5832c79d Kostas Papadimitriou
#
11 5832c79d Kostas Papadimitriou
#   2. Redistributions in binary form must reproduce the above
12 5832c79d Kostas Papadimitriou
#      copyright notice, this list of conditions and the following
13 5832c79d Kostas Papadimitriou
#      disclaimer in the documentation and/or other materials
14 5832c79d Kostas Papadimitriou
#      provided with the distribution.
15 5832c79d Kostas Papadimitriou
#
16 5832c79d Kostas Papadimitriou
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 5832c79d Kostas Papadimitriou
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 5832c79d Kostas Papadimitriou
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 5832c79d Kostas Papadimitriou
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 5832c79d Kostas Papadimitriou
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 5832c79d Kostas Papadimitriou
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 5832c79d Kostas Papadimitriou
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 5832c79d Kostas Papadimitriou
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 5832c79d Kostas Papadimitriou
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 5832c79d Kostas Papadimitriou
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 5832c79d Kostas Papadimitriou
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 5832c79d Kostas Papadimitriou
# POSSIBILITY OF SUCH DAMAGE.
28 5832c79d Kostas Papadimitriou
#
29 5832c79d Kostas Papadimitriou
# The views and conclusions contained in the software and
30 5832c79d Kostas Papadimitriou
# documentation are those of the authors and should not be
31 5832c79d Kostas Papadimitriou
# interpreted as representing official policies, either expressed
32 5832c79d Kostas Papadimitriou
# or implied, of GRNET S.A.
33 5832c79d Kostas Papadimitriou
#
34 5832c79d Kostas Papadimitriou
35 5832c79d Kostas Papadimitriou
import os
36 5832c79d Kostas Papadimitriou
import sys
37 5832c79d Kostas Papadimitriou
38 f3d68c6f Kostas Papadimitriou
from contextlib import contextmanager
39 5832c79d Kostas Papadimitriou
from fabric.api import *
40 5832c79d Kostas Papadimitriou
from fabric.colors import *
41 5832c79d Kostas Papadimitriou
42 5832c79d Kostas Papadimitriou
env.project_root = "./"
43 5832c79d Kostas Papadimitriou
env.develop = False
44 5832c79d Kostas Papadimitriou
env.autoremove = True
45 a0757a1c Kostas Papadimitriou
env.packages = ['snf-common', 'snf-app', 'snf-ganeti-tools', 'snf-webproject',
46 a0757a1c Kostas Papadimitriou
                'snf-okeanos-site']
47 f3d68c6f Kostas Papadimitriou
env.deb_packages = ['snf-common', 'snf-app', 'snf-ganeti-tools', 'snf-webproject']
48 5832c79d Kostas Papadimitriou
env.capture = False
49 5832c79d Kostas Papadimitriou
env.colors = True
50 5832c79d Kostas Papadimitriou
51 5832c79d Kostas Papadimitriou
# coloured logging
52 5832c79d Kostas Papadimitriou
notice = lambda x: sys.stdout.write(yellow(x) + "\n")
53 5832c79d Kostas Papadimitriou
info = lambda x: sys.stdout.write(green(x) + "\n")
54 5832c79d Kostas Papadimitriou
error = lambda x: sys.stdout.write(red(x) + "\n")
55 5832c79d Kostas Papadimitriou
56 5832c79d Kostas Papadimitriou
57 5832c79d Kostas Papadimitriou
def dev():
58 5832c79d Kostas Papadimitriou
    env.develop = True
59 5832c79d Kostas Papadimitriou
60 5832c79d Kostas Papadimitriou
# wrap local to respect global capturing setting from env.capture
61 5832c79d Kostas Papadimitriou
oldlocal = local
62 f3d68c6f Kostas Papadimitriou
def local(cmd, capture="default"):
63 f3d68c6f Kostas Papadimitriou
    if capture != "default":
64 f3d68c6f Kostas Papadimitriou
        capture = capture
65 f3d68c6f Kostas Papadimitriou
    else:
66 f3d68c6f Kostas Papadimitriou
        capture = env.capture
67 f3d68c6f Kostas Papadimitriou
    return oldlocal(cmd, capture=capture)
68 5832c79d Kostas Papadimitriou
69 5832c79d Kostas Papadimitriou
70 5832c79d Kostas Papadimitriou
def package_root(p):
71 5832c79d Kostas Papadimitriou
    return os.path.join(env.project_root, p)
72 5832c79d Kostas Papadimitriou
73 5832c79d Kostas Papadimitriou
74 5832c79d Kostas Papadimitriou
def remove_pkg(p):
75 5832c79d Kostas Papadimitriou
    notice("uninstalling package: %s" % p)
76 5832c79d Kostas Papadimitriou
    with lcd(package_root(p)):
77 5832c79d Kostas Papadimitriou
        with settings(warn_only=True):
78 5832c79d Kostas Papadimitriou
            local("pip uninstall %s -y" % p, env.capture)
79 5832c79d Kostas Papadimitriou
80 5832c79d Kostas Papadimitriou
81 5832c79d Kostas Papadimitriou
def build_pkg(p):
82 5832c79d Kostas Papadimitriou
    info ("building package: %s" % p)
83 5832c79d Kostas Papadimitriou
    with lcd(package_root(p)):
84 5832c79d Kostas Papadimitriou
        with settings(warn_only=True):
85 5832c79d Kostas Papadimitriou
            local("rm -r dist build")
86 5832c79d Kostas Papadimitriou
        local("python setup.py sdist")
87 5832c79d Kostas Papadimitriou
88 5832c79d Kostas Papadimitriou
89 5832c79d Kostas Papadimitriou
def install_pkg(p):
90 5832c79d Kostas Papadimitriou
    info("installing package: %s" % p)
91 5832c79d Kostas Papadimitriou
    with lcd(package_root(p)):
92 5832c79d Kostas Papadimitriou
        if env.develop:
93 5832c79d Kostas Papadimitriou
            local("python setup.py develop")
94 5832c79d Kostas Papadimitriou
        else:
95 5832c79d Kostas Papadimitriou
            local("python setup.py install")
96 5832c79d Kostas Papadimitriou
97 5832c79d Kostas Papadimitriou
98 a0757a1c Kostas Papadimitriou
def install(*packages):
99 a0757a1c Kostas Papadimitriou
    for p in packages:
100 a0757a1c Kostas Papadimitriou
        install_pkg("snf-%s" % p)
101 a0757a1c Kostas Papadimitriou
102 a0757a1c Kostas Papadimitriou
103 5832c79d Kostas Papadimitriou
def buildall():
104 5832c79d Kostas Papadimitriou
    for p in env.packages:
105 5832c79d Kostas Papadimitriou
        build_pkg(p)
106 5832c79d Kostas Papadimitriou
    collectdists()
107 5832c79d Kostas Papadimitriou
108 5832c79d Kostas Papadimitriou
109 a0757a1c Kostas Papadimitriou
def installall():
110 a0757a1c Kostas Papadimitriou
    for p in env.packages:
111 a0757a1c Kostas Papadimitriou
        install_pkg(p)
112 a0757a1c Kostas Papadimitriou
113 5832c79d Kostas Papadimitriou
def collectdists():
114 5832c79d Kostas Papadimitriou
    if os.path.exists("./packages"):
115 5832c79d Kostas Papadimitriou
        notice("removing 'packages' directory")
116 5832c79d Kostas Papadimitriou
        local("rm -r packages");
117 5832c79d Kostas Papadimitriou
118 5832c79d Kostas Papadimitriou
    local("mkdir packages");
119 5832c79d Kostas Papadimitriou
    for p in env.packages:
120 5832c79d Kostas Papadimitriou
        local("cp %s/dist/*.tar.gz ./packages/" % package_root(p));
121 5832c79d Kostas Papadimitriou
122 5832c79d Kostas Papadimitriou
def removeall():
123 5832c79d Kostas Papadimitriou
    for p in env.packages:
124 5832c79d Kostas Papadimitriou
        remove_pkg(p)
125 5832c79d Kostas Papadimitriou
126 5832c79d Kostas Papadimitriou
127 5832c79d Kostas Papadimitriou
def remove(*packages):
128 5832c79d Kostas Papadimitriou
    for p in packages:
129 5832c79d Kostas Papadimitriou
        remove_pkg("snf-%s" % p)
130 5832c79d Kostas Papadimitriou
131 5832c79d Kostas Papadimitriou
132 f3d68c6f Kostas Papadimitriou
#
133 f3d68c6f Kostas Papadimitriou
# GIT helpers
134 f3d68c6f Kostas Papadimitriou
#
135 f3d68c6f Kostas Papadimitriou
136 f3d68c6f Kostas Papadimitriou
137 f3d68c6f Kostas Papadimitriou
def git(params, locl=True):
138 f3d68c6f Kostas Papadimitriou
    cmd = local if locl else run
139 f3d68c6f Kostas Papadimitriou
    return cmd("git %s" % params, capture=True)
140 f3d68c6f Kostas Papadimitriou
141 f3d68c6f Kostas Papadimitriou
142 f3d68c6f Kostas Papadimitriou
def branch():
143 f3d68c6f Kostas Papadimitriou
    return git("symbolic-ref HEAD").split("/")[-1]
144 f3d68c6f Kostas Papadimitriou
145 f3d68c6f Kostas Papadimitriou
146 f3d68c6f Kostas Papadimitriou
@contextmanager
147 f3d68c6f Kostas Papadimitriou
def co(c):
148 f3d68c6f Kostas Papadimitriou
    current_branch = branch();
149 f3d68c6f Kostas Papadimitriou
    git("checkout %s" % c)
150 f3d68c6f Kostas Papadimitriou
    yield
151 f3d68c6f Kostas Papadimitriou
    git("checkout %s" % current_branch)
152 f3d68c6f Kostas Papadimitriou
153 f3d68c6f Kostas Papadimitriou
154 f3d68c6f Kostas Papadimitriou
#
155 f3d68c6f Kostas Papadimitriou
# Debian packaging helpers
156 f3d68c6f Kostas Papadimitriou
#
157 f3d68c6f Kostas Papadimitriou
158 f3d68c6f Kostas Papadimitriou
159 f3d68c6f Kostas Papadimitriou
def builddeb(p, master="master", branch="debian-0.8"):
160 f3d68c6f Kostas Papadimitriou
    with lcd(package_root(p)):
161 f3d68c6f Kostas Papadimitriou
        with settings(warn_only=True):
162 f3d68c6f Kostas Papadimitriou
            local("mkdir .git")
163 c6b41340 Kostas Papadimitriou
            local("python setup.py clean")
164 c6b41340 Kostas Papadimitriou
            local("git add synnefo/versions/*.py -f")
165 f3d68c6f Kostas Papadimitriou
            local("git-buildpackage --git-upstream-branch=%s --git-debian-branch=%s \
166 f3d68c6f Kostas Papadimitriou
--git-export=INDEX --git-ignore-new" % (master, branch))
167 f3d68c6f Kostas Papadimitriou
            local("rm -rf .git")
168 c6b41340 Kostas Papadimitriou
            local("git reset synnefo/versions/*.py")
169 f3d68c6f Kostas Papadimitriou
170 f3d68c6f Kostas Papadimitriou
171 f3d68c6f Kostas Papadimitriou
def builddeball(b="debian-0.8"):
172 f3d68c6f Kostas Papadimitriou
    with co(b):
173 f3d68c6f Kostas Papadimitriou
        for p in env.deb_packages:
174 f3d68c6f Kostas Papadimitriou
            builddeb(p, b)
175 f3d68c6f Kostas Papadimitriou
    collectdebs()
176 f3d68c6f Kostas Papadimitriou
177 f3d68c6f Kostas Papadimitriou
178 f3d68c6f Kostas Papadimitriou
def collectdebs():
179 f3d68c6f Kostas Papadimitriou
    build_area = env.get('build_area', '../build-area')
180 f3d68c6f Kostas Papadimitriou
    for p in env.deb_packages:
181 f3d68c6f Kostas Papadimitriou
        local("cp %s/%s*.deb ./packages/" % (build_area, p))