Merge from default production-0.8
authorNick Thomas <nthomas@mozilla.com>
Fri, 09 Oct 2015 00:20:05 +1300 (2015-10-08)
branchproduction-0.8
changeset 4483 1a685a2b7206e6a005364da6d076a3d3190c355e
parent 4481 eec34447bf3df0ffaf91aa83c6ef68620f699197 (current diff)
parent 4482 300082f0767399f3a725617f531716d881089da6 (diff)
child 4485 b22cf62c03d25c84259694f4026023d0184bb8f0
push id3750
push usernthomas@mozilla.com
push dateThu, 08 Oct 2015 11:20:24 +0000 (2015-10-08)
Merge from default
process/release.py
--- 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'),