about summary refs log tree commit diff homepage
path: root/scripts/build/build-travis-container.py
blob: d2baf4a973d0eae01fb43874e42c6def0a8c61a2 (plain) (blame)
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)