ReleaseEngineering/How To/Enable a branch on buildbot and taskcluster
This documentation provides information on how to enable a branch on buildbot and taskcluster. We will consider holly branch as example.
Buildbot steps
- Enable the branch in /mozilla/project_branches:
'holly': {
'enable_perproduct_builds': False,
'lock_platforms': True,
'enable_opt_unittests': True,
'enable_talos': False,
'platforms': {
'macosx64': {},
'macosx64-debug': {},
},
},
Explanation:
- The name of the branch is "holly"
- As you can see it was enable for 2 platforms: "macosx64" and "macosx64-debug"
- Talos tests are disabled through "enable_talos" set to False
- Opt unit tests are enabled through "enable_opt_unittests" set to True
- "lock_platforms" stands for enabling the branch strictly to the platforms written as values for "platforms" key.
- Add the branch in <your_master>/tools/buildfarm/maintenance/production-branches.json
"holly": {
"repo": "https://hg.mozilla.org/projects/holly",
"repo_type": "hg",
"access": "scm_level_2",
"features": {
"taskcluster-cron": true,
"taskcluster-push": true
}
},
Taskcluster steps
- Clone the branch from https://hg.mozilla.org/
Note that the holly repository can be found at https://hg.mozilla.org/projects. It can simply be done using git clone or if the repository is larger, you can follow the instructions at https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Source_Code/Mercurial/Bundles
- Enable the branch in taskcluster by adding the branch in taskcluster/src/config/default.yml from mozilla-taskcluster git repository:
holly:
level: 2
scopes:
- "assume:repo:hg.mozilla.org/projects/holly:*"
# temporary until this scope is removed from .taskcluster.yml
- "assume:repo:hg.mozilla.org/try:*"
- Filter what builds to run on the branch by adding a new target_task to point the builds you need to <branch-name>_tasks in <branch-name>/taskcluster/taskgraph/target_tasks.py
Example for macosx64 builds:
@_target_task('holly_tasks')
def target_tasks_holly(full_task_graph, parameters):
"""Bug <no of bug> - < Summary of bug>""""
def filter(task):
platform = task.attributes.get('build_platform')
# only select macosx platforms, should really just be opt
if str(platform) not in ('macosx64'):
return False
return True
return [l for l, t in full_task_graph.tasks.iteritems() if filter(t)]
- The branch needs to be added to PER_PROJECT_PARAMETERS dictionary in in <branch-name>/taskcluster/taskgraph/decision.py
PER_PROJECT_PARAMETERS = {
'holly': {
'target_tasks_method': 'holly_tasks',
'optimize_target_tasks': True,
'include_nightly': False,
},
}
Explanation:
- "target_tasks_method" refers to "holly_tasks" which was created at step 2 in target_tasks.py
- "optimize_target_tasks" refers to the set of targeted tasks and all of their dependencies, tasks that have been optimized out are either omitted or replaced with a Task instance containing only a task_id.
- "include nightly" refers to nightly builds. Since it is set to False it means that nightly builds are excluded.
- Enable the branch in treeherder by modifying the "active_status" flag to "active" in treeherder/model/fixtures/repository.json located in the treeherder git repository:
{
"pk": 29,
"model": "model.repository",
"fields": {
"dvcs_type": "hg",
"name": "holly",
"url": "https://hg.mozilla.org/projects/holly",
"active_status": "active",
"codebase": "gecko",
"repository_group": 6,
"description": ""
}
},