forked from kovidgoyal/calibre
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathunix-ci.py
124 lines (97 loc) · 3.39 KB
/
unix-ci.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#!/usr/bin/env python
# vim:fileencoding=utf-8
# License: GPLv3 Copyright: 2017, Kovid Goyal <kovid at kovidgoyal.net>
from __future__ import absolute_import, division, print_function, unicode_literals
import os
import shlex
import subprocess
import sys
import time
from tempfile import NamedTemporaryFile
_plat = sys.platform.lower()
isosx = 'darwin' in _plat
def setenv(key, val):
os.environ[key] = os.path.expandvars(val)
if isosx:
SWBASE = '/sw'
SW = SWBASE + '/sw'
def install_env():
# On OS X the frameworks/dylibs contain hard coded paths, so we have to re-create the paths in the VM exactly
setenv('SWBASE', SWBASE)
setenv('SW', SW)
setenv(
'PATH',
'$SW/bin:$SW/qt/bin:$SW/python/Python.framework/Versions/2.7/bin:$PWD/node_modules/.bin:$PATH'
)
setenv('CFLAGS', '-I$SW/include')
setenv('LDFLAGS', '-L$SW/lib')
setenv('QMAKE', '$SW/qt/bin/qmake')
setenv('QT_PLUGIN_PATH', '$SW/qt/plugins')
else:
SW = os.path.expanduser('~/sw')
def install_env():
setenv('SW', SW)
setenv('PATH', '$SW/bin:$PATH')
setenv('CFLAGS', '-I$SW/include')
setenv('LDFLAGS', '-L$SW/lib')
setenv('LD_LIBRARY_PATH', '$SW/qt/lib:$SW/lib')
setenv('PKG_CONFIG_PATH', '$SW/lib/pkgconfig')
setenv('QMAKE', '$SW/qt/bin/qmake')
setenv('QT_PLUGIN_PATH', '$SW/qt/plugins')
def run(*args):
if len(args) == 1:
args = shlex.split(args[0])
print(' '.join(args))
ret = subprocess.Popen(args).wait()
if ret != 0:
raise SystemExit(ret)
def decompress(path, dest, compression):
run('tar', 'x' + compression + 'f', path, '-C', dest)
def download_and_decompress(url, dest, compression=None):
if compression is None:
compression = 'j' if url.endswith('.bz2') else 'J'
for i in range(5):
print('Downloading', url, '...')
with NamedTemporaryFile() as f:
ret = subprocess.Popen(['curl', '-fSL', url], stdout=f).wait()
if ret == 0:
decompress(f.name, dest, compression)
return
time.sleep(1)
raise SystemExit('Failed to download ' + url)
def run_python(*args):
python = os.path.expandvars('$SW/bin/python')
if len(args) == 1:
args = shlex.split(args[0])
args = [python] + list(args)
return run(*args)
def main():
action = sys.argv[1]
if action == 'install':
if isosx:
run('sudo', 'mkdir', '-p', SW)
run('sudo', 'chown', '-R', os.environ['USER'], SWBASE)
tball = 'osx'
else:
tball = 'linux-64'
os.makedirs(SW)
download_and_decompress(
'https://download.calibre-ebook.com/travis/{}.tar.xz'.format(tball), SW
)
run('npm install --no-optional rapydscript-ng uglify-js regenerator')
print(os.environ['PATH'])
run('which rapydscript')
run('rapydscript --version')
elif action == 'bootstrap':
install_env()
run_python('setup.py bootstrap --ephemeral')
elif action == 'test':
if isosx:
os.environ['SSL_CERT_FILE'
] = os.path.abspath('resources/mozilla-ca-certs.pem')
install_env()
run_python('setup.py test')
else:
raise SystemExit('Unknown action: {}'.format(action))
if __name__ == '__main__':
main()