mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-26 11:45:37 +00:00
0d10662de9
This adds a mozharness action, only run in TaskCluster, to fetch secrets from the TaskCluster secrets API via the TaskCluster Proxy. It requires that the SCM level of the build be passed in with the --scm-level argument, defaulting to 1 (try) MozReview-Commit-ID: C3rvOPF6Bm1 --HG-- extra : rebase_source : 603d9d30ba34484ceabdf405cb560f91b5bc2fc2
175 lines
7.0 KiB
Python
Executable File
175 lines
7.0 KiB
Python
Executable File
#!/usr/bin/env python
|
|
# ***** BEGIN LICENSE BLOCK *****
|
|
# 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/.
|
|
# ***** END LICENSE BLOCK *****
|
|
"""fx_desktop_build.py.
|
|
|
|
script harness to build nightly firefox within Mozilla's build environment
|
|
and developer machines alike
|
|
|
|
author: Jordan Lund
|
|
|
|
"""
|
|
|
|
import sys
|
|
import os
|
|
|
|
# load modules from parent dir
|
|
sys.path.insert(1, os.path.dirname(sys.path[0]))
|
|
|
|
from mozharness.mozilla.building.buildbase import BUILD_BASE_CONFIG_OPTIONS, \
|
|
BuildingConfig, BuildScript
|
|
|
|
|
|
class FxDesktopBuild(BuildScript, object):
|
|
def __init__(self):
|
|
buildscript_kwargs = {
|
|
'config_options': BUILD_BASE_CONFIG_OPTIONS,
|
|
'all_actions': [
|
|
'get-secrets',
|
|
'clobber',
|
|
'clone-tools',
|
|
'checkout-sources',
|
|
'setup-mock',
|
|
'build',
|
|
'upload-files', # upload from BB to TC
|
|
'sendchange',
|
|
'check-test',
|
|
'package-source',
|
|
'generate-source-signing-manifest',
|
|
'multi-l10n',
|
|
'generate-build-stats',
|
|
'update',
|
|
],
|
|
'require_config_file': True,
|
|
# Default configuration
|
|
'config': {
|
|
'is_automation': True,
|
|
"pgo_build": False,
|
|
"debug_build": False,
|
|
"pgo_platforms": ['linux', 'linux64', 'win32', 'win64'],
|
|
# nightly stuff
|
|
"nightly_build": False,
|
|
'balrog_credentials_file': 'oauth.txt',
|
|
'taskcluster_credentials_file': 'oauth.txt',
|
|
'periodic_clobber': 168,
|
|
# hg tool stuff
|
|
'default_vcs': 'hgtool',
|
|
"tools_repo": "https://hg.mozilla.org/build/tools",
|
|
"repo_base": "https://hg.mozilla.org",
|
|
'tooltool_url': 'https://api.pub.build.mozilla.org/tooltool/',
|
|
"graph_selector": "/server/collect.cgi",
|
|
# only used for make uploadsymbols
|
|
'old_packages': [
|
|
"%(objdir)s/dist/firefox-*",
|
|
"%(objdir)s/dist/fennec*",
|
|
"%(objdir)s/dist/seamonkey*",
|
|
"%(objdir)s/dist/thunderbird*",
|
|
"%(objdir)s/dist/install/sea/*.exe"
|
|
],
|
|
'stage_product': 'firefox',
|
|
'platform_supports_post_upload_to_latest': True,
|
|
'use_branch_in_symbols_extra_buildid': True,
|
|
'latest_mar_dir': '/pub/mozilla.org/firefox/nightly/latest-%(branch)s',
|
|
'compare_locales_repo': 'https://hg.mozilla.org/build/compare-locales',
|
|
'compare_locales_rev': 'RELEASE_AUTOMATION',
|
|
'compare_locales_vcs': 'hgtool',
|
|
'influx_credentials_file': 'oauth.txt',
|
|
'build_resources_path': '%(abs_src_dir)s/obj-firefox/.mozbuild/build_resources.json',
|
|
'nightly_promotion_branches': ['mozilla-central', 'mozilla-aurora'],
|
|
|
|
# try will overwrite these
|
|
'clone_with_purge': False,
|
|
'clone_by_revision': False,
|
|
'tinderbox_build_dir': None,
|
|
'to_tinderbox_dated': True,
|
|
'release_to_try_builds': False,
|
|
'include_post_upload_builddir': False,
|
|
'use_clobberer': True,
|
|
|
|
'stage_username': 'ffxbld',
|
|
'stage_ssh_key': 'ffxbld_rsa',
|
|
'virtualenv_modules': [
|
|
'requests==2.8.1',
|
|
'PyHawk-with-a-single-extra-commit==0.1.5',
|
|
'taskcluster==0.0.26',
|
|
],
|
|
'virtualenv_path': 'venv',
|
|
#
|
|
|
|
},
|
|
'ConfigClass': BuildingConfig,
|
|
}
|
|
super(FxDesktopBuild, self).__init__(**buildscript_kwargs)
|
|
|
|
def _pre_config_lock(self, rw_config):
|
|
"""grab buildbot props if we are running this in automation"""
|
|
super(FxDesktopBuild, self)._pre_config_lock(rw_config)
|
|
c = self.config
|
|
if c['is_automation']:
|
|
# parse buildbot config and add it to self.config
|
|
self.info("We are running this in buildbot, grab the build props")
|
|
self.read_buildbot_config()
|
|
###
|
|
if c.get('stage_platform'):
|
|
platform_for_log_url = c['stage_platform']
|
|
if c.get('pgo_build'):
|
|
platform_for_log_url += '-pgo'
|
|
# postrun.py uses stage_platform buildbot prop as part of the log url
|
|
self.set_buildbot_property('stage_platform',
|
|
platform_for_log_url,
|
|
write_to_file=True)
|
|
else:
|
|
self.fatal("'stage_platform' not determined and is required in your config")
|
|
|
|
|
|
# helpers
|
|
|
|
def query_abs_dirs(self):
|
|
if self.abs_dirs:
|
|
return self.abs_dirs
|
|
c = self.config
|
|
abs_dirs = super(FxDesktopBuild, self).query_abs_dirs()
|
|
if not c.get('app_ini_path'):
|
|
self.fatal('"app_ini_path" is needed in your config for this '
|
|
'script.')
|
|
|
|
dirs = {
|
|
# BuildFactories in factory.py refer to a 'build' dir on the slave.
|
|
# This contains all the source code/objdir to compile. However,
|
|
# there is already a build dir in mozharness for every mh run. The
|
|
# 'build' that factory refers to I named: 'src' so
|
|
# there is a seperation in mh. for example, rather than having
|
|
# '{mozharness_repo}/build/build/', I have '{
|
|
# mozharness_repo}/build/src/'
|
|
'abs_src_dir': os.path.join(abs_dirs['abs_work_dir'],
|
|
'src'),
|
|
'abs_obj_dir': os.path.join(abs_dirs['abs_work_dir'],
|
|
'src',
|
|
self._query_objdir()),
|
|
'abs_tools_dir': os.path.join(abs_dirs['abs_work_dir'], 'tools'),
|
|
'abs_app_ini_path': c['app_ini_path'] % {
|
|
'obj_dir': os.path.join(abs_dirs['abs_work_dir'],
|
|
'src',
|
|
self._query_objdir())
|
|
},
|
|
'compare_locales_dir': os.path.join(abs_dirs['abs_work_dir'], 'compare-locales'),
|
|
}
|
|
abs_dirs.update(dirs)
|
|
self.abs_dirs = abs_dirs
|
|
return self.abs_dirs
|
|
|
|
# Actions {{{2
|
|
# read_buildbot_config in BuildingMixin
|
|
# clobber in BuildingMixin -> PurgeMixin
|
|
# if Linux config:
|
|
# reset_mock in BuildingMixing -> MockMixin
|
|
# setup_mock in BuildingMixing (overrides MockMixin.mock_setup)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
fx_desktop_build = FxDesktopBuild()
|
|
fx_desktop_build.run_and_exit()
|