--- a/misc.py
+++ b/misc.py
@@ -44,17 +44,18 @@ reload(buildbotcustom.status.generators)
reload(buildbotcustom.misc_scheduler)
reload(build.paths)
reload(mozilla_buildtools.queuedir)
from buildbotcustom.common import normalizeName
from buildbotcustom.changes.hgpoller import HgPoller, HgAllLocalesPoller
from buildbotcustom.process.factory import NightlyBuildFactory, \
NightlyRepackFactory, UnittestPackagedBuildFactory, \
- TryBuildFactory, ScriptFactory, SigningScriptFactory, rc_eval_func
+ TryBuildFactory, ScriptFactory, SigningScriptFactory, rc_eval_func, \
+ PartnerRepackFactory
from buildbotcustom.scheduler import BuilderChooserScheduler, \
PersistentScheduler, makePropertiesScheduler, SpecificNightly, EveryNthScheduler
from buildbotcustom.l10n import TriggerableL10n
from buildbotcustom.status.mail import MercurialEmailLookup, ChangeNotifier
from buildbotcustom.status.generators import buildTryChangeMessage
from buildbotcustom.env import MozillaEnvironments
from buildbotcustom.misc_scheduler import tryChooser, buildIDSchedFunc, \
buildUIDSchedFunc, lastGoodFunc, lastRevFunc
@@ -3402,49 +3403,88 @@ def generateReleasePromotionObjects(conf
'builders': builders,
'schedulers': schedulers,
'status': status,
'change_source': change_sources,
}
topLevelBuilders = []
pf_linux64 = config['platforms']['linux64']
+ pf_macosx64 = config['platforms']['macosx64']
signing_servers = secrets.get(pf_linux64.get('dep_signing_servers'))
# source builder
source_buildername = '%s_source' % name
source_factory = makeMHFactory(config, pf_linux64,
mh_cfg=pf_linux64['mozharness_desktop_build'],
extra_args=pf_linux64['mozharness_desktop_build'].get('extra_args', []) + \
['--custom-build-variant-cfg', 'source'],
signingServers=signing_servers)
source_builder = {
'name': source_buildername,
'factory': source_factory,
'builddir': source_buildername,
+ 'slavebuilddir': normalizeName(source_buildername, config['product_name']),
'slavenames': pf_linux64['slaves'],
'category': name,
'properties': {
'branch': name,
'platform': 'source',
- 'product': pf_linux64['stage_product'],
+ 'product': config['product_name'],
'repo_path': config['repo_path'],
'script_repo_revision': config["mozharness_tag"],
},
}
topLevelBuilders.append(source_buildername)
builders.append(source_builder)
- # To add short-term: partner-repack
- # Longer-term: l10n repacks, funsize partials, antivirus, checksums etc
+ # partner repacks
+ base_partner_repack_params = dict(
+ hgHost=config['hghost'],
+ repoPath=config['repo_path'],
+ buildToolsRepoPath=config['build_tools_repo_path'],
+ productName=config['product_name'],
+ partnersRepoPath=config['partners_repo_path'],
+ partnersRepoRevision='default',
+ stagingServer=config['stage_server'],
+ stageUsername=config['stage_username'],
+ stageSshKey=config['stage_ssh_key'],
+ signingServers=signing_servers,
+ env=pf_macosx64['env'],
+ nightlyDir=None,
+ releasePromotion=True,
+ )
+ for platform in config['partner_repack_platforms']:
+ partner_repack_params = base_partner_repack_params.copy()
+ partner_repack_params['platformList'] = [platform]
+ partner_repack_factory = PartnerRepackFactory(**partner_repack_params)
+
+ partner_buildername = '%s_%s_partner_repack' % (name, platform)
+ builders.append({
+ 'name': partner_buildername,
+ 'slavenames': pf_macosx64['slaves'],
+ 'category': name,
+ 'builddir': partner_buildername,
+ 'slavebuilddir': normalizeName(partner_buildername, config['product_name']),
+ 'factory': partner_repack_factory,
+ 'properties': {
+ 'slavebuilddir': normalizeName(partner_buildername, config['product_name']),
+ 'branch': name,
+ 'platform': platform,
+ 'product': config['product_name'],
+ }
+ })
+ topLevelBuilders.append(partner_buildername)
+
+ # To add longer-term: l10n repacks, funsize partials, antivirus, checksums etc
# sendchange listener
starting_scheduler = Scheduler(
name='%s_start_promotion' % name,
- branch='%s-build-promotion' % name,
+ branch='%s-release-promotion' % name,
treeStableTimer=None,
builderNames=topLevelBuilders,
)
schedulers.append(starting_scheduler)
return buildObjects
--- a/process/factory.py
+++ b/process/factory.py
@@ -1,8 +1,9 @@
+
from __future__ import absolute_import
import os.path
import re
import random
from distutils.version import LooseVersion
from twisted.python import log
@@ -4625,41 +4626,46 @@ class UnittestPackagedBuildFactory(Mozil
class PartnerRepackFactory(ReleaseFactory):
def getReleaseTag(self, product, version):
return product.upper() + '_' + \
str(version).replace('.', '_') + '_' + \
'RELEASE'
- def __init__(self, productName, version, partnersRepoPath,
+ def __init__(self, productName, partnersRepoPath,
stagingServer, stageUsername, stageSshKey,
- buildNumber=1, partnersRepoRevision='default',
+ version=None, buildNumber=1, partnersRepoRevision='default',
nightlyDir="nightly", platformList=None, packageDmg=True,
partnerUploadDir='unsigned/partner-repacks',
- baseWorkDir='.', python='python', **kwargs):
+ baseWorkDir='.', python='python', releasePromotion=False,
+ **kwargs):
ReleaseFactory.__init__(self, baseWorkDir=baseWorkDir, **kwargs)
self.productName = productName
self.version = version
self.buildNumber = buildNumber
self.partnersRepoPath = partnersRepoPath
self.partnersRepoRevision = partnersRepoRevision
self.stagingServer = stagingServer
self.stageUsername = stageUsername
self.stageSshKey = stageSshKey
self.partnersRepackDir = '%s/partner-repacks' % self.baseWorkDir
self.partnerUploadDir = partnerUploadDir
self.packageDmg = packageDmg
self.python = python
self.platformList = platformList
- self.candidatesDir = self.getCandidatesDir(productName,
- version,
- buildNumber,
- nightlyDir=nightlyDir)
- self.releaseTag = self.getReleaseTag(productName, version)
+ self.releasePromotion = releasePromotion
+
+ if not self.releasePromotion:
+ self.candidatesDir = self.getCandidatesDir(productName,
+ version,
+ buildNumber,
+ nightlyDir=nightlyDir)
+ self.releaseTag = self.getReleaseTag(productName, version)
+
self.extraRepackArgs = []
if nightlyDir:
self.extraRepackArgs.extend(['--nightly-dir', '%s/%s' %
(productName, nightlyDir)])
if self.packageDmg:
self.extraRepackArgs.extend(['--pkg-dmg',
WithProperties('%(scriptsdir)s/pkg-dmg')])
if platformList:
@@ -4683,20 +4689,26 @@ class PartnerRepackFactory(ReleaseFactor
repo_url='https://%s/%s' % (self.hgHost, self.partnersRepoPath),
wc=self.partnersRepackDir,
workdir=self.baseWorkDir,
rev=self.partnersRepoRevision,
env=self.env,
use_properties=False,
))
if self.packageDmg:
+ if self.releasePromotion:
+ command=['bash', '-c',
+ WithProperties('wget https://hg.mozilla.org/' + self.repoPath +
+ '/raw-file/%(revision)s/build/package/mac_osx/pkg-dmg')]
+ else:
+ command=['bash', '-c',
+ 'wget https://hg.mozilla.org/%s/raw-file/%s/build/package/mac_osx/pkg-dmg' % (self.repoPath, self.releaseTag)]
self.addStep(ShellCommand(
name='download_pkg-dmg',
- command=['bash', '-c',
- 'wget https://hg.mozilla.org/%s/raw-file/%s/build/package/mac_osx/pkg-dmg' % (self.repoPath, self.releaseTag)],
+ command=command,
description=['download', 'pkg-dmg'],
workdir='%s/scripts' % self.partnersRepackDir,
haltOnFailure=True
))
self.addStep(ShellCommand(
name='chmod_pkg-dmg',
command=['chmod', '755', 'pkg-dmg'],
description=['chmod', 'pkg-dmg'],
@@ -4704,85 +4716,88 @@ class PartnerRepackFactory(ReleaseFactor
haltOnFailure=True
))
self.addStep(SetProperty(
name='set_scriptsdir',
command=['bash', '-c', 'pwd'],
property='scriptsdir',
workdir='%s/scripts' % self.partnersRepackDir,
))
+ if self.releasePromotion:
+ self.addStep(SetProperty(
+ name='set_version',
+ command=['wget', '-q', '-O-',
+ WithProperties('https://hg.mozilla.org/' + self.repoPath +
+ '/raw-file/%(revision)s/browser/' +
+ 'config/version.txt')],
+ property='version',
+ workdir='%s/scripts' % self.partnersRepackDir,
+ ))
def doPartnerRepacks(self):
if self.enableSigning and self.signingServers:
- self.extraRepackArgs.append('--signed')
self.addGetTokenSteps()
pr_env = self.env.copy()
pr_env['PYTHONPATH'] = WithProperties('%(toolsdir)s/lib/python')
+ command=[self.python, './partner-repacks.py',
+ '--repo', self.repoPath,
+ '--hgroot', 'https://%s' % self.hgHost,
+ '--dmg-extract-script',
+ WithProperties(
+ '%(toolsdir)s/release/common/unpack-diskimage.sh'),
+ ]
+ if self.releasePromotion:
+ command.extend(['--use-tinderbox-builds',
+ '--revision', WithProperties('%(revision)s')])
+ else:
+ command.extend(['--version', str(self.version),
+ '--build-number', str(self.buildNumber),
+ '--staging-server', self.stagingServer])
+
self.addStep(RepackPartners(
name='repack_partner_builds',
- command=[self.python, './partner-repacks.py',
- '--version', str(self.version),
- '--build-number', str(self.buildNumber),
- '--repo', self.repoPath,
- '--hgroot', 'https://%s' % self.hgHost,
- '--staging-server', self.stagingServer,
- '--dmg-extract-script',
- WithProperties(
- '%(toolsdir)s/release/common/unpack-diskimage.sh'),
- ] + self.extraRepackArgs,
+ command=command + self.extraRepackArgs,
env=pr_env,
description=['repacking', 'partner', 'builds'],
descriptionDone=['repacked', 'partner', 'builds'],
workdir='%s/scripts' % self.partnersRepackDir,
haltOnFailure=True
))
def uploadPartnerRepacks(self):
- self.addStep(ShellCommand(
- name='upload_partner_builds',
- command=['rsync', '-av',
- '-e', 'ssh -oIdentityFile=~/.ssh/%s' % self.stageSshKey,
- 'build%s/' % str(self.buildNumber),
- '%s@%s:%s/' % (self.stageUsername,
- self.stagingServer,
- self.candidatesDir)
- ],
- workdir='%s/scripts/repacked_builds/%s' % (self.partnersRepackDir,
- self.version),
- description=['upload', 'partner', 'builds'],
- haltOnFailure=True
- ))
-
- if not self.enableSigning or not self.signingServers:
- for platform in self.platformList:
- self.addStep(ShellCommand(
- name='create_partner_build_directory',
- description=['create', 'partner', 'directory'],
- command=['bash', '-c',
- 'ssh -oIdentityFile=~/.ssh/%s %s@%s mkdir -p %s/%s/'
- % (self.stageSshKey, self.stageUsername,
- self.stagingServer, self.candidatesDir,
- self.partnerUploadDir),
- ],
- workdir='.',
- ))
- self.addStep(ShellCommand(
- name='upload_partner_build_status',
- command=['bash', '-c',
- 'ssh -oIdentityFile=~/.ssh/%s %s@%s touch %s/%s/%s'
- % (self.stageSshKey, self.stageUsername,
- self.stagingServer, self.candidatesDir,
- self.partnerUploadDir, 'partner_build_%s' % platform),
- ],
- workdir='%s/scripts/repacked_builds/%s/build%s' % (self.partnersRepackDir,
- self.version,
- str(self.buildNumber)),
- description=['upload', 'partner', 'status'],
- haltOnFailure=True
- ))
+ if self.releasePromotion:
+ self.addStep(ShellCommand(
+ name='upload_partner_builds',
+ command=['rsync', '-av',
+ '-e', 'ssh -oIdentityFile=~/.ssh/%s' % self.stageSshKey,
+ 'build%s/partner-repacks/' % str(self.buildNumber),
+ WithProperties(self.stageUsername + '@' + self.stagingServer +
+ ':/pub/mozilla.org/firefox/tinderbox-builds/' +
+ '%(branch)s-%(platform)s-partner_repack/'),
+ ],
+ workdir=WithProperties(self.partnersRepackDir +
+ '/scripts/repacked_builds/%(version)s'),
+ description=['upload', 'partner', 'builds'],
+ haltOnFailure=True
+ ))
+ else:
+ self.addStep(ShellCommand(
+ name='upload_partner_builds',
+ command=['rsync', '-av',
+ '-e', 'ssh -oIdentityFile=~/.ssh/%s' % self.stageSshKey,
+ 'build%s/' % str(self.buildNumber),
+ '%s@%s:%s/' % (self.stageUsername,
+ self.stagingServer,
+ self.candidatesDir)
+ ],
+ workdir='%s/scripts/repacked_builds/%s' % (self.partnersRepackDir,
+ self.version),
+ description=['upload', 'partner', 'builds'],
+ haltOnFailure=True
+ ))
def rc_eval_func(exit_statuses):
def eval_func(cmd, step):
rc = cmd.rc
# Temporarily set the rc to 0 so that regex_log_evaluator won't say a
# command has failed because of non-zero exit code. We're handing exit
# codes here.