Пример #1
0
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
Пример #2
0
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
Пример #3
0
        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
Пример #4
0
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