Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Merge from default

changeset:   1666:407c31d4c137
user:        Rail Aliev <rail@mozilla.com>
date:        Wed Jul 13 11:47:36 2011 +0300
summary:     Bug 574764 - (mobile-0.8-releases) mobile release builders -> buildbot-0.8.0. r=aki

changeset:   1675:4b59cdc14898
tag:         tip
parent:      1666:407c31d4c137
user:        Cameron McCormack <cam@mcc.id.au>
date:        Thu Jul 14 09:28:54 2011 +1200
summary:     Bug 479352 - Set MOZ_HIDE_RESULTS_TABLE=1 when running mochitests. (v3) r=catlee

--HG--
branch : production-0.8
  • Loading branch information...
commit 177a930489726a04a1dfa7ec66450d6f9a46819d 2 parents 3ffce75 + db6357d
@rail rail authored
View
3  bin/log_uploader.py
@@ -247,6 +247,8 @@ def formatLog(tmpdir, build, builder_suffix=''):
buildid = getBuildId(build)
if options.release:
+ if 'mobile' in options.product:
+ uploadArgs['nightly_dir'] = 'candidates'
uploadArgs['to_candidates'] = True
version, buildNumber = options.release.split('/')
uploadArgs['version'] = version
@@ -291,7 +293,6 @@ def formatLog(tmpdir, build, builder_suffix=''):
to_try=False,
who=None,
revision=None,
- builddir=None,
buildid=buildid,
))
post_upload_cmd = postUploadCmdPrefix(**uploadArgs)
View
1  changes/ftppoller.py
@@ -75,6 +75,7 @@ def _process_changes(self, pageContents, url):
c = changes.Change(who = url,
comments = "success",
files = [],
+ properties={'who': url},
branch = self.branch)
self.parent.addChange(c)
View
9 env.py
@@ -76,6 +76,7 @@
"NO_FAIL_ON_TEST_ERRORS": '1',
"CCACHE_DIR": '/builds/ccache',
"CCACHE_UMASK": '002',
+ "MOZ_HIDE_RESULTS_TABLE": '1'
}
MozillaEnvironments['linux64-unittest'] = MozillaEnvironments['linux-unittest'].copy()
@@ -87,7 +88,8 @@
"NO_EM_RESTART": '1',
"XPCOM_DEBUG_BREAK": 'warn',
"CVS_RSH": 'ssh',
- "NO_FAIL_ON_TEST_ERRORS": '1'
+ "NO_FAIL_ON_TEST_ERRORS": '1',
+ "MOZ_HIDE_RESULTS_TABLE": '1'
}
MozillaEnvironments['macosx64-unittest'] = MozillaEnvironments['macosx-unittest'].copy()
@@ -114,7 +116,8 @@
"MSVCDir": 'D:\\msvs8\\VC',
"DevEnvDir": "D:\\msvs8\\Common7\\IDE",
"LIBPATH": 'C:\\WINDOWS\\Microsoft.NET\\Framework\\v2.0.50727;' + \
- 'D:\\msvs8\\VC\\ATLMFC\\LIB'
+ 'D:\\msvs8\\VC\\ATLMFC\\LIB',
+ "MOZ_HIDE_RESULTS_TABLE": '1'
}
MozillaEnvironments['win64-unittest'] = {
@@ -124,6 +127,7 @@
"XPCOM_DEBUG_BREAK": 'warn',
"CVS_RSH": 'ssh',
"NO_FAIL_ON_TEST_ERRORS": '1',
+ "MOZ_HIDE_RESULTS_TABLE": '1'
}
### Talos environments
@@ -187,6 +191,7 @@
}
MozillaEnvironments['android-unittest'] = {
+ "MOZ_HIDE_RESULTS_TABLE": '1'
}
MozillaEnvironments['android-perf'] = {
View
7 misc.py
@@ -128,6 +128,13 @@ def isImportantL10nFile(change, l10nModules):
return True
return False
+def changeContainsProduct(change, productName):
+ products = change.properties.getProperty("products")
+ if products:
+ if productName in products.split(','):
+ return True
+ return False
+
def generateTestBuilderNames(name_prefix, suites_name, suites):
test_builders = []
if isinstance(suites, dict) and "totalChunks" in suites:
View
74 process/factory.py
@@ -110,6 +110,8 @@ def postUploadCmdPrefix(upload_dir=None,
to_try=False,
to_shadow=False,
to_candidates=False,
+ to_mobile_candidates=False,
+ nightly_dir=None,
as_list=True,
):
"""Returns a post_upload.py command line for the given arguments.
@@ -158,6 +160,10 @@ def postUploadCmdPrefix(upload_dir=None,
cmd.append("--release-to-shadow-central-builds")
if to_candidates:
cmd.append("--release-to-candidates-dir")
+ if to_mobile_candidates:
+ cmd.append("--release-to-mobile-candidates-dir")
+ if nightly_dir:
+ cmd.append("--nightly-dir=%s" % nightly_dir)
if as_list:
return cmd
@@ -185,7 +191,7 @@ def parse_make_upload(rc, stdout, stderr):
retval['symbolsUrl'] = m
elif m.endswith("tests.tar.bz2") or m.endswith("tests.zip"):
retval['testsUrl'] = m
- elif m.endswith("apk") and 'unsigned' in m:
+ elif m.endswith('apk') and 'unsigned-unaligned' in m:
retval['unsignedApkUrl'] = m
elif 'jsshell-' in m and m.endswith('.zip'):
retval['jsshellUrl'] = m
@@ -1445,6 +1451,7 @@ def addUploadSteps(self, pkgArgs=None, pkgTestArgs=None):
command=cmd,
env=pkg_env,
workdir='.',
+ haltOnFailure=True,
))
# We need to set packageFilename to the multi apk
self.addFilePropertiesSteps(filename=packageFilename,
@@ -2544,13 +2551,14 @@ def addUploadSnippetsSteps(self):
class ReleaseBuildFactory(MercurialBuildFactory):
def __init__(self, env, version, buildNumber, brandName=None,
unittestMasters=None, unittestBranch=None, talosMasters=None,
- **kwargs):
+ usePrettyNames=True, enableUpdatePackaging=True, **kwargs):
self.version = version
self.buildNumber = buildNumber
self.talosMasters = talosMasters or []
self.unittestMasters = unittestMasters or []
self.unittestBranch = unittestBranch
+ self.enableUpdatePackaging = enableUpdatePackaging
if self.unittestMasters:
assert self.unittestBranch
@@ -2563,7 +2571,8 @@ def __init__(self, env, version, buildNumber, brandName=None,
env = env.copy()
# Make sure MOZ_PKG_PRETTYNAMES is on and override MOZ_PKG_VERSION
# The latter is only strictly necessary for RCs.
- env['MOZ_PKG_PRETTYNAMES'] = '1'
+ if usePrettyNames:
+ env['MOZ_PKG_PRETTYNAMES'] = '1'
env['MOZ_PKG_VERSION'] = version
MercurialBuildFactory.__init__(self, env=env, **kwargs)
@@ -2574,13 +2583,14 @@ def addFilePropertiesSteps(self, filename=None, directory=None,
def doUpload(self, postUploadBuildDir=None, uploadMulti=False):
# Make sure the complete MAR has been generated
- self.addStep(ShellCommand,
- name='make_update_pkg',
- command=['make', '-C',
- '%s/tools/update-packaging' % self.mozillaObjdir],
- env=self.env,
- haltOnFailure=True
- )
+ if self.enableUpdatePackaging:
+ self.addStep(ShellCommand,
+ name='make_update_pkg',
+ command=['make', '-C',
+ '%s/tools/update-packaging' % self.mozillaObjdir],
+ env=self.env,
+ haltOnFailure=True
+ )
self.addStep(ShellCommand,
name='echo_buildID',
command=['bash', '-c',
@@ -2597,23 +2607,43 @@ def doUpload(self, postUploadBuildDir=None, uploadMulti=False):
if self.stageSshKey:
uploadEnv['UPLOAD_SSH_KEY'] = '~/.ssh/%s' % self.stageSshKey
- uploadEnv['POST_UPLOAD_CMD'] = postUploadCmdPrefix(
- product=self.productName,
- version=self.version,
- buildNumber=str(self.buildNumber),
- to_candidates=True,
- as_list=False)
+ uploadArgs = dict(
+ product=self.productName,
+ version=self.version,
+ buildNumber=str(self.buildNumber),
+ as_list=False)
+ upload_vars = []
- self.addStep(RetryingSetProperty(
+ if self.productName == 'fennec':
+ builddir = '%s/en-US' % self.stagePlatform
+ if uploadMulti:
+ builddir = '%s/multi' % self.stagePlatform
+ upload_vars = ['AB_CD=multi']
+ if postUploadBuildDir:
+ builddir = '%s/%s' % (self.stagePlatform, postUploadBuildDir)
+ uploadArgs['builddir'] = builddir
+ uploadArgs['to_mobile_candidates'] = True
+ uploadArgs['nightly_dir'] = 'candidates'
+ uploadArgs['product'] = 'mobile'
+ else:
+ uploadArgs['to_candidates'] = True
+
+ uploadEnv['POST_UPLOAD_CMD'] = postUploadCmdPrefix(**uploadArgs)
+
+ objdir = WithProperties('%(basedir)s/build/' + self.objdir)
+ if self.platform.startswith('win'):
+ objdir = 'build/%s' % self.objdir
+ self.addStep(RetryingScratchboxProperty(
name='make_upload',
- command=['make', 'upload'],
+ command=['make', 'upload'] + upload_vars,
env=uploadEnv,
- workdir='build/%s' % self.objdir,
- extract_fn = parse_make_upload,
+ workdir=objdir,
+ extract_fn=parse_make_upload,
haltOnFailure=True,
description=['upload'],
timeout=60*60, # 60 minutes
log_eval_func=lambda c,s: regex_log_evaluator(c, s, upload_errors),
+ sb=self.use_scratchbox,
))
# Send to the "release" branch on talos, it will do
@@ -4119,10 +4149,14 @@ def __init__(self, productName, version, baseTag, stagingServer,
self.env['MOZ_OBJDIR'] = self.objdir
self.env['MOZ_PKG_PRETTYNAMES'] = '1'
self.env['MOZ_PKG_VERSION'] = version
+ self.env['MOZ_PKG_APPNAME'] = productName
# '-c' is for "release to candidates dir"
postUploadCmd = 'post_upload.py -p %s -v %s -n %s -c' % \
(productName, version, buildNumber)
+ if productName == 'fennec':
+ postUploadCmd = 'post_upload.py -p mobile --nightly-dir candidates -v %s -n %s -c' % \
+ (version, buildNumber)
uploadEnv = {'UPLOAD_HOST': stagingServer,
'UPLOAD_USER': stageUsername,
'UPLOAD_SSH_KEY': '~/.ssh/%s' % stageSshKey,
View
989 process/release.py
@@ -8,6 +8,7 @@
from buildbot.status.tinderbox import TinderboxMailNotifier
from buildbot.status.mail import MailNotifier
from buildbot.steps.trigger import Trigger
+from buildbot.steps.shell import WithProperties
import release.platforms
import release.paths
@@ -24,7 +25,7 @@
from buildbotcustom.status.mail import ChangeNotifier
from buildbotcustom.misc import get_l10n_repositories, isHgPollerTriggered, \
generateTestBuilderNames, generateTestBuilder, _nextFastReservedSlave, \
- makeLogUploadCommand
+ makeLogUploadCommand, changeContainsProduct
from buildbotcustom.common import reallyShort
from buildbotcustom.process.factory import StagingRepositorySetupFactory, \
ScriptFactory, SingleSourceFactory, ReleaseBuildFactory, \
@@ -62,18 +63,15 @@ def generateReleaseBranchObjects(releaseConfig, branchConfig,
branchConfig['config_repo_path'])
branchConfigFile = getRealpath('localconfig.py')
- unix_slaves = branchConfig['platforms'].get('linux', {}).get('slaves', []) + \
- branchConfig['platforms'].get('linux64', {}).get('slaves', []) + \
- branchConfig['platforms'].get('macosx', {}).get('slaves', []) + \
- branchConfig['platforms'].get('macosx64', {}).get('slaves', [])
- all_slaves = unix_slaves + \
- branchConfig['platforms'].get('win32', {}).get('slaves', []) + \
- branchConfig['platforms'].get('win64', {}).get('slaves', [])
-
- if 'signedPlatforms' in releaseConfig.keys():
- signedPlatforms = releaseConfig['signedPlatforms']
- else:
- signedPlatforms = ('win32',)
+ unix_slaves = []
+ all_slaves = []
+ for p in branchConfig['platforms']:
+ platform_slaves = branchConfig['platforms'][p].get('slaves', [])
+ all_slaves.extend(platform_slaves)
+ if 'win' not in p:
+ unix_slaves.extend(platform_slaves)
+
+ signedPlatforms = releaseConfig.get('signedPlatforms', ('win32',))
def builderPrefix(s, platform=None):
if platform:
@@ -124,7 +122,7 @@ def createReleaseMessage(mode, name, build, results, master_status):
releaseName = releasePrefix()
job_status = "failed" if results else "success"
allplatforms = list(releaseConfig['enUSPlatforms'])
- xrplatforms = list(releaseConfig['xulrunnerPlatforms'])
+ xrplatforms = list(releaseConfig.get('xulrunnerPlatforms', []))
stage = name.replace(builderPrefix(""), "")
# Detect platform from builder name by tokenizing by '_', and matching
# the first token after the prefix
@@ -133,20 +131,25 @@ def createReleaseMessage(mode, name, build, results, master_status):
if stage.replace("xulrunner_", "").split('_')[0] == p]
else:
platform = [p for p in allplatforms if stage.split('_')[0] == p]
- if releaseConfig['majorUpdateRepoPath']:
+ if releaseConfig.get('majorUpdateRepoPath'):
majorReleaseName = majorReleasePrefix()
- platform = platform[0] if len(platform) >= 1 else None
+ platform = platform[0] if len(platform) >= 1 else ''
+ bare_platform = platform.replace('xulrunner_', '')
message_tag = releaseConfig.get('messagePrefix', '[release] ')
buildbot_url = ''
if master_status.getURLForThing(build):
buildbot_url = "Full details are available at:\n %s\n" % master_status.getURLForThing(build)
# Use a generic ftp URL non-specific to any locale
ftpURL = genericFtpUrl()
+ if 'xulrunner' in platform:
+ ftpURL = ftpURL.replace(releaseConfig['productName'], 'xulrunner')
if platform:
- if platform in signedPlatforms:
- platformDir = 'unsigned/%s' % buildbot2ftp(platform)
- else:
- platformDir = buildbot2ftp(platform)
+ platformDir = branchConfig['platforms'].get(bare_platform, {}).get(
+ 'stage_platform', buildbot2ftp(bare_platform))
+ if 'xulrunner' in platform:
+ platformDir = ''
+ if bare_platform in signedPlatforms:
+ platformDir = 'unsigned/%s' % platformDir
ftpURL = '/'.join([
ftpURL.strip('/'),
platformDir])
@@ -257,95 +260,136 @@ def majorUpdateVerifyBuilders(platform):
notify_builders = []
status = []
- shippedLocalesFile = "%s/%s/raw-file/%s/%s" % (
- branchConfig['hgurl'],
- sourceRepoInfo['path'],
- releaseTag,
- releaseConfig['shippedLocalesPath'])
-
##### Change sources and Schedulers
- if releaseConfig['doPartnerRepacks']:
+ if releaseConfig['doPartnerRepacks'] and \
+ releaseConfig['productName'] == 'firefox':
for p in releaseConfig['l10nPlatforms']:
- ftpPlatform = buildbot2ftp(p)
-
- ftpURLs = ["http://%s/pub/mozilla.org/%s/nightly/%s-candidates/build%s/%s" % (
- releaseConfig['stagingServer'],
- releaseConfig['productName'],
- releaseConfig['version'],
- releaseConfig['buildNumber'],
- ftpPlatform)]
-
+ ftpPlatform = branchConfig['platforms'].get(p, {}).get(
+ 'stage_platform', buildbot2ftp(p))
+
+ candidatesDir = makeCandidatesDir(
+ releaseConfig['productName'],
+ releaseConfig['version'],
+ releaseConfig['buildNumber'],
+ protocol='http',
+ server=releaseConfig['ftpServer'])
+ ftpURL = '%s%s' % (candidatesDir, ftpPlatform)
if p in signedPlatforms:
- ftpURLs = [
- "http://%s/pub/mozilla.org/%s/nightly/%s-candidates/build%s/unsigned/%s" % (
- releaseConfig['stagingServer'],
- releaseConfig['productName'],
- releaseConfig['version'],
- releaseConfig['buildNumber'],
- ftpPlatform)]
+ ftpURL = '%sunsigned/%s' % (candidatesDir, ftpPlatform)
+ shippedLocalesFile = "%s/%s/raw-file/%s/%s" % (
+ branchConfig['hgurl'], sourceRepoInfo['path'], releaseTag,
+ releaseConfig['shippedLocalesPath'])
change_source.append(LocalesFtpPoller(
branch=builderPrefix("post_%s_l10n" % p),
- ftpURLs=ftpURLs,
+ ftpURLs=[ftpURL],
pollInterval=60*5, # 5 minutes
- platform = p,
- localesFile = shippedLocalesFile,
- sl_platform_map = sl_platform_map,
+ platform=p,
+ localesFile=shippedLocalesFile,
+ sl_platform_map=sl_platform_map,
+ ))
+
+ if releaseConfig['productName'] == 'firefox':
+ change_source.append(UrlPoller(
+ branch=builderPrefix("post_signing"),
+ url='%s/win32_signing_build%s.log' % (
+ makeCandidatesDir(
+ releaseConfig['productName'],
+ releaseConfig['version'],
+ releaseConfig['buildNumber'],
+ protocol='http',
+ server=releaseConfig['ftpServer']),
+ releaseConfig['buildNumber']),
+ pollInterval=60*10,
+ ))
+
+ if releaseConfig['productName'] == 'fennec':
+ locale = 'en-US'
+ candidatesDir = makeCandidatesDir(
+ releaseConfig['productName'],
+ releaseConfig['version'],
+ releaseConfig['buildNumber'],
+ protocol='http',
+ server=releaseConfig['ftpServer'])
+ signed_apk_url = '%s%s/%s/%s-%s.%s.eabi-arm.apk' % \
+ (candidatesDir,
+ branchConfig['platforms']['linux-android']['stage_platform'],
+ locale, releaseConfig['productName'], releaseConfig['version'],
+ locale)
+ change_source.append(UrlPoller(
+ branch=builderPrefix('android_post_signing'),
+ url=signed_apk_url,
+ pollInterval=60*10
+ ))
+ if branchConfig['platforms']['linux-android'].get('multi_locale'):
+ locale = 'multi'
+ signed_apk_url = '%s%s/%s/%s-%s.%s.eabi-arm.apk' % \
+ (candidatesDir,
+ branchConfig['platforms']['linux-android'].get(
+ 'stage_platform'),
+ locale,
+ releaseConfig['productName'],
+ releaseConfig['version'],
+ locale)
+ change_source.append(UrlPoller(
+ branch=builderPrefix('android_post_signing'),
+ url=signed_apk_url,
+ pollInterval=60*10
))
- change_source.append(UrlPoller(
- branch=builderPrefix("post_signing"),
- url='http://%s/pub/mozilla.org/%s/nightly/%s-candidates/build%s/win32_signing_build%s.log' % (
- releaseConfig['stagingServer'],
- releaseConfig['productName'], releaseConfig['version'],
- releaseConfig['buildNumber'], releaseConfig['buildNumber']),
- pollInterval=60*10,
- ))
if releaseConfig.get('enable_repo_setup'):
repo_setup_scheduler = Scheduler(
- name=builderPrefix('repo_setup'),
+ name=builderPrefix('%s_repo_setup' % releaseConfig['productName']),
branch=sourceRepoInfo['path'],
treeStableTimer=None,
- builderNames=[builderPrefix('repo_setup')],
+ builderNames=[builderPrefix(
+ '%s_repo_setup' % releaseConfig['productName'])],
fileIsImportant=lambda c: not isHgPollerTriggered(c,
branchConfig['hgurl'])
)
schedulers.append(repo_setup_scheduler)
tag_scheduler = Dependent(
- name=builderPrefix('tag'),
+ name=builderPrefix('%s_tag' % releaseConfig['productName']),
upstream=repo_setup_scheduler,
- builderNames=[builderPrefix('tag')]
+ builderNames=[builderPrefix(
+ '%s_tag' % releaseConfig['productName'])],
)
- release_downloader_scheduler = Scheduler(
- name=builderPrefix('release_downloader'),
- branch=sourceRepoInfo['path'],
- treeStableTimer=None,
- builderNames=[builderPrefix('release_downloader')],
- fileIsImportant=lambda c: not isHgPollerTriggered(c,
- branchConfig['hgurl'])
- )
- schedulers.append(release_downloader_scheduler)
+ if not releaseConfig.get('skip_release_download'):
+ release_downloader_scheduler = Scheduler(
+ name=builderPrefix(
+ '%s_release_downloader' % releaseConfig['productName']),
+ branch=sourceRepoInfo['path'],
+ treeStableTimer=None,
+ builderNames=[builderPrefix(
+ '%s_release_downloader' % releaseConfig['productName'])],
+ fileIsImportant=lambda c: changeContainsProduct(c,
+ releaseConfig['productName'])
+ )
+ schedulers.append(release_downloader_scheduler)
else:
tag_scheduler = Scheduler(
- name=builderPrefix('tag'),
+ name=builderPrefix('%s_tag' % releaseConfig['productName']),
branch=sourceRepoInfo['path'],
treeStableTimer=None,
- builderNames=[builderPrefix('tag')],
- fileIsImportant=lambda c: not isHgPollerTriggered(c, branchConfig['hgurl'])
+ builderNames=[builderPrefix(
+ '%s_tag' % releaseConfig['productName'])],
+ fileIsImportant=lambda c: \
+ changeContainsProduct(c, releaseConfig['productName'])
)
schedulers.append(tag_scheduler)
- tag_downstream = [builderPrefix('source')]
+ tag_downstream = [builderPrefix('%s_source' % releaseConfig['productName'])]
- if releaseConfig['buildNumber'] == 1:
+ if releaseConfig['buildNumber'] == 1 \
+ and not releaseConfig.get('disableBouncerEntries'):
tag_downstream.append(builderPrefix('bouncer_submitter'))
if releaseConfig['doPartnerRepacks']:
tag_downstream.append(builderPrefix('euballot_bouncer_submitter'))
- if releaseConfig['xulrunnerPlatforms']:
+ if releaseConfig.get('xulrunnerPlatforms'):
tag_downstream.append(builderPrefix('xulrunner_source'))
for platform in releaseConfig['enUSPlatforms']:
@@ -365,20 +409,21 @@ def majorUpdateVerifyBuilders(platform):
schedulers.append(repack_complete_scheduler)
notify_builders.append(builderPrefix('repack_complete', platform))
- for platform in releaseConfig['xulrunnerPlatforms']:
+ for platform in releaseConfig.get('xulrunnerPlatforms', []):
tag_downstream.append(builderPrefix('xulrunner_%s_build' % platform))
DependentID = makePropertiesScheduler(Dependent, [buildIDSchedFunc, buildUIDSchedFunc])
schedulers.append(
DependentID(
- name=builderPrefix('build'),
+ name=builderPrefix('%s_build' % releaseConfig['productName']),
upstream=tag_scheduler,
builderNames=tag_downstream,
))
if releaseConfig['doPartnerRepacks']:
- for platform in releaseConfig['l10nPlatforms']:
+ for platform in releaseConfig.get('partnerRepackPlatforms',
+ releaseConfig['l10nPlatforms']):
partner_scheduler = Scheduler(
name=builderPrefix('partner_repacks', platform),
treeStableTimer=0,
@@ -387,49 +432,52 @@ def majorUpdateVerifyBuilders(platform):
)
schedulers.append(partner_scheduler)
- for platform in releaseConfig['l10nPlatforms']:
- l10n_verify_scheduler = Scheduler(
- name=builderPrefix('l10n_verification', platform),
+ if releaseConfig.get('verifyConfigs'):
+ for platform in releaseConfig['l10nPlatforms']:
+ l10n_verify_scheduler = Scheduler(
+ name=builderPrefix('l10n_verification', platform),
+ treeStableTimer=0,
+ branch=builderPrefix('post_signing'),
+ builderNames=[builderPrefix('l10n_verification', platform)]
+ )
+ schedulers.append(l10n_verify_scheduler)
+
+ updates_scheduler = Scheduler(
+ name=builderPrefix('updates'),
treeStableTimer=0,
branch=builderPrefix('post_signing'),
- builderNames=[builderPrefix('l10n_verification', platform)]
+ builderNames=[builderPrefix('updates')]
)
- schedulers.append(l10n_verify_scheduler)
-
- updates_scheduler = Scheduler(
- name=builderPrefix('updates'),
- treeStableTimer=0,
- branch=builderPrefix('post_signing'),
- builderNames=[builderPrefix('updates')]
- )
- schedulers.append(updates_scheduler)
- notify_builders.append(builderPrefix('updates'))
-
- updateBuilderNames = []
- for platform in sorted(releaseConfig['verifyConfigs'].keys()):
- updateBuilderNames.extend(updateVerifyBuilders(platform).values())
- update_verify_scheduler = Dependent(
- name=builderPrefix('update_verify'),
- upstream=updates_scheduler,
- builderNames=updateBuilderNames
- )
- schedulers.append(update_verify_scheduler)
+ schedulers.append(updates_scheduler)
+ notify_builders.append(builderPrefix('updates'))
+
+ updateBuilderNames = []
+ for platform in sorted(releaseConfig.get('verifyConfigs', {}).keys()):
+ updateBuilderNames.extend(updateVerifyBuilders(platform).values())
+ update_verify_scheduler = Dependent(
+ name=builderPrefix('update_verify'),
+ upstream=updates_scheduler,
+ builderNames=updateBuilderNames
+ )
+ schedulers.append(update_verify_scheduler)
- check_permissions_scheduler = Dependent(
- name=builderPrefix('check_permissions'),
- upstream=updates_scheduler,
- builderNames=[builderPrefix('check_permissions')]
- )
- schedulers.append(check_permissions_scheduler)
+ if not releaseConfig.get('disablePermissionCheck'):
+ check_permissions_scheduler = Dependent(
+ name=builderPrefix('check_permissions'),
+ upstream=updates_scheduler,
+ builderNames=[builderPrefix('check_permissions')]
+ )
+ schedulers.append(check_permissions_scheduler)
- antivirus_scheduler = Dependent(
- name=builderPrefix('antivirus'),
- upstream=updates_scheduler,
- builderNames=[builderPrefix('antivirus')]
- )
- schedulers.append(antivirus_scheduler)
+ if not releaseConfig.get('disableVirusCheck'):
+ antivirus_scheduler = Dependent(
+ name=builderPrefix('antivirus'),
+ upstream=updates_scheduler,
+ builderNames=[builderPrefix('antivirus')]
+ )
+ schedulers.append(antivirus_scheduler)
- if releaseConfig['majorUpdateRepoPath']:
+ if releaseConfig.get('majorUpdateRepoPath'):
majorUpdateBuilderNames = []
for platform in sorted(releaseConfig['majorUpdateVerifyConfigs'].keys()):
majorUpdateBuilderNames.extend(
@@ -456,28 +504,37 @@ def majorUpdateVerifyBuilders(platform):
)
schedulers.append(s)
- mirror_scheduler1 = TriggerBouncerCheck(
- name=builderPrefix('ready-for-rel-test'),
- configRepo=config_repo,
- minUptake=10000,
- builderNames=[builderPrefix('ready_for_releasetest_testing')] + \
- [builderPrefix('final_verification', platform)
- for platform in releaseConfig['verifyConfigs'].keys()],
- username=BuildSlaves.tuxedoUsername,
- password=BuildSlaves.tuxedoPassword)
-
- schedulers.append(mirror_scheduler1)
-
- mirror_scheduler2 = TriggerBouncerCheck(
- name=builderPrefix('ready-for-release'),
- configRepo=config_repo,
- minUptake=45000,
- builderNames=[builderPrefix('ready_for_release')],
- username=BuildSlaves.tuxedoUsername,
- password=BuildSlaves.tuxedoPassword)
-
- schedulers.append(mirror_scheduler2)
-
+ if not releaseConfig.get('disableBouncerEntries'):
+ mirror_scheduler1 = TriggerBouncerCheck(
+ name=builderPrefix('ready-for-rel-test'),
+ configRepo=config_repo,
+ minUptake=10000,
+ builderNames=[builderPrefix('ready_for_releasetest_testing')] + \
+ [builderPrefix('final_verification', platform)
+ for platform in releaseConfig.get('verifyConfigs', {}).keys()],
+ username=BuildSlaves.tuxedoUsername,
+ password=BuildSlaves.tuxedoPassword)
+
+ schedulers.append(mirror_scheduler1)
+
+ mirror_scheduler2 = TriggerBouncerCheck(
+ name=builderPrefix('ready-for-release'),
+ configRepo=config_repo,
+ minUptake=45000,
+ builderNames=[builderPrefix('ready_for_release')],
+ username=BuildSlaves.tuxedoUsername,
+ password=BuildSlaves.tuxedoPassword)
+
+ schedulers.append(mirror_scheduler2)
+
+ if releaseConfig['productName'] == 'fennec':
+ android_signature_verification_scheduler = Scheduler(
+ name=builderPrefix('android_signature_verification_scheduler'),
+ branch=builderPrefix('android_post_signing'),
+ treeStableTimer=None,
+ builderNames=[builderPrefix('android_signature_verification')],
+ )
+ schedulers.append(android_signature_verification_scheduler)
# Purposely, there is not a Scheduler for ReleaseFinalVerification
# This is a step run very shortly before release, and is triggered manually
# from the waterfall
@@ -518,19 +575,26 @@ def majorUpdateVerifyBuilders(platform):
)
builders.append({
- 'name': builderPrefix('repo_setup'),
+ 'name': builderPrefix(
+ '%s_repo_setup' % releaseConfig['productName']),
'slavenames': unix_slaves,
'category': builderPrefix(''),
- 'builddir': builderPrefix('repo_setup'),
- 'slavebuilddir': reallyShort(builderPrefix('repo_setup')),
+ 'builddir': builderPrefix(
+ '%s_repo_setup' % releaseConfig['productName']),
+ 'slavebuilddir': reallyShort(builderPrefix(
+ '%s_repo_setup' % releaseConfig['productName'])),
'factory': repository_setup_factory,
'env': builder_env,
- 'properties': { 'slavebuilddir':
- reallyShort(builderPrefix('repo_setup'))},
+ 'properties': {
+ 'slavebuilddir': reallyShort(builderPrefix(
+ '%s_repo_setup' % releaseConfig['productName'])),
+ 'release_config': releaseConfigFile,
+ },
})
else:
builders.append(makeDummyBuilder(
- name=builderPrefix('repo_setup'),
+ name=builderPrefix(
+ '%s_repo_setup' % releaseConfig['productName']),
slaves=all_slaves,
category=builderPrefix(''),
))
@@ -543,22 +607,25 @@ def majorUpdateVerifyBuilders(platform):
)
builders.append({
- 'name': builderPrefix('release_downloader'),
+ 'name': builderPrefix(
+ '%s_release_downloader' % releaseConfig['productName']),
'slavenames': unix_slaves,
'category': builderPrefix(''),
- 'builddir': builderPrefix('release_downloader'),
- 'slavebuilddir': reallyShort(builderPrefix('release_downloader')),
+ 'builddir': builderPrefix(
+ '%s_release_downloader' % releaseConfig['productName']),
+ 'slavebuilddir': reallyShort(builderPrefix(
+ '%s_release_downloader' % releaseConfig['productName'])),
'factory': release_downloader_factory,
'env': builder_env,
- 'properties': {'builddir': builderPrefix('release_downloader'),
- 'slavebuilddir': reallyShort(builderPrefix('release_downloader'))}
+ 'properties': {
+ 'release_config': releaseConfigFile,
+ 'builddir': builderPrefix('%s_release_downloader' % \
+ releaseConfig['productName']),
+ 'slavebuilddir': reallyShort(builderPrefix(
+ '%s_release_downloader' % \
+ releaseConfig['productName']))
+ }
})
- else:
- builders.append(makeDummyBuilder(
- name=builderPrefix('release_downloader'),
- slaves=all_slaves,
- category=builderPrefix(''),
- ))
if not releaseConfig.get('skip_tag'):
pf = branchConfig['platforms']['linux']
@@ -572,20 +639,28 @@ def majorUpdateVerifyBuilders(platform):
)
builders.append({
- 'name': builderPrefix('tag'),
- 'slavenames': pf['slaves'] + branchConfig['platforms']['linux64']['slaves'],
+ 'name': builderPrefix('%s_tag' % releaseConfig['productName']),
+ 'slavenames': pf['slaves'] + \
+ branchConfig['platforms']['linux64']['slaves'],
'category': builderPrefix(''),
- 'builddir': builderPrefix('tag'),
- 'slavebuilddir': reallyShort(builderPrefix('tag')),
+ 'builddir': builderPrefix('%s_tag' % releaseConfig['productName']),
+ 'slavebuilddir': reallyShort(
+ builderPrefix('%s_tag' % releaseConfig['productName'])),
'factory': tag_factory,
'nextSlave': _nextFastReservedSlave,
'env': tag_env,
- 'properties': {'builddir': builderPrefix('tag'), 'slavebuilddir': reallyShort(builderPrefix('tag'))}
+ 'properties': {
+ 'builddir': builderPrefix(
+ '%s_tag' % releaseConfig['productName']),
+ 'slavebuilddir': reallyShort(
+ builderPrefix('%s_tag' % releaseConfig['productName'])),
+ 'release_config': releaseConfigFile,
+ }
})
- notify_builders.append(builderPrefix('tag'))
+ notify_builders.append(builderPrefix('%s_tag' % releaseConfig['productName']))
else:
builders.append(makeDummyBuilder(
- name=builderPrefix('tag'),
+ name=builderPrefix('%s_tag' % releaseConfig['productName']),
slaves=all_slaves,
category=builderPrefix(''),
))
@@ -614,19 +689,23 @@ def majorUpdateVerifyBuilders(platform):
)
builders.append({
- 'name': builderPrefix('source'),
- 'slavenames': branchConfig['platforms']['linux']['slaves'] + branchConfig['platforms']['linux64']['slaves'],
+ 'name': builderPrefix('%s_source' % releaseConfig['productName']),
+ 'slavenames': branchConfig['platforms']['linux']['slaves'] + \
+ branchConfig['platforms']['linux64']['slaves'],
'category': builderPrefix(''),
- 'builddir': builderPrefix('source'),
- 'slavebuilddir': reallyShort(builderPrefix('source')),
+ 'builddir': builderPrefix(
+ '%s_source' % releaseConfig['productName']),
+ 'slavebuilddir': reallyShort(
+ builderPrefix('%s_source' % releaseConfig['productName'])),
'factory': source_factory,
'env': builder_env,
'nextSlave': _nextFastReservedSlave,
'properties': { 'slavebuilddir':
- reallyShort(builderPrefix('source'))}
+ reallyShort(
+ builderPrefix('%s_source' % releaseConfig['productName']))}
})
- if releaseConfig['xulrunnerPlatforms']:
+ if releaseConfig.get('xulrunnerPlatforms'):
mozconfig = 'linux/%s/xulrunner' % sourceRepoInfo['name']
xulrunner_source_factory = SingleSourceFactory(
env=pf['env'],
@@ -650,7 +729,8 @@ def majorUpdateVerifyBuilders(platform):
builders.append({
'name': builderPrefix('xulrunner_source'),
- 'slavenames': branchConfig['platforms']['linux']['slaves'] + branchConfig['platforms']['linux64']['slaves'],
+ 'slavenames': branchConfig['platforms']['linux']['slaves'] + \
+ branchConfig['platforms']['linux64']['slaves'],
'category': builderPrefix(''),
'builddir': builderPrefix('xulrunner_source'),
'slavebuilddir': reallyShort(builderPrefix('xulrunner_source')),
@@ -661,11 +741,11 @@ def majorUpdateVerifyBuilders(platform):
})
else:
builders.append(makeDummyBuilder(
- name=builderPrefix('source'),
+ name=builderPrefix('%s_source' % releaseConfig['productName']),
slaves=all_slaves,
category=builderPrefix(''),
))
- if releaseConfig['xulrunnerPlatforms']:
+ if releaseConfig.get('xulrunnerPlatforms'):
builders.append(makeDummyBuilder(
name=builderPrefix('xulrunner_source'),
slaves=all_slaves,
@@ -691,6 +771,14 @@ def majorUpdateVerifyBuilders(platform):
unittestBranch = None
if not releaseConfig.get('skip_build'):
+ if platform in releaseConfig['l10nPlatforms']:
+ triggeredSchedulers = [builderPrefix('%s_repack' % platform)]
+ else:
+ triggeredSchedulers = None
+ multiLocaleConfig = releaseConfig.get(
+ 'mozharness_config', {}).get(platform)
+ enableUpdatePackaging = bool(releaseConfig.get('verifyConfigs',
+ {}).get(platform))
build_factory = ReleaseBuildFactory(
env=pf['env'],
objdir=pf['platform_objdir'],
@@ -724,7 +812,20 @@ def majorUpdateVerifyBuilders(platform):
unittestBranch=unittestBranch,
clobberURL=branchConfig['base_clobber_url'],
triggerBuilds=True,
- triggeredSchedulers=[builderPrefix('%s_repack' % platform)],
+ triggeredSchedulers=triggeredSchedulers,
+ stagePlatform=pf.get('stage_platform'),
+ use_scratchbox=pf.get('use_scratchbox'),
+ android_signing=pf.get('android_signing', False),
+ multiLocale=pf.get('multi_locale', False),
+ multiLocaleMerge=releaseConfig.get('mergeLocales', False),
+ compareLocalesRepoPath=branchConfig['compare_locales_repo_path'],
+ mozharnessRepoPath=branchConfig['mozharness_repo_path'],
+ mozharnessTag=branchConfig['mozharness_tag'],
+ multiLocaleScript=pf.get('multi_locale_script'),
+ multiLocaleConfig=multiLocaleConfig,
+ usePrettyNames=releaseConfig.get('usePrettyNames', True),
+ enableUpdatePackaging=enableUpdatePackaging,
+ mozconfigBranch=releaseTag,
)
builders.append({
@@ -747,34 +848,45 @@ def majorUpdateVerifyBuilders(platform):
))
if platform in releaseConfig['l10nPlatforms']:
- standalone_factory = ScriptFactory(
- scriptRepo=tools_repo,
- interpreter='bash',
- scriptName='scripts/l10n/standalone_repacks.sh',
- extra_args=[platform, branchConfigFile]
- )
- env = builder_env.copy()
- env.update(pf['env'])
- builders.append({
- 'name': builderPrefix("standalone_repack", platform),
- 'slavenames': branchConfig['l10n_slaves'][platform],
- 'category': builderPrefix(''),
- 'builddir': builderPrefix("standalone_repack", platform),
- 'factory': standalone_factory,
- 'nextSlave': _nextFastReservedSlave,
- 'env': env,
- 'properties': {'builddir':
- builderPrefix("standalone_repack", platform)}
- })
-
- for n, builderName in l10nBuilders(platform).iteritems():
- repack_factory = ScriptFactory(
+ if not releaseConfig.get('disableStandaloneRepacks'):
+ standalone_factory = ScriptFactory(
scriptRepo=tools_repo,
interpreter='bash',
- scriptName='scripts/l10n/release_repacks.sh',
- extra_args=[platform, branchConfigFile,
- str(l10nChunks), str(n)]
+ scriptName='scripts/l10n/standalone_repacks.sh',
+ extra_args=[platform, branchConfigFile]
)
+ env = builder_env.copy()
+ env.update(pf['env'])
+ builders.append({
+ 'name': builderPrefix("standalone_repack", platform),
+ 'slavenames': branchConfig['l10n_slaves'][platform],
+ 'category': builderPrefix(''),
+ 'builddir': builderPrefix("standalone_repack", platform),
+ 'factory': standalone_factory,
+ 'nextSlave': _nextFastReservedSlave,
+ 'env': env,
+ 'properties': {'builddir':
+ builderPrefix("standalone_repack", platform)}
+ })
+
+ for n, builderName in l10nBuilders(platform).iteritems():
+ if releaseConfig['productName'] == 'fennec':
+ repack_factory = ScriptFactory(
+ scriptRepo=tools_repo,
+ interpreter='bash',
+ scriptName='scripts/l10n/release_mobile_repacks.sh',
+ extra_args=[platform, branchConfigFile,
+ str(l10nChunks), str(n)]
+ )
+ else:
+ repack_factory = ScriptFactory(
+ scriptRepo=tools_repo,
+ interpreter='bash',
+ scriptName='scripts/l10n/release_repacks.sh',
+ extra_args=[platform, branchConfigFile,
+ str(l10nChunks), str(n)]
+ )
+
builddir = builderPrefix('%s_repack' % platform) + \
'_' + str(n)
env = builder_env.copy()
@@ -788,7 +900,11 @@ def majorUpdateVerifyBuilders(platform):
'factory': repack_factory,
'nextSlave': _nextFastReservedSlave,
'env': env,
- 'properties': {'builddir': builddir, 'slavebuilddir': reallyShort(builddir)}
+ 'properties': {
+ 'builddir': builddir,
+ 'slavebuilddir': reallyShort(builddir),
+ 'release_config': releaseConfigFile,
+ }
})
builders.append(makeDummyBuilder(
@@ -812,7 +928,7 @@ def majorUpdateVerifyBuilders(platform):
suites_name, suites, mochitestLeakThreshold,
crashtestLeakThreshold, category=builderPrefix('')))
- for platform in releaseConfig['xulrunnerPlatforms']:
+ for platform in releaseConfig.get('xulrunnerPlatforms', []):
pf = branchConfig['platforms'][platform]
xr_env = pf['env'].copy()
xr_env['SYMBOL_SERVER_USER'] = branchConfig['stage_username_xulrunner']
@@ -862,6 +978,8 @@ def majorUpdateVerifyBuilders(platform):
'properties': {'slavebuilddir':
reallyShort(builderPrefix('xulrunner_%s_build' % platform))}
})
+ notify_builders.append(
+ builderPrefix('xulrunner_%s_build' % platform))
else:
builders.append(makeDummyBuilder(
name=builderPrefix('xulrunner_%s_build' % platform),
@@ -870,72 +988,87 @@ def majorUpdateVerifyBuilders(platform):
))
if releaseConfig['doPartnerRepacks']:
- for platform in releaseConfig['l10nPlatforms']:
- partner_repack_factory = PartnerRepackFactory(
- hgHost=branchConfig['hghost'],
- repoPath=sourceRepoInfo['path'],
- buildToolsRepoPath=tools_repo_path,
- productName=releaseConfig['productName'],
- version=releaseConfig['version'],
- buildNumber=releaseConfig['buildNumber'],
- partnersRepoPath=releaseConfig['partnersRepoPath'],
- partnersRepoRevision=releaseTag,
- platformList=[platform],
- stagingServer=releaseConfig['stagingServer'],
- stageUsername=branchConfig['stage_username'],
- stageSshKey=branchConfig['stage_ssh_key'],
- )
+ for platform in releaseConfig.get('partnerRepackPlatforms',
+ releaseConfig['l10nPlatforms']):
+ repack_params = dict(
+ hgHost=branchConfig['hghost'],
+ repoPath=sourceRepoInfo['path'],
+ buildToolsRepoPath=tools_repo_path,
+ productName=releaseConfig['productName'],
+ version=releaseConfig['version'],
+ buildNumber=releaseConfig['buildNumber'],
+ partnersRepoPath=releaseConfig['partnersRepoPath'],
+ partnersRepoRevision=releaseTag,
+ platformList=[platform],
+ stagingServer=releaseConfig['stagingServer'],
+ stageUsername=branchConfig['stage_username'],
+ stageSshKey=branchConfig['stage_ssh_key'],
+ )
- if 'macosx64' in branchConfig['platforms']:
- slaves = branchConfig['platforms']['macosx64']['slaves']
- else:
- slaves = branchConfig['platforms']['macosx']['slaves']
- builders.append({
- 'name': builderPrefix('partner_repack', platform),
- 'slavenames': slaves,
- 'category': builderPrefix(''),
- 'builddir': builderPrefix('partner_repack', platform),
- 'slavebuilddir': reallyShort(builderPrefix('partner_repack', platform)),
- 'factory': partner_repack_factory,
- 'nextSlave': _nextFastReservedSlave,
- 'env': builder_env,
- 'properties': {'slavebuilddir':
- reallyShort(builderPrefix('partner_repack', platform))}
- })
-
- for platform in releaseConfig['l10nPlatforms']:
- l10n_verification_factory = L10nVerifyFactory(
- hgHost=branchConfig['hghost'],
- buildToolsRepoPath=tools_repo_path,
- cvsroot=releaseConfig['cvsroot'],
- stagingServer=releaseConfig['stagingServer'],
- productName=releaseConfig['productName'],
- version=releaseConfig['version'],
- buildNumber=releaseConfig['buildNumber'],
- oldVersion=releaseConfig['oldVersion'],
- oldBuildNumber=releaseConfig['oldBuildNumber'],
- clobberURL=branchConfig['base_clobber_url'],
- platform=platform,
- )
+ if 'macosx64' in branchConfig['platforms']:
+ slaves = branchConfig['platforms']['macosx64']['slaves']
+ else:
+ slaves = branchConfig['platforms']['macosx']['slaves']
- if 'macosx64' in branchConfig['platforms']:
- slaves = branchConfig['platforms']['macosx64']['slaves']
- else:
- slaves = branchConfig['platforms']['macosx']['slaves']
- builders.append({
- 'name': builderPrefix('l10n_verification', platform),
- 'slavenames': slaves,
- 'category': builderPrefix(''),
- 'builddir': builderPrefix('l10n_verification', platform),
- 'slavebuilddir': reallyShort(builderPrefix('l10n_verification', platform)),
- 'factory': l10n_verification_factory,
- 'nextSlave': _nextFastReservedSlave,
- 'env': builder_env,
- 'properties': {'slavebuilddir':
- reallyShort(builderPrefix('l10n_verification', platform))}
- })
+ if releaseConfig['productName'] == 'fennec':
+ repack_params['productName'] = 'mobile'
+ repack_params['platformList'] = [branchConfig['platforms'][platform].get('stage_platform')]
+ repack_params['nightlyDir'] = 'candidates'
+ repack_params['packageDmg'] = False
+ slaves = branchConfig['platforms']['linux']['slaves']
- if not releaseConfig.get('skip_updates'):
+ partner_repack_factory = PartnerRepackFactory(**repack_params)
+
+ builders.append({
+ 'name': builderPrefix('partner_repack', platform),
+ 'slavenames': slaves,
+ 'category': builderPrefix(''),
+ 'builddir': builderPrefix('partner_repack', platform),
+ 'slavebuilddir': reallyShort(builderPrefix(
+ 'partner_repack', platform)),
+ 'factory': partner_repack_factory,
+ 'nextSlave': _nextFastReservedSlave,
+ 'env': builder_env,
+ 'properties': {'slavebuilddir':
+ reallyShort(builderPrefix(
+ 'partner_repack', platform))}
+ })
+
+ if not releaseConfig.get('disableL10nVerification'):
+ for platform in releaseConfig['l10nPlatforms']:
+ l10n_verification_factory = L10nVerifyFactory(
+ hgHost=branchConfig['hghost'],
+ buildToolsRepoPath=tools_repo_path,
+ cvsroot=releaseConfig['cvsroot'],
+ stagingServer=releaseConfig['stagingServer'],
+ productName=releaseConfig['productName'],
+ version=releaseConfig['version'],
+ buildNumber=releaseConfig['buildNumber'],
+ oldVersion=releaseConfig['oldVersion'],
+ oldBuildNumber=releaseConfig['oldBuildNumber'],
+ clobberURL=branchConfig['base_clobber_url'],
+ platform=platform,
+ )
+
+ if 'macosx64' in branchConfig['platforms']:
+ slaves = branchConfig['platforms']['macosx64']['slaves']
+ else:
+ slaves = branchConfig['platforms']['macosx']['slaves']
+ builders.append({
+ 'name': builderPrefix('l10n_verification', platform),
+ 'slavenames': slaves,
+ 'category': builderPrefix(''),
+ 'builddir': builderPrefix('l10n_verification', platform),
+ 'slavebuilddir': reallyShort(builderPrefix('l10n_verification', platform)),
+ 'factory': l10n_verification_factory,
+ 'nextSlave': _nextFastReservedSlave,
+ 'env': builder_env,
+ 'properties': {'slavebuilddir':reallyShort(
+ builderPrefix('l10n_verification', platform))}
+ })
+
+ if releaseConfig.get('verifyConfigs') and \
+ not releaseConfig.get('skip_updates'):
updates_factory = ReleaseUpdatesFactory(
hgHost=branchConfig['hghost'],
repoPath=sourceRepoInfo['path'],
@@ -990,7 +1123,7 @@ def majorUpdateVerifyBuilders(platform):
'env': builder_env,
'properties': {'slavebuilddir': reallyShort(builderPrefix('updates'))}
})
- else:
+ elif releaseConfig.get('verifyConfigs'):
builders.append(makeDummyBuilder(
name=builderPrefix('updates'),
slaves=all_slaves,
@@ -998,7 +1131,7 @@ def majorUpdateVerifyBuilders(platform):
))
- for platform in sorted(releaseConfig['verifyConfigs'].keys()):
+ for platform in sorted(releaseConfig.get('verifyConfigs', {}).keys()):
for n, builderName in updateVerifyBuilders(platform).iteritems():
uv_factory = ScriptFactory(
scriptRepo=tools_repo,
@@ -1030,74 +1163,79 @@ def majorUpdateVerifyBuilders(platform):
'release_config': releaseConfigFile},
})
- check_permissions_factory = ScriptFactory(
- scriptRepo=tools_repo,
- extra_args=[branchConfigFile, 'permissions'],
- script_timeout=3*60*60,
- scriptName='scripts/release/push-to-mirrors.sh',
- )
+ if not releaseConfig.get('disablePermissionCheck'):
+ check_permissions_factory = ScriptFactory(
+ scriptRepo=tools_repo,
+ extra_args=[branchConfigFile, 'permissions'],
+ script_timeout=3*60*60,
+ scriptName='scripts/release/push-to-mirrors.sh',
+ )
- builders.append({
- 'name': builderPrefix('check_permissions'),
- 'slavenames': unix_slaves,
- 'category': builderPrefix(''),
- 'builddir': builderPrefix('check_permissions'),
- 'slavebuilddir': reallyShort(builderPrefix('chk_prms')),
- 'factory': check_permissions_factory,
- 'env': builder_env,
- 'properties': {'slavebuilddir': reallyShort(builderPrefix('chk_prms')),
- 'script_repo_revision': releaseTag,
- 'release_config': releaseConfigFile},
- })
-
- antivirus_factory = ScriptFactory(
- scriptRepo=tools_repo,
- extra_args=[branchConfigFile, 'antivirus'],
- script_timeout=3*60*60,
- scriptName='scripts/release/push-to-mirrors.sh',
- )
+ builders.append({
+ 'name': builderPrefix('check_permissions'),
+ 'slavenames': unix_slaves,
+ 'category': builderPrefix(''),
+ 'builddir': builderPrefix('check_permissions'),
+ 'slavebuilddir': reallyShort(builderPrefix('chk_prms')),
+ 'factory': check_permissions_factory,
+ 'env': builder_env,
+ 'properties': {'slavebuilddir': reallyShort(builderPrefix('chk_prms')),
+ 'script_repo_revision': releaseTag,
+ 'release_config': releaseConfigFile},
+ })
- builders.append({
- 'name': builderPrefix('antivirus'),
- 'slavenames': unix_slaves,
- 'category': builderPrefix(''),
- 'builddir': builderPrefix('antivirus'),
- 'slavebuilddir': reallyShort(builderPrefix('av')),
- 'factory': antivirus_factory,
- 'env': builder_env,
- 'properties': {'slavebuilddir': reallyShort(builderPrefix('av')),
- 'script_repo_revision': releaseTag,
- 'release_config': releaseConfigFile},
- })
-
- push_to_mirrors_factory = ScriptFactory(
- scriptRepo=tools_repo,
- extra_args=[branchConfigFile, 'push'],
- script_timeout=3*60*60,
- scriptName='scripts/release/push-to-mirrors.sh',
- )
+ if not releaseConfig.get('disableVirusCheck'):
+ antivirus_factory = ScriptFactory(
+ scriptRepo=tools_repo,
+ extra_args=[branchConfigFile, 'antivirus'],
+ script_timeout=3*60*60,
+ scriptName='scripts/release/push-to-mirrors.sh',
+ )
- push_to_mirrors_factory.addStep(Trigger(
- schedulerNames=[builderPrefix('ready-for-rel-test'),
- builderPrefix('ready-for-release')],
- copy_properties=['script_repo_revision', 'release_config']
- ))
+ builders.append({
+ 'name': builderPrefix('antivirus'),
+ 'slavenames': unix_slaves,
+ 'category': builderPrefix(''),
+ 'builddir': builderPrefix('antivirus'),
+ 'slavebuilddir': reallyShort(builderPrefix('av')),
+ 'factory': antivirus_factory,
+ 'env': builder_env,
+ 'properties': {'slavebuilddir': reallyShort(builderPrefix('av')),
+ 'script_repo_revision': releaseTag,
+ 'release_config': releaseConfigFile},
+ })
+
+ if not releaseConfig.get('disablePushToMirrors'):
+ push_to_mirrors_factory = ScriptFactory(
+ scriptRepo=tools_repo,
+ extra_args=[branchConfigFile, 'push'],
+ script_timeout=3*60*60,
+ scriptName='scripts/release/push-to-mirrors.sh',
+ )
+
+ push_to_mirrors_factory.addStep(Trigger(
+ schedulerNames=[builderPrefix('ready-for-rel-test'),
+ builderPrefix('ready-for-release')],
+ copy_properties=['script_repo_revision', 'release_config']
+ ))
- builders.append({
- 'name': builderPrefix('push_to_mirrors'),
- 'slavenames': unix_slaves,
- 'category': builderPrefix(''),
- 'builddir': builderPrefix('push_to_mirrors'),
- 'slavebuilddir': reallyShort(builderPrefix('psh_mrrrs')),
- 'factory': push_to_mirrors_factory,
- 'env': builder_env,
- 'properties': {'slavebuilddir':
- reallyShort(builderPrefix('psh_mrrrs'))},
- })
- notify_builders.append(builderPrefix('push_to_mirrors'))
-
- for platform in releaseConfig['verifyConfigs'].keys():
+ builders.append({
+ 'name': builderPrefix('push_to_mirrors'),
+ 'slavenames': unix_slaves,
+ 'category': builderPrefix(''),
+ 'builddir': builderPrefix('push_to_mirrors'),
+ 'slavebuilddir': reallyShort(builderPrefix('psh_mrrrs')),
+ 'factory': push_to_mirrors_factory,
+ 'env': builder_env,
+ 'properties': {
+ 'slavebuilddir': reallyShort(builderPrefix('psh_mrrrs')),
+ 'release_config': releaseConfigFile
+ },
+ })
+ notify_builders.append(builderPrefix('push_to_mirrors'))
+
+ for platform in releaseConfig.get('verifyConfigs', {}).keys():
final_verification_factory = ReleaseFinalVerification(
hgHost=branchConfig['hghost'],
platforms=[platform],
@@ -1108,7 +1246,8 @@ def majorUpdateVerifyBuilders(platform):
builders.append({
'name': builderPrefix('final_verification', platform),
- 'slavenames': branchConfig['platforms']['linux']['slaves'] + branchConfig['platforms']['linux64']['slaves'],
+ 'slavenames': branchConfig['platforms']['linux']['slaves'] + \
+ branchConfig['platforms']['linux64']['slaves'],
'category': builderPrefix(''),
'builddir': builderPrefix('final_verification', platform),
'slavebuilddir': reallyShort(builderPrefix('fnl_verf', platform)),
@@ -1119,21 +1258,22 @@ def majorUpdateVerifyBuilders(platform):
reallyShort(builderPrefix('fnl_verf', platform))}
})
- builders.append(makeDummyBuilder(
- name=builderPrefix('ready_for_releasetest_testing'),
- slaves=all_slaves,
- category=builderPrefix(''),
- ))
- notify_builders.append(builderPrefix('ready_for_releasetest_testing'))
+ if not releaseConfig.get('disableBouncerEntries'):
+ builders.append(makeDummyBuilder(
+ name=builderPrefix('ready_for_releasetest_testing'),
+ slaves=all_slaves,
+ category=builderPrefix(''),
+ ))
+ notify_builders.append(builderPrefix('ready_for_releasetest_testing'))
- builders.append(makeDummyBuilder(
- name=builderPrefix('ready_for_release'),
- slaves=all_slaves,
- category=builderPrefix(''),
- ))
- notify_builders.append(builderPrefix('ready_for_release'))
+ builders.append(makeDummyBuilder(
+ name=builderPrefix('ready_for_release'),
+ slaves=all_slaves,
+ category=builderPrefix(''),
+ ))
+ notify_builders.append(builderPrefix('ready_for_release'))
- if releaseConfig['majorUpdateRepoPath']:
+ if releaseConfig.get('majorUpdateRepoPath'):
# Not attached to any Scheduler
major_update_factory = MajorUpdateFactory(
hgHost=branchConfig['hghost'],
@@ -1220,65 +1360,101 @@ def majorUpdateVerifyBuilders(platform):
'release_config': releaseConfigFile},
})
- bouncer_submitter_factory = TuxedoEntrySubmitterFactory(
- baseTag=releaseConfig['baseTag'],
- appName=releaseConfig['appName'],
- config=releaseConfig['tuxedoConfig'],
- productName=releaseConfig['productName'],
- version=releaseConfig['version'],
- milestone=releaseConfig['milestone'],
- tuxedoServerUrl=releaseConfig['tuxedoServerUrl'],
- enUSPlatforms=releaseConfig['enUSPlatforms'],
- l10nPlatforms=releaseConfig['l10nPlatforms'],
- extraPlatforms=releaseConfig.get('extraBouncerPlatforms'),
- oldVersion=releaseConfig['oldVersion'],
- hgHost=branchConfig['hghost'],
- repoPath=sourceRepoInfo['path'],
- buildToolsRepoPath=tools_repo_path,
- credentialsFile=os.path.join(os.getcwd(), "BuildSlaves.py")
- )
-
- builders.append({
- 'name': builderPrefix('bouncer_submitter'),
- 'slavenames': branchConfig['platforms']['linux']['slaves'] + branchConfig['platforms']['linux64']['slaves'],
- 'category': builderPrefix(''),
- 'builddir': builderPrefix('bouncer_submitter'),
- 'slavebuilddir': reallyShort(builderPrefix('bncr_sub')),
- 'factory': bouncer_submitter_factory,
- 'env': builder_env,
- 'properties': {'slavebuilddir':
- reallyShort(builderPrefix('bncr_sub'))}
- })
-
- if releaseConfig['doPartnerRepacks']:
- euballot_bouncer_submitter_factory = TuxedoEntrySubmitterFactory(
+ if not releaseConfig.get('disableBouncerEntries'):
+ bouncer_submitter_factory = TuxedoEntrySubmitterFactory(
baseTag=releaseConfig['baseTag'],
appName=releaseConfig['appName'],
config=releaseConfig['tuxedoConfig'],
productName=releaseConfig['productName'],
- bouncerProductSuffix='EUballot',
version=releaseConfig['version'],
milestone=releaseConfig['milestone'],
tuxedoServerUrl=releaseConfig['tuxedoServerUrl'],
- enUSPlatforms=('win32-EUballot',),
- l10nPlatforms=None, # not needed
- oldVersion=None, # no updates
+ enUSPlatforms=releaseConfig['enUSPlatforms'],
+ l10nPlatforms=releaseConfig['l10nPlatforms'],
+ extraPlatforms=releaseConfig.get('extraBouncerPlatforms'),
+ oldVersion=releaseConfig['oldVersion'],
hgHost=branchConfig['hghost'],
repoPath=sourceRepoInfo['path'],
buildToolsRepoPath=tools_repo_path,
- credentialsFile=os.path.join(os.getcwd(), "BuildSlaves.py"),
+ credentialsFile=os.path.join(os.getcwd(), "BuildSlaves.py")
)
builders.append({
- 'name': builderPrefix('euballot_bouncer_submitter'),
- 'slavenames': branchConfig['platforms']['linux']['slaves'] + branchConfig['platforms']['linux64']['slaves'],
+ 'name': builderPrefix('bouncer_submitter'),
+ 'slavenames': branchConfig['platforms']['linux']['slaves'] + \
+ branchConfig['platforms']['linux64']['slaves'],
'category': builderPrefix(''),
- 'builddir': builderPrefix('euballot_bouncer_submitter'),
- 'slavebuilddir': reallyShort(builderPrefix('eu_bncr_sub')),
- 'factory': euballot_bouncer_submitter_factory,
+ 'builddir': builderPrefix('bouncer_submitter'),
+ 'slavebuilddir': reallyShort(builderPrefix('bncr_sub')),
+ 'factory': bouncer_submitter_factory,
'env': builder_env,
- 'properties': {'slavebuilddir':
- reallyShort(builderPrefix('eu_bncr_sub'))}
+ 'properties': {
+ 'slavebuilddir': reallyShort(builderPrefix('bncr_sub')),
+ 'release_config': releaseConfigFile,
+ }
+ })
+
+ if releaseConfig['doPartnerRepacks']:
+ euballot_bouncer_submitter_factory = TuxedoEntrySubmitterFactory(
+ baseTag=releaseConfig['baseTag'],
+ appName=releaseConfig['appName'],
+ config=releaseConfig['tuxedoConfig'],
+ productName=releaseConfig['productName'],
+ bouncerProductSuffix='EUballot',
+ version=releaseConfig['version'],
+ milestone=releaseConfig['milestone'],
+ tuxedoServerUrl=releaseConfig['tuxedoServerUrl'],
+ enUSPlatforms=('win32-EUballot',),
+ l10nPlatforms=None, # not needed
+ oldVersion=None, # no updates
+ hgHost=branchConfig['hghost'],
+ repoPath=sourceRepoInfo['path'],
+ buildToolsRepoPath=tools_repo_path,
+ credentialsFile=os.path.join(os.getcwd(), "BuildSlaves.py"),
+ )
+
+ builders.append({
+ 'name': builderPrefix('euballot_bouncer_submitter'),
+ 'slavenames': branchConfig['platforms']['linux']['slaves'] + \
+ branchConfig['platforms']['linux64']['slaves'],
+ 'category': builderPrefix(''),
+ 'builddir': builderPrefix('euballot_bouncer_submitter'),
+ 'slavebuilddir': reallyShort(builderPrefix('eu_bncr_sub')),
+ 'factory': euballot_bouncer_submitter_factory,
+ 'env': builder_env,
+ 'properties': {
+ 'slavebuilddir': reallyShort(builderPrefix('eu_bncr_sub')),
+ 'release_config': releaseConfigFile,
+ }
+ })
+
+ if releaseConfig['productName'] == 'fennec':
+ # TODO: remove android_signature_verification related parts when the
+ # verification procedure moved to post singing scripts
+ envJava = builder_env.copy()
+ envJava['PATH'] = '/tools/jdk6/bin:%s' % envJava.get(
+ 'PATH', ':'.join(('/opt/local/bin', '/tools/python/bin',
+ '/tools/buildbot/bin', '/usr/kerberos/bin',
+ '/usr/local/bin', '/bin', '/usr/bin',
+ '/home/cltbld/bin')))
+ signature_verification_factory = ScriptFactory(
+ scriptRepo=tools_repo,
+ scriptName='release/signing/verify-android-signature.sh',
+ extra_args=['--tools-dir=scripts/', '--release',
+ WithProperties('--apk=%(who)s')]
+ )
+ builders.append({
+ 'name': builderPrefix('android_signature_verification'),
+ 'slavenames': branchConfig['platforms']['linux']['slaves'],
+ 'category': builderPrefix(''),
+ 'builddir': builderPrefix('android_verify_sig'),
+ 'factory': signature_verification_factory,
+ 'env': envJava,
+ 'properties': {
+ 'builddir': builderPrefix('android_verify_sig'),
+ 'slavebuilddir':
+ reallyShort(builderPrefix('android_verify_sig')),
+ },
})
# Separate email messages per list. Mailman doesn't try to avoid duplicate
@@ -1295,18 +1471,21 @@ def majorUpdateVerifyBuilders(platform):
extraRecipients=[recipient],
branches=[sourceRepoInfo['path']],
messageFormatter=createReleaseChangeMessage,
+ changeIsImportant=lambda c: \
+ changeContainsProduct(c, releaseConfig['productName'])
))
for recipient in releaseConfig['AllRecipients'] + \
releaseConfig['PassRecipients']:
- #send a message when signing is complete
- status.append(ChangeNotifier(
- fromaddr="release@mozilla.com",
- relayhost="mail.build.mozilla.org",
- sendToInterestedUsers=False,
- extraRecipients=[recipient],
- branches=[builderPrefix('post_signing')],
- messageFormatter=createReleaseChangeMessage,
- ))
+ if releaseConfig['productName'] == 'firefox':
+ #send a message when signing is complete
+ status.append(ChangeNotifier(
+ fromaddr="release@mozilla.com",
+ relayhost="mail.build.mozilla.org",
+ sendToInterestedUsers=False,
+ extraRecipients=[recipient],
+ branches=[builderPrefix('post_signing')],
+ messageFormatter=createReleaseChangeMessage,
+ ))
#send the nice(passing) release messages
status.append(MailNotifier(
@@ -1325,20 +1504,21 @@ def majorUpdateVerifyBuilders(platform):
sendToInterestedUsers=False,
extraRecipients=releaseConfig['AllRecipients'],
mode='all',
- categories=[builderPrefix('')],
+ builders=[b['name'] for b in builders + test_builders],
relayhost='mail.build.mozilla.org',
messageFormatter=createReleaseMessage,
))
- status.append(MailNotifier(
- fromaddr='release@mozilla.com',
- sendToInterestedUsers=False,
- extraRecipients=releaseConfig['AVVendorsRecipients'],
- mode='passing',
- builders=[builderPrefix('updates')],
- relayhost='mail.build.mozilla.org',
- messageFormatter=createReleaseAVVendorsMessage,
- ))
+ if releaseConfig.get('AVVendorsRecipients'):
+ status.append(MailNotifier(
+ fromaddr='release@mozilla.com',
+ sendToInterestedUsers=False,
+ extraRecipients=releaseConfig['AVVendorsRecipients'],
+ mode='passing',
+ builders=[builderPrefix('updates')],
+ relayhost='mail.build.mozilla.org',
+ messageFormatter=createReleaseAVVendorsMessage,
+ ))
status.append(TinderboxMailNotifier(
fromaddr="mozilla2.buildbot@build.mozilla.org",
@@ -1361,8 +1541,11 @@ def majorUpdateVerifyBuilders(platform):
builders.extend(test_builders)
+ product = releaseConfig['productName']
+ if product == 'fennec':
+ product = 'mobile'
logUploadCmd = makeLogUploadCommand(sourceRepoInfo['name'], branchConfig,
- platform_prop=None, product=releaseConfig['productName'])
+ platform_prop=None, product=product)
status.append(SubprocessLogHandler(
logUploadCmd + [
View
19 status/mail.py
@@ -4,7 +4,7 @@
from zope.interface import implements
from twisted.internet import defer
from twisted.mail.smtp import sendmail
-from twisted.python import log as twlog
+from twisted.python import log as twlog, failure
from buildbot import interfaces
from buildbot.status import base
@@ -28,13 +28,14 @@ class ChangeNotifier(base.StatusReceiverMultiService):
compare_attrs = ('fromaddr', 'categories', 'branches', 'subject',
'relayhost', 'lookup', 'extraRecipients', 'sendToInterestedUsers',
'messageFormatter', 'extraHeaders', 'smtpUser', 'smtpPassword',
- 'smtpPort')
+ 'smtpPort', 'changeIsImportant')
def __init__(self, fromaddr, categories=None, branches=None,
subject="Notifcation of change %(revision)s on branch %(branch)s",
relayhost="localhost", lookup=None, extraRecipients=None,
sendToInterestedUsers=True, messageFormatter=defaultChangeMessage,
- extraHeaders=None, smtpUser=None, smtpPassword=None, smtpPort=25):
+ extraHeaders=None, smtpUser=None, smtpPassword=None, smtpPort=25,
+ changeIsImportant=None):
base.StatusReceiverMultiService.__init__(self)
@@ -57,6 +58,9 @@ def __init__(self, fromaddr, categories=None, branches=None,
self.extraHeaders = extraHeaders
self.messageFormatter = messageFormatter
self.sendToInterestedUsers = sendToInterestedUsers
+ if changeIsImportant:
+ assert callable(changeIsImportant)
+ self.changeIsImportant = changeIsImportant
if extraRecipients:
assert isinstance(extraRecipients, (list, tuple))
for r in extraRecipients:
@@ -91,6 +95,15 @@ def changeAdded(self, change):
if self.categories and change.category not in self.categories:
return
+ if self.changeIsImportant:
+ try:
+ if not self.changeIsImportant(change):
+ return
+ except:
+ twlog.err(failure.Failure(),
+ 'in changeIsImportant check for %s' % change)
+ return
+
return self.buildMessage(change)
def createEmail(self, msgdict, change):
Please sign in to comment.
Something went wrong with that request. Please try again.