Example #1
0
 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'
         )
Example #2
0
 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')
Example #3
0
 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)
Example #4
0
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
Example #5
0
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)
Example #6
0
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
Example #7
0
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)
Example #8
0
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)
Example #9
0
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)
Example #10
0
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)
Example #11
0
 def testRelease(self):
     self.assertEquals('FIREFOX_16_0_2', getBaseTag('firefox', '16.0.2'))
Example #12
0
 def testFennec(self):
     self.assertEquals('FENNEC_17_0', getBaseTag('fennec', '17.0'))
Example #13
0
 def testFennec(self):
     self.assertEquals('FENNEC_17_0', getBaseTag('fennec', '17.0'))
Example #14
0
 def testEsr(self):
     self.assertEquals(
         'FIREFOX_10_0_9esr', getBaseTag('firefox', '10.0.9esr'))
Example #15
0
 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)
Example #16
0
 def testEsr(self):
     self.assertEquals(
         'FIREFOX_10_0_9esr', getBaseTag('firefox', '10.0.9esr'))
Example #17
0
 def testThunderbird(self):
     self.assertEquals(
         'THUNDERBIRD_18_0b1', getBaseTag('thunderbird', '18.0b1'))
Example #18
0
 def testThunderbird(self):
     self.assertEquals(
         'THUNDERBIRD_18_0b1', getBaseTag('thunderbird', '18.0b1'))
Example #19
0
 def testRelease(self):
     self.assertEquals('FIREFOX_16_0_2', getBaseTag('firefox', '16.0.2'))
Example #20
0
 def testBeta(self):
     self.assertEquals('FIREFOX_17_0b3', getBaseTag('firefox', '17.0b3'))
Example #21
0
 def testBeta(self):
     self.assertEquals('FIREFOX_17_0b3', getBaseTag('firefox', '17.0b3'))