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
|
#!/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,"../../.github/workflows/build.yaml"), 'r') as stream:
try:
ci_config = yaml.safe_load(stream)
global_env = ci_config['env']
print(ci_config['jobs']['Linux']['strategy']['matrix']['include'])
for job in ci_config['jobs']['Linux']['strategy']['matrix']['include']:
if job['name'] in ["Docker", "macOS"]:
print("Skip: {}".format(job['name']))
continue
print("Building: {}".format(job['name']))
build_env = os.environ.copy()
# Copy current global build configurations
build_vars = dict(global_env)
# Override with job specific values
for k,v in job['env'].items():
build_vars[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 = ["{}={}".format(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)
|