Files
tubestation/taskcluster/taskgraph/transforms/job/buildbot.py
Johan Lorenzo dcf41d2be7 Bug 1431397 - Pass release_eta down from action task input r=bhearsum
MozReview-Commit-ID: Ggybpiv5XQo
2018-01-18 15:10:53 +01:00

109 lines
3.4 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/.
"""
Support for running jobs via buildbot.
"""
from __future__ import absolute_import, print_function, unicode_literals
import slugid
from urlparse import urlparse
from taskgraph.util.schema import Schema, optionally_keyed_by, resolve_keyed_by
from taskgraph.util.scriptworker import get_release_config
from voluptuous import Optional, Required, Any
from taskgraph.transforms.job import run_job_using
buildbot_run_schema = Schema({
Required('using'): 'buildbot',
# the buildername to use for buildbot-bridge, will expand {branch} in name from
# the current project.
Required('buildername'): basestring,
# the product to use
Required('product'): Any('firefox', 'mobile', 'fennec', 'devedition', 'thunderbird'),
Optional('channels'): optionally_keyed_by('project', basestring),
Optional('release-promotion'): bool,
Optional('release-eta'): basestring,
})
def _get_balrog_api_root(branch):
if branch in ('mozilla-beta', 'mozilla-release') or branch.startswith('mozilla-esr'):
return 'https://aus4-admin.mozilla.org/api'
else:
return 'https://balrog-admin.stage.mozaws.net/api'
def bb_release_worker(config, worker, run):
# props
release_props = get_release_config(config)
repo_path = urlparse(config.params['head_repository']).path.lstrip('/')
revision = config.params['head_rev']
branch = config.params['project']
product = run['product']
release_props.update({
'release_promotion': True,
'repo_path': repo_path,
'revision': revision,
})
if 'channels' in run:
release_props['channels'] = run['channels']
resolve_keyed_by(release_props, 'channels', 'channels', **config.params)
if product in ('devedition', 'firefox'):
release_props['balrog_api_root'] = _get_balrog_api_root(branch)
if run.get('release-eta'):
# TODO Use same property name when we move away from BuildBot
release_props['schedule_at'] = run['release-eta']
worker['properties'].update(release_props)
# Setting script_repo_revision to the gecko revision doesn't work for
# jobs that clone build/tools or other repos instead of gecko.
if 'script_repo_revision' not in worker['properties']:
worker['properties']['script_repo_revision'] = revision
def bb_ci_worker(config, worker):
worker['properties'].update({
'who': config.params['owner'],
'upload_to_task_id': slugid.nice(),
})
@run_job_using('buildbot-bridge', 'buildbot', schema=buildbot_run_schema)
def mozharness_on_buildbot_bridge(config, job, taskdesc):
run = job['run']
worker = taskdesc['worker']
branch = config.params['project']
product = run['product']
buildername = run['buildername'].format(branch=branch)
revision = config.params['head_rev']
worker.update({
'buildername': buildername,
'sourcestamp': {
'branch': branch,
'repository': config.params['head_repository'],
'revision': revision,
},
})
worker.setdefault('properties', {})['product'] = product
if run.get('release-promotion'):
bb_release_worker(config, worker, run)
else:
bb_ci_worker(config, worker)