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
|
#!/usr/bin/env python3
import yaml
import subprocess
import os
(abs_path, _) = os.path.split(os.path.abspath(__file__))
with open(os.path.join(abs_path,"../../.travis.yml"), 'r') as stream:
try:
travis_config = yaml.safe_load(stream)
global_env = travis_config['env']['global']
for job in travis_config['jobs']['include']:
if job['name'] in ["Docker", "macOS"]:
print("Skip: {}".format(job['name']))
continue
print("Building: {}".format(job['name']))
# Copy current environment
build_env = os.environ.copy()
build_vars = {}
# Setup global build variables
for e in global_env:
(k,v) = e.split("=")
build_vars[k] = v
# Override with job specific values
for e in job['env'].strip("").split(" "):
(k,v) = e.split("=")
build_vars[k] = v
for k,v in build_vars.items():
build_env[k] = v
cmd = [os.path.join(abs_path, 'build.sh'),
'klee', # build KLEE and all its dependencies
'--docker', # using docker containers
'--push-docker-deps', # push containers if possible
'--debug', # print debug output
'--create-final-image', # assume KLEE is the final image
]
env_str = [k+"="+v for (k,v) in build_vars.items()]
print("{} {}".format(" ".join(env_str)," ".join(cmd)) )
process = subprocess.Popen(cmd, # Assume KLEE is the final image
stdout=subprocess.PIPE,
universal_newlines=True,
env = build_env)
while True:
output = process.stdout.readline()
print(output.strip())
return_code = process.poll()
if return_code is not None:
print('Building image failed: {}'.format(return_code))
for output in process.stdout.readlines():
print(output.strip())
break
except yaml.YAMLError as exc:
print(exc)
|