def process_configs(repo, attempt): """Helper method that encapsulates all of the things necessary to run release runner for all releases.""" log.info("Bumping %s, attempt #%s" % (repo, attempt)) for release in rr.new_releases: rr.update_status(release, 'Writing configs') l10nContents = rr.get_release_l10n(release['name']) tags.extend(getTags( getBaseTag(release['product'], release['version']), release['buildNumber']) ) update(configs_workdir, revision='default') cfgFile = getReleaseConfigName( release['product'], path.basename(release['branch']), release['version'], staging) bump_configs(release=release, cfgFile=cfgFile, l10nContents=l10nContents, workdir=configs_workdir, hg_username=hg_username, productionBranch=buildbot_configs_branch) rr.update_status(release, 'Running release sanity') rs_args = get_release_sanity_args(configs_workdir, release, cfgFile, masters_json, buildbot_configs_branch) release_sanity_script = "%s/buildbot-helpers/release_sanity.py" % tools_workdir run_cmd(['python', release_sanity_script] + rs_args + ['--dry-run']) rr.update_status( release, 'Waiting for other releases to run release sanity' )
def process_configs(repo, attempt): """Helper method that encapsulates all of the things necessary to run release runner for all releases.""" log.info("Bumping %s, attempt #%s" % (repo, attempt)) for release in rr.new_releases: rr.update_status(release, 'Writing configs') l10nContents = rr.get_release_l10n(release['name']) tags.update( getTags(getBaseTag(release['product'], release['version']), release['buildNumber'])) update(configs_workdir, revision='default') cfgFile = getReleaseConfigName(release['product'], path.basename(release['branch']), release['version'], staging) bump_configs(release=release, cfgFile=cfgFile, l10nContents=l10nContents, workdir=configs_workdir, hg_username=hg_username, productionBranch=buildbot_configs_branch) rr.update_status(release, 'Running release sanity') rs_args = get_release_sanity_args(configs_workdir, release, cfgFile, masters_json, buildbot_configs_branch) release_sanity_script = "%s/buildbot-helpers/release_sanity.py" % tools_workdir run_cmd(['python', release_sanity_script] + rs_args + ['--dry-run']) rr.update_status( release, 'Waiting for other releases to run release sanity')
def start_release_automation(self, release, master): sendchange( release['branch'], getReleaseTag(getBaseTag(release['product'], release['version'])), release['submitter'], master, release['product'] ) self.mark_as_completed(release)
def getPartials(release): partials = {} for p in release['partials'].split(','): partialVersion, buildNumber = p.split('build') partials[partialVersion] = { 'appVersion': getAppVersion(partialVersion), 'buildNumber': buildNumber, 'baseTag': getBaseTag(release['product'], partialVersion) } return partials
def substituteReleaseConfig(config, product, version, **other): from jinja2 import Environment, StrictUndefined baseTag = getBaseTag(product, version) appVersion = getAppVersion(version) environment = Environment(undefined=StrictUndefined) template = environment.from_string(config) return template.render(product=product, version=version, baseTag=baseTag, appVersion=appVersion, **other)
def bump_configs(release, cfgFile, l10nContents, workdir, hg_username, productionBranch, defaultBranch='default'): # Update the production branch first, because that's where we want to read # the templates from update(workdir, productionBranch) cfgDir = path.join(workdir, 'mozilla') templateFile = path.join(cfgDir, '%s.template' % cfgFile) tags = set(getTags(getBaseTag(release['product'], release['version']), release['buildNumber'])) cfgFile = path.join(cfgDir, cfgFile) l10nChangesetsFile = path.join( cfgDir, readReleaseConfig(cfgFile)['l10nRevisionFile'] ) subs = release.copy() if 'partials' in release: subs['partials'] = getPartials(release) # This is true 99% of the time. It's exceedingly rare that we ship a point # release that we first push to the beta channel. If we need to, the # expectation is that this will be ignored by hardcoding True in the # template. if isFinalRelease(release["version"]): subs["betaChannelEnabled"] = True else: subs["betaChannelEnabled"] = False with open(templateFile) as f: template = f.read() releaseConfig = substituteReleaseConfig(template, **subs) # Write out the new configs on the production branch... with open(cfgFile, 'w') as f: f.write(releaseConfig) with open(l10nChangesetsFile, 'w') as f: f.write(l10nContents) prodRev = commit(workdir, 'Update release config for %s' % release['name'], user=hg_username) # We always force tagging, because it makes it easier to retrigger a # release that fails for infrastructure reasons. tag(workdir, tags, rev=prodRev, force=True, user=hg_username) # And then write the same files to the default branch update(workdir, defaultBranch) with open(cfgFile, 'w') as f: f.write(releaseConfig) with open(l10nChangesetsFile, 'w') as f: f.write(l10nContents) commit(workdir, 'Update release config for %s' % release['name'], user=hg_username)
def bump_configs(release, cfgFile, l10nContents, workdir, hg_username, productionBranch, defaultBranch='default'): # Update the production branch first, because that's where we want to read # the templates from update(workdir, productionBranch) cfgDir = path.join(workdir, 'mozilla') templateFile = path.join(cfgDir, '%s.template' % cfgFile) tags = set( getTags(getBaseTag(release['product'], release['version']), release['buildNumber'])) cfgFile = path.join(cfgDir, cfgFile) l10nChangesetsFile = path.join( cfgDir, readReleaseConfig(cfgFile)['l10nRevisionFile']) subs = release.copy() if 'partials' in release: subs['partials'] = getPartials(release) with open(templateFile) as f: template = f.read() releaseConfig = substituteReleaseConfig(template, **subs) # Write out the new configs on the production branch... with open(cfgFile, 'w') as f: f.write(releaseConfig) with open(l10nChangesetsFile, 'w') as f: f.write(l10nContents) prodRev = commit(workdir, 'Update release config for %s' % release['name'], user=hg_username) # We always force tagging, because it makes it easier to retrigger a # release that fails for infrastructure reasons. tag(workdir, tags, rev=prodRev, force=True, user=hg_username) # And then write the same files to the default branch update(workdir, defaultBranch) with open(cfgFile, 'w') as f: f.write(releaseConfig) with open(l10nChangesetsFile, 'w') as f: f.write(l10nContents) commit(workdir, 'Update release config for %s' % release['name'], user=hg_username)
def bump_configs(release, cfgFile, l10nContents, workdir, hg_username, productionBranch, defaultBranch='default'): # Update the production branch first, because that's where we want to read # the templates from update(workdir, productionBranch) cfgDir = path.join(workdir, 'mozilla') templateFile = path.join(cfgDir, '%s.template' % cfgFile) tags = getTags(getBaseTag(release['product'], release['version']), release['buildNumber']) cfgFile = path.join(cfgDir, cfgFile) l10nChangesetsFile = path.join( cfgDir, readReleaseConfig(cfgFile)['l10nRevisionFile'] ) subs = release.copy() if 'partials' in release: subs['partials'] = getPartials(release) with open(templateFile) as f: template = f.read() releaseConfig = substituteReleaseConfig(template, **subs) # Write out the new configs on the production branch... with open(cfgFile, 'w') as f: f.write(releaseConfig) with open(l10nChangesetsFile, 'w') as f: f.write(l10nContents) prodRev = commit(workdir, 'Update release config for %s' % release['name'], user=hg_username) # We always force tagging, because it makes it easier to retrigger a # release that fails for infrastructure reasons. tag(workdir, tags, rev=prodRev, force=True, user=hg_username) # And then write the same files to the default branch update(workdir, defaultBranch) with open(cfgFile, 'w') as f: f.write(releaseConfig) with open(l10nChangesetsFile, 'w') as f: f.write(l10nContents) commit(workdir, 'Update release config for %s' % release['name'], user=hg_username)
def testRelease(self): self.assertEquals('FIREFOX_16_0_2', getBaseTag('firefox', '16.0.2'))
def testFennec(self): self.assertEquals('FENNEC_17_0', getBaseTag('fennec', '17.0'))
def testEsr(self): self.assertEquals( 'FIREFOX_10_0_9esr', getBaseTag('firefox', '10.0.9esr'))
def start_release_automation(self, release, master, enUSPlatforms): sendchange( release['branch'], getReleaseTag(getBaseTag(release['product'], release['version'])), release['submitter'], master, release['product']) self.mark_as_completed(release, enUSPlatforms)
def testThunderbird(self): self.assertEquals( 'THUNDERBIRD_18_0b1', getBaseTag('thunderbird', '18.0b1'))
def testBeta(self): self.assertEquals('FIREFOX_17_0b3', getBaseTag('firefox', '17.0b3'))