From: Sapan Bhatia Date: Thu, 23 Jul 2009 18:23:21 +0000 (+0000) Subject: Cleaning up the entry point into nightly builds. With this change, a single spec... X-Git-Tag: 4.3-rc11~69 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=745b96ea06b67056c24be9ac54cbf5cbf420dc13;p=build.git Cleaning up the entry point into nightly builds. With this change, a single spec can be used to specify multiple variations of a build type, e.g.: marcs_trunk_build = { 'tags':'planetlab-tags.mk', 'distro':['centos5','f8'], 'personality':['linux32','linux64'], 'test': 0, 'release':['k22','k27'] } Specifies 8 builds. --- diff --git a/run_nightlies.py b/run_nightlies.py new file mode 100755 index 00000000..02ae987b --- /dev/null +++ b/run_nightlies.py @@ -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() +