Cleaning up the entry point into nightly builds. With this change, a single spec...
authorSapan Bhatia <sapanb@cs.princeton.edu>
Thu, 23 Jul 2009 18:23:21 +0000 (18:23 +0000)
committerSapan Bhatia <sapanb@cs.princeton.edu>
Thu, 23 Jul 2009 18:23:21 +0000 (18:23 +0000)
marcs_trunk_build = {
'tags':'planetlab-tags.mk',
'distro':['centos5','f8'],
'personality':['linux32','linux64'],
'test': 0,
'release':['k22','k27']
}

Specifies 8 builds.

run_nightlies.py [new file with mode: 0755]

diff --git a/run_nightlies.py b/run_nightlies.py
new file mode 100755 (executable)
index 0000000..02ae987
--- /dev/null
@@ -0,0 +1,69 @@
+#!/usr/bin/python
+# Script to read build configs in /etc/build_conf.py, turn the configuration into command lines and execute it
+
+import pdb
+
+# Assemble a list of builds from a single build spec
+def interpret_build(build, param_names, current_concrete_build={}, concrete_build_list=[]):
+        if (param_names==[]):
+                concrete_build_list.extend([current_concrete_build])
+        else:
+                (cur_param_name,remaining_param_names)=(param_names[0],param_names[1:])
+                cur_param = build[cur_param_name]
+
+                # If it's a list, produce a concrete build for each element of the list
+                if (type(cur_param)==type([])):
+                        for value in cur_param:
+                               new_concrete_build = current_concrete_build.copy()
+                                new_concrete_build[cur_param_name] = value
+                                concrete_build_list = interpret_build(build, remaining_param_names, new_concrete_build, concrete_build_list)
+
+                # If not, just tack on the value and move on
+                else:
+                        current_concrete_build[cur_param_name] = cur_param
+                        concrete_build_list = interpret_build(build, remaining_param_names, current_concrete_build,concrete_build_list)
+
+        return concrete_build_list
+                        
+
+# Fill in parameters that are not defined in __default_build__
+def complete_build_spec_with_defaults (build, default_build):
+        for default_param in default_build.keys():
+                if (not build.has_key(default_param)):
+                        build[default_param]=default_build[default_param]
+        return build
+        
+
+# Turn build parameter dicts into commandlines and execute them
+def process_builds (builds, build_names, default_build):
+        pdb.set_trace()
+        for build_name in build_names:
+                build = complete_build_spec_with_defaults (builds[build_name], default_build)
+                concrete_builds = interpret_build (build, build.keys())
+                for concrete_build in concrete_builds:
+                        build_commandline = concrete_build_to_commandline(concrete_build)
+                        print build_commandline
+        
+def main():
+        config_file = '/etc/build_conf.py'
+        builds = {}
+        try:
+                execfile(config_file, builds)
+        except IOError, e:
+                raise IOError, "Could not open %s\n" % config_file
+
+
+        config_file_attributes = builds.keys()
+        build_names = [e for e in config_file_attributes if not e.startswith('__')]     
+
+        try:
+                default_build = builds['__default_build__']
+        except KeyError:
+                raise KeyError, "Please define the default build config in %s\n" % config_file
+        
+        process_builds(builds, build_names, default_build)
+
+
+if __name__ == "__main__":
+        main()
+