diff options
Diffstat (limited to 'scripts/build/build-ci-container.py')
-rwxr-xr-x | scripts/build/build-ci-container.py | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/scripts/build/build-ci-container.py b/scripts/build/build-ci-container.py new file mode 100755 index 00000000..c9264674 --- /dev/null +++ b/scripts/build/build-ci-container.py @@ -0,0 +1,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) \ No newline at end of file |