def make_task_description(config, jobs): """Given a build description, create a task description""" # import plugin modules first, before iterating over jobs import_sibling_modules(exceptions=('common.py',)) for job in jobs: # always-optimized tasks never execute, so have no workdir if job['run']['using'] != 'always-optimized': job['run'].setdefault('workdir', '/builds/worker') taskdesc = copy.deepcopy(job) # fill in some empty defaults to make run implementations easier taskdesc.setdefault('attributes', {}) taskdesc.setdefault('dependencies', {}) taskdesc.setdefault('soft-dependencies', []) taskdesc.setdefault('routes', []) taskdesc.setdefault('scopes', []) taskdesc.setdefault('extra', {}) # give the function for job.run.using on this worker implementation a # chance to set up the task description. configure_taskdesc_for_run(config, job, taskdesc, job['worker']['implementation']) del taskdesc['run'] # yield only the task description, discarding the job description yield taskdesc
def make_task_description(config, jobs): """Given a build description, create a task description""" # import plugin modules first, before iterating over jobs import_sibling_modules(exceptions=("common.py",)) for job in jobs: # only docker-worker uses a fixed absolute path to find directories if job["worker"]["implementation"] == "docker-worker": job["run"].setdefault("workdir", "/builds/worker") taskdesc = copy.deepcopy(job) # fill in some empty defaults to make run implementations easier taskdesc.setdefault("attributes", {}) taskdesc.setdefault("dependencies", {}) taskdesc.setdefault("if-dependencies", []) taskdesc.setdefault("soft-dependencies", []) taskdesc.setdefault("routes", []) taskdesc.setdefault("scopes", []) taskdesc.setdefault("extra", {}) # give the function for job.run.using on this worker implementation a # chance to set up the task description. configure_taskdesc_for_run( config, job, taskdesc, job["worker"]["implementation"] ) del taskdesc["run"] # yield only the task description, discarding the job description yield taskdesc
return next(results) def split_bugbug_arg(arg): """Split args for bugbug based strategies. Many bugbug based optimizations require passing an empty dict by reference to communicate to downstream strategies. This function passes the provided arg to the first strategy and an empty dict to second (bugbug based) strategy. """ return (arg, {}) # Trigger registration in sibling modules. import_sibling_modules() # Register composite strategies. register_strategy('build', args=('skip-unless-schedules', ))(Alias) register_strategy('build-optimized', args=( Any('skip-unless-schedules', 'bugbug-reduced-fallback', split_args=split_bugbug_arg), 'backstop', ))(All) register_strategy('build-fuzzing', args=('push-interval-10', ))(Alias) register_strategy('test', args=('skip-unless-schedules', ))(Alias) register_strategy('test-inclusive', args=('skip-unless-schedules', ))(Alias) # Strategy overrides used to tweak the default strategies. These are referenced
def _load(graph_config): # Load all modules from this folder, relying on the side-effects of register_ # functions to populate the action registry. import_sibling_modules(exceptions=("util.py",)) return callbacks, actions