--- a/process/factory.py
+++ b/process/factory.py
@@ -125,16 +125,17 @@ def postUploadCmdPrefix(upload_dir=None,
to_latest=False,
to_try=False,
to_candidates=False,
to_mobile_candidates=False,
nightly_dir=None,
as_list=True,
signed=False,
log=False,
+ bucket_prefix=None,
):
"""Returns a post_upload.py command line for the given arguments.
If as_list is True (the default), the command line will be returned as a
list of arguments. Some arguments may be WithProperties instances.
If as_list is False, the command will be returned as a WithProperties
instance representing the entire command line as a single string.
@@ -178,16 +179,18 @@ def postUploadCmdPrefix(upload_dir=None,
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 signed:
cmd.append("--signed")
+ if bucket_prefix:
+ cmd.extend(['--bucket-prefix', bucket_prefix])
if as_list:
return cmd
else:
# Remove WithProperties instances and replace them with their fmtstring
for i, a in enumerate(cmd):
if isinstance(a, WithProperties):
cmd[i] = a.fmtstring
@@ -2373,34 +2376,36 @@ class NightlyBuildFactory(MercurialBuild
comments=WithProperties('%(comments:-)s'),
sendchange_props=sendchange_props,
env=self.env,
))
class ReleaseBuildFactory(MercurialBuildFactory):
def __init__(
- self, env, version, buildNumber, partialUpdates, brandName=None,
+ self, env, version, buildNumber, partialUpdates, ftpServer, brandName=None,
unittestMasters=None, unittestBranch=None, talosMasters=None,
usePrettyNames=True, enableUpdatePackaging=True, appVersion=None,
- **kwargs):
+ bucketPrefix=None, **kwargs):
self.version = version
self.buildNumber = buildNumber
self.partialUpdates = partialUpdates
+ self.ftpServer = ftpServer
self.talosMasters = talosMasters or []
self.unittestMasters = unittestMasters or []
self.unittestBranch = unittestBranch
self.enableUpdatePackaging = enableUpdatePackaging
if self.unittestMasters:
assert self.unittestBranch
if brandName:
self.brandName = brandName
else:
self.brandName = kwargs['productName'].capitalize()
+ self.bucketPrefix = bucketPrefix
self.UPLOAD_EXTRA_FILES = []
# Copy the environment to avoid screwing up other consumers of
# MercurialBuildFactory
env = env.copy()
# Make sure MOZ_PKG_PRETTYNAMES is on and override MOZ_PKG_VERSION
# The latter is only strictly necessary for RCs.
if usePrettyNames:
env['MOZ_PKG_PRETTYNAMES'] = '1'
@@ -2465,18 +2470,18 @@ class ReleaseBuildFactory(MercurialBuild
oldBuildNumber = self.partialUpdates[oldVersion]['buildNumber']
previous_mar_name = '%s-%s.complete.mar' % (self.productName,
oldVersion)
partial_mar_name = '%s-%s-%s.partial.mar' % \
(self.productName, oldVersion, self.version)
oldCandidatesDir = makeCandidatesDir(
self.productName, oldVersion, oldBuildNumber,
- protocol='http', server=self.stageServer)
- previousMarURL = '%s/update/%s/en-US/%s' % \
+ protocol='http', server=self.ftpServer)
+ previousMarURL = '%supdate/%s/en-US/%s' % \
(oldCandidatesDir, getPlatformFtpDir(self.platform),
previous_mar_name)
self.addStep(ShellCommand(
name='rm_previous_unpack_dir',
command=['rm', '-rf', 'previous'],
env=updateEnv,
workdir=self.absMozillaObjDir,
@@ -2649,16 +2654,18 @@ class ReleaseBuildFactory(MercurialBuild
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
+ if self.bucketPrefix:
+ uploadArgs['bucket_prefix'] = self.bucketPrefix
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(RetryingMockProperty(
name='make_upload',
command=self.makeCmd + ['upload'] + upload_vars,
@@ -2670,31 +2677,16 @@ class ReleaseBuildFactory(MercurialBuild
timeout=60 * 60, # 60 minutes
log_eval_func=lambda c, s: regex_log_evaluator(
c, s, upload_errors),
target=self.mock_target,
mock=self.use_mock,
mock_workdir_prefix=None,
))
- if self.productName == 'fennec' and not uploadMulti:
- cmd = ['scp']
- if self.stageSshKey:
- cmd.append('-oIdentityFile=~/.ssh/%s' % self.stageSshKey)
- cmd.append(info_txt)
- candidates_dir = makeCandidatesDir(self.productName, self.version,
- self.buildNumber)
- cmd.append('%s@%s:%s' % (self.stageUsername, self.stageServer,
- candidates_dir))
- self.addStep(RetryingShellCommand(
- name='upload_buildID',
- command=cmd,
- workdir='build/%s/dist' % self.mozillaObjdir
- ))
-
# Send to the "release" branch on talos, it will do
# super-duper-extra testing
talosBranch = "release-%s-%s-talos" % (
self.branchName, self.complete_platform)
sendchange_props = {
'buildid': WithProperties('%(buildid:-)s'),
'builduid': WithProperties('%(builduid:-)s'),
}
@@ -3658,16 +3650,17 @@ class SingleSourceFactory(ReleaseFactory
buildNumber,
mozconfig,
appVersion=None,
objdir='',
mozillaDir=None,
mozillaSrcDir=None,
autoconfDirs=['.'],
buildSpace=2,
+ bucketPrefix=None,
**kwargs):
ReleaseFactory.__init__(self, buildSpace=buildSpace, **kwargs)
self.mozconfig = mozconfig
self.releaseTag = '%s_RELEASE' % (baseTag)
self.origSrcDir = self.branchName
# Mozilla subdir
@@ -3693,22 +3686,28 @@ class SingleSourceFactory(ReleaseFactory
self.env['MOZ_OBJDIR'] = self.objdir
self.env['MOZ_PKG_PRETTYNAMES'] = '1'
if appVersion is None or version != appVersion or \
(self.branchName == 'mozilla-1.9.2' and productName == 'xulrunner'):
self.env['MOZ_PKG_VERSION'] = version
self.env['MOZ_PKG_APPNAME'] = productName
self.env['no_tooltool'] = "1"
- # '-c' is for "release to candidates dir"
- postUploadCmd = 'post_upload.py -p %s -v %s -n %s -c' % \
- (productName, version, buildNumber)
+ postUploadArgs = dict(
+ product=productName,
+ version=version,
+ buildNumber=str(buildNumber),
+ to_candidates=True,
+ as_list=False,
+ bucket_prefix=bucketPrefix,
+ )
if productName == 'fennec':
- postUploadCmd = 'post_upload.py -p mobile --nightly-dir candidates -v %s -n %s -c' % \
- (version, buildNumber)
+ postUploadArgs['product'] = 'mobile'
+ postUploadArgs['nightly_dir'] = 'candidates'
+ postUploadCmd = postUploadCmdPrefix(**postUploadArgs)
uploadEnv = self.env.copy()
uploadEnv.update({'UPLOAD_HOST': stagingServer,
'UPLOAD_USER': stageUsername,
'UPLOAD_SSH_KEY': '~/.ssh/%s' % stageSshKey,
'UPLOAD_TO_TEMP': '1',
'POST_UPLOAD_CMD': postUploadCmd})
# This will get us to the version we're building the release with
@@ -3784,17 +3783,17 @@ class SingleSourceFactory(ReleaseFactory
workdir=workdir
))
class ReleaseUpdatesFactory(ReleaseFactory):
def __init__(self, patcherConfig, verifyConfigs, appName, productName,
configRepoPath, version, appVersion, baseTag, buildNumber,
- partialUpdates, ftpServer, bouncerServer, stagingServer,
+ partialUpdates, ftpServer, bouncerServer,
hgSshKey, hgUsername, releaseChannel, localTestChannel, brandName=None,
buildSpace=2, triggerSchedulers=None, releaseNotesUrl=None,
python='python', promptWaitTime=None,
balrog_api_root=None, balrog_credentials_file=None,
balrog_username=None, mar_channel_ids=[], **kwargs):
ReleaseFactory.__init__(self, buildSpace=buildSpace, **kwargs)
self.patcherConfig = patcherConfig
@@ -3803,17 +3802,16 @@ class ReleaseUpdatesFactory(ReleaseFacto
self.productName = productName
self.version = version
self.appVersion = appVersion
self.baseTag = baseTag
self.buildNumber = buildNumber
self.partialUpdates = partialUpdates
self.ftpServer = ftpServer
self.bouncerServer = bouncerServer
- self.stagingServer = stagingServer
self.hgSshKey = hgSshKey
self.hgUsername = hgUsername
self.triggerSchedulers = triggerSchedulers
self.python = python
self.configRepoPath = configRepoPath
self.promptWaitTime = promptWaitTime
self.balrog_api_root = balrog_api_root
self.balrog_credentials_file = balrog_credentials_file
@@ -3847,17 +3845,17 @@ class ReleaseUpdatesFactory(ReleaseFacto
target=self.mock_target,
haltOnFailure=True
))
bumpCommand = ['perl', 'tools/release/patcher-config-bump.pl',
'-p', self.productName, '-r', self.brandName,
'-v', self.version, '-a', self.appVersion,
'-o', self.previousVersion, '-b', str(self.buildNumber),
'-c', WithProperties(self.patcherConfigFile),
- '-t', self.stagingServer, '-f', self.ftpServer,
+ '-f', self.ftpServer,
'-d', self.bouncerServer, '-l', 'shipped-locales']
for previousVersion in self.partialUpdates:
bumpCommand.extend(['--partial-version', previousVersion])
for platform in sorted(self.verifyConfigs.keys()):
bumpCommand.extend(['--platform', platform])
if self.promptWaitTime:
bumpCommand.extend(['--prompt-wait-time', self.promptWaitTime])
for c in self.mar_channel_ids:
--- a/process/release.py
+++ b/process/release.py
@@ -491,16 +491,17 @@ def generateReleaseBranchObjects(release
clobberURL=clobberer_url,
clobberBranch='release-%s' % sourceRepoInfo['name'],
mozconfig=mozconfig,
signingServers=getSigningServers('linux'),
use_mock=source_use_mock,
mock_target=pf.get('mock_target'),
mock_packages=pf.get('mock_packages'),
mock_copyin_files=pf.get('mock_copyin_files'),
+ bucketPrefix=branchConfig.get('bucket_prefix'),
)
builders.append({
'name': builderPrefix('%s_source' % releaseConfig['productName']),
'slavenames': branchConfig['platforms']['linux']['slaves'] +
branchConfig['platforms']['linux64']['slaves'],
'category': builderPrefix(''),
'builddir': builderPrefix(
@@ -543,16 +544,17 @@ def generateReleaseBranchObjects(release
clobberURL=clobberer_url,
clobberBranch='release-%s' % sourceRepoInfo['name'],
mozconfig=mozconfig,
signingServers=getSigningServers('linux'),
use_mock=use_mock('linux'),
mock_target=pf.get('mock_target'),
mock_packages=pf.get('mock_packages'),
mock_copyin_files=pf.get('mock_copyin_files'),
+ bucketPrefix=branchConfig.get('bucket_prefix'),
)
builders.append({
'name': builderPrefix('xulrunner_source'),
'slavenames': branchConfig['platforms']['linux']['slaves'] +
branchConfig['platforms']['linux64']['slaves'],
'category': builderPrefix(''),
'builddir': builderPrefix('xulrunner_source'),
@@ -714,16 +716,18 @@ def generateReleaseBranchObjects(release
use_mock=use_mock(platform),
mock_target=pf.get('mock_target'),
mock_packages=pf.get('mock_packages'),
mock_copyin_files=pf.get('mock_copyin_files'),
enable_pymake=enable_pymake,
balrog_api_root=balrog_api_root,
balrog_username=balrog_username,
balrog_credentials_file=balrog_credentials_file,
+ bucketPrefix=branchConfig.get('bucket_prefix'),
+ ftpServer=releaseConfig['ftpServer'],
)
builders.append({
'name': builderPrefix('%s_build' % platform),
'slavenames': pf['slaves'],
'category': builderPrefix(''),
'builddir': builderPrefix('%s_build' % platform),
'slavebuilddir': normalizeName(builderPrefix('%s_build' % platform), releaseConfig['productName']),
@@ -759,16 +763,17 @@ def generateReleaseBranchObjects(release
env['MOZILLA_REV'] = releaseTag
if not releaseConfig.get('disableStandaloneRepacks'):
extra_args = [platform, branchConfigFile]
extra_args.extend([
'--stage-ssh-key', branchConfig['stage_ssh_key'],
'--stage-server', branchConfig['stage_server'],
'--stage-username', branchConfig['stage_username'],
+ '--ftp-server', releaseConfig['ftpServer'],
'--hghost', branchConfig['hghost'],
'--compare-locales-repo-path',
branchConfig['compare_locales_repo_path']
])
if releaseConfig.get('enablePartialMarsAtBuildTime', True):
extra_args.append('--generate-partials')
if releaseConfig.get('l10nUsePymake', True) and \
platform in ('win32', 'win64'):
@@ -850,16 +855,17 @@ def generateReleaseBranchObjects(release
)
else:
extra_args = [platform, branchConfigFile]
extra_args.extend([
'--chunks', str(l10nChunks), '--this-chunk', str(n),
'--stage-ssh-key', branchConfig['stage_ssh_key'],
'--stage-server', branchConfig['stage_server'],
'--stage-username', branchConfig['stage_username'],
+ '--ftp-server', releaseConfig['ftpServer'],
'--hghost', branchConfig['hghost'],
'--compare-locales-repo-path',
branchConfig['compare_locales_repo_path']
])
if releaseConfig.get('l10nUsePymake', True) and \
platform in ('win32', 'win64'):
extra_args.append('--use-pymake')
if releaseConfig.get('enablePartialMarsAtBuildTime', True):
@@ -873,16 +879,20 @@ def generateReleaseBranchObjects(release
for url in branchConfig['tooltool_url_list']:
extra_args.extend(['--tooltool-url', url])
if balrog_api_root:
extra_args.extend([
"--balrog-api-root", balrog_api_root,
"--balrog-username", balrog_username,
"--credentials-file", "oauth.txt",
])
+ if branchConfig.get('bucket_prefix'):
+ extra_args.extend([
+ '--bucket-prefix', branchConfig.get('bucket_prefix'),
+ ])
repack_factory = SigningScriptFactory(
signingServers=getSigningServers(platform),
env=env,
scriptRepo=tools_repo,
interpreter='bash',
scriptName='scripts/l10n/release_repacks.sh',
extra_args=extra_args,
script_timeout=2400,
@@ -992,16 +1002,17 @@ def generateReleaseBranchObjects(release
tooltool_manifest_src=pf.get('tooltool_manifest_src'),
tooltool_url_list=branchConfig.get('tooltool_url_list', []),
tooltool_script=pf.get('tooltool_script'),
use_mock=use_mock(platform),
mock_target=pf.get('mock_target'),
mock_packages=pf.get('mock_packages'),
mock_copyin_files=pf.get('mock_copyin_files'),
enable_pymake=enable_pymake,
+ ftpServer=None,
)
builders.append({
'name': builderPrefix('xulrunner_%s_build' % platform),
'slavenames': pf['slaves'],
'category': builderPrefix(''),
'builddir': builderPrefix('xulrunner_%s_build' % platform),
'slavebuilddir': normalizeName(builderPrefix('xulrunner_%s_build' % platform), releaseConfig['productName']),
'factory': xulrunner_build_factory,
@@ -1185,17 +1196,16 @@ def generateReleaseBranchObjects(release
productName=releaseConfig['productName'],
version=releaseConfig['version'],
appVersion=releaseConfig['appVersion'],
baseTag=releaseConfig['baseTag'],
buildNumber=releaseConfig['buildNumber'],
partialUpdates=updateConfig.get('partialUpdates', {}),
ftpServer=releaseConfig['ftpServer'],
bouncerServer=releaseConfig['bouncerServer'],
- stagingServer=releaseConfig['stagingServer'],
hgSshKey=releaseConfig['hgSshKey'],
hgUsername=releaseConfig['hgUsername'],
releaseChannel=channel,
localTestChannel=updateConfig["localTestChannel"],
clobberURL=clobberer_url,
clobberBranch='release-%s' % sourceRepoInfo['name'],
releaseNotesUrl=releaseConfig['releaseNotesUrl'],
signingServers=getSigningServers('linux'),