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 testStaging(self): got = getReleaseConfigName('fennec', 'mozilla-release', staging=True) self.assertEquals('staging_release-fennec-mozilla-release.py', got)
def testThunderbird(self): got = getReleaseConfigName('thunderbird', 'comm-esr24') self.assertEquals('release-thunderbird-comm-esr24.py', got)
def testFirefox(self): got = getReleaseConfigName('firefox', 'mozilla-release') self.assertEquals('release-firefox-mozilla-release.py', got)
def testFennec(self): got = getReleaseConfigName('fennec', 'mozilla-beta') self.assertEquals('release-fennec-mozilla-beta.py', got)
def testThunderbird(self): got = getReleaseConfigName('thunderbird', 'comm-esr31') self.assertEquals('release-thunderbird-comm-esr31.py', got)
def testFennecRelease(self): got = getReleaseConfigName('fennec', 'mozilla-release', '35.0') self.assertEquals('release-fennec-mozilla-release.py', got)
def testFirefoxBetaHackery(self): got = getReleaseConfigName('firefox', 'mozilla-release', '38.0b7') self.assertEquals('release-firefox-mozilla-beta.py', got)
def testFennecBetaHackery(self): got = getReleaseConfigName('fennec', 'mozilla-release', '35.0b1') self.assertEquals('release-fennec-mozilla-beta.py', got)
# logs and manual intervention, it's not worth the pain and ugliness # to do more than this. for release in rr.new_releases: rr.mark_as_failed(release, 'Failed: %s' % repr(e)) raise rc = 0 for release in rr.new_releases: try: rr.update_status(release, 'Running sendchange command') staging = config.getboolean('release-runner', 'staging') update(configs_workdir, revision='default') cfgFile = path.join(configs_workdir, 'mozilla', getReleaseConfigName(release['product'], path.basename(release['branch']), release['version'], staging)) enUSPlatforms = readReleaseConfig(cfgFile)['enUSPlatforms'] rr.start_release_automation(release, sendchange_master, enUSPlatforms) except: # We explicitly do not raise an error here because there's no # reason not to start other releases if the sendchange fails for # another one. We _do_ need to set this in order to exit # with the right code, though. rc = 2 rr.update_status(release, 'Sendchange failed') log.error('Sendchange failed for %s: ' % release, exc_info=True) if rc != 0: sys.exit(rc)
def testThunderbirdCommReleaseSpecialCase(self): got = getReleaseConfigName('thunderbird', 'comm-esr17', version='17.0.3') self.assertEquals('release-thunderbird-comm-release.py', got)
# Clean up after any potential previous attempts before starting. # Not doing this could end up with multiple heads on the same branch. for repo, workdir, push_repo in ( (buildbot_configs, configs_workdir, configs_pushRepo), (buildbotcustom, custom_workdir, custom_pushRepo), (tools, tools_workdir, tools_pushRepo) ): retry(mercurial, args=(repo, workdir)) cleanOutgoingRevs(workdir, push_repo, hg_username, hg_ssh_key) # Send email to r-d for a fast notification for release in rr.new_releases: cfgFile = configs_workdir + "/mozilla/" + getReleaseConfigName( release['product'], path.basename(release['branch']), release['version'], staging) sendMailRD(smtp_server, notify_from, cfgFile, release) # Create symlinks if needed if 'symlinks' in config.sections(): format_dict = dict(buildbot_configs=configs_workdir, buildbotcustom=custom_workdir, tools=tools_workdir) for target in config.options('symlinks'): symlink = config.get('symlinks', target).format(**format_dict) if path.exists(symlink): log.warning("Skipping %s -> %s symlink" % (symlink, target)) else: log.info("Adding %s -> %s symlink" % (symlink, target)) os.symlink(target, symlink)
# Clean up after any potential previous attempts before starting. # Not doing this could end up with multiple heads on the same branch. for repo, workdir, push_repo in ((buildbot_configs, configs_workdir, configs_pushRepo), (buildbotcustom, custom_workdir, custom_pushRepo), (tools, tools_workdir, tools_pushRepo)): retry(mercurial, args=(repo, workdir)) cleanOutgoingRevs(workdir, push_repo, hg_username, hg_ssh_key) # Send email to r-d for a fast notification for release in rr.new_releases: cfgFile = configs_workdir + "/mozilla/" + getReleaseConfigName( release['product'], path.basename(release['branch']), release['version'], staging) sendMailRD(smtp_server, notify_from, cfgFile, release) # Create symlinks if needed if 'symlinks' in config.sections(): format_dict = dict(buildbot_configs=configs_workdir, buildbotcustom=custom_workdir, tools=tools_workdir) for target in config.options('symlinks'): symlink = config.get('symlinks', target).format(**format_dict) if path.exists(symlink): log.warning("Skipping %s -> %s symlink" % (symlink, target)) else: log.info("Adding %s -> %s symlink" % (symlink, target)) os.symlink(target, symlink)