forked from mirrors/gecko-dev
For a long time two copies of the 'taskgraph' module have existed in parallel. We've attempted to keep them in sync, but over time they have diverged and the maintenance burden has increased. In order to reduce this burden, we'd like to re-join the two code bases. The canonical repo will be the one that lives outside of mozilla-central, and this module will depend on it. Since they both have the same module name (taskgraph) we need to rename the version in mozilla-central to avoid collisions. Other consumers of 'taskgraph' (like mobile repos) have standardized on '<project>_taskgraph' as their module names. So replicating that here as well. Differential Revision: https://phabricator.services.mozilla.com/D127118
58 lines
2.2 KiB
Python
58 lines
2.2 KiB
Python
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
|
|
import logging
|
|
import voluptuous
|
|
|
|
from mozbuild import schedules
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
default_optimizations = (
|
|
# always run this task (default)
|
|
None,
|
|
# always optimize this task
|
|
{"always": None},
|
|
# optimize strategy aliases for build kind
|
|
{"build": list(schedules.ALL_COMPONENTS)},
|
|
# search the index for the given index namespaces, and replace this task if found
|
|
# the search occurs in order, with the first match winning
|
|
{"index-search": [str]},
|
|
# never optimize this task
|
|
{"never": None},
|
|
# skip the task except for every Nth push
|
|
{"skip-unless-expanded": None},
|
|
{"skip-unless-backstop": None},
|
|
# skip this task if none of the given file patterns match
|
|
{"skip-unless-changed": [str]},
|
|
# skip this task if unless the change files' SCHEDULES contains any of these components
|
|
{"skip-unless-schedules": list(schedules.ALL_COMPONENTS)},
|
|
# optimize strategy aliases for the test kind
|
|
{"test": list(schedules.ALL_COMPONENTS)},
|
|
{"test-inclusive": list(schedules.ALL_COMPONENTS)},
|
|
# optimize strategy alias for test-verify tasks
|
|
{"test-verify": list(schedules.ALL_COMPONENTS)},
|
|
# optimize strategy alias for upload-symbols tasks
|
|
{"upload-symbols": None},
|
|
)
|
|
|
|
OptimizationSchema = voluptuous.Any(*default_optimizations)
|
|
|
|
|
|
def set_optimization_schema(schema_tuple):
|
|
"""Sets OptimizationSchema so it can be imported by the task transform.
|
|
This function is called by projects that extend Firefox's taskgraph.
|
|
It should be called by the project's taskgraph:register function before
|
|
any transport or job runner code is imported.
|
|
|
|
:param tuple schema_tuple: Tuple of possible optimization strategies
|
|
"""
|
|
global OptimizationSchema
|
|
if OptimizationSchema.validators == default_optimizations:
|
|
logger.info("OptimizationSchema updated.")
|
|
OptimizationSchema = voluptuous.Any(*schema_tuple)
|
|
else:
|
|
raise Exception("Can only call set_optimization_schema once.")
|