--- a/lib/python/balrog/submitter/cli.py
+++ b/lib/python/balrog/submitter/cli.py
@@ -20,28 +20,30 @@ log = logging.getLogger(__name__)
def get_nightly_blob_name(productName, branch, build_type, suffix, dummy=False):
if dummy:
branch = '%s-dummy' % branch
return '%s-%s-%s-%s' % (productName, branch, build_type, suffix)
-def get_release_blob_name(productName, version, build_number, dummy=False):
- name = '%s-%s-build%s' % (productName, version, build_number)
- if dummy:
- name += '-dummy'
- return name
+def get_release_blob_name(productName, version, build_number, suffix=""):
+ return '%s-%s-build%s%s' % (productName, version, build_number, suffix)
class ReleaseCreatorBase(object):
- def __init__(self, api_root, auth, dummy=False):
+ def __init__(self, api_root, auth, dummy=False, suffix=""):
self.api_root = api_root
self.auth = auth
- self.dummy = dummy
+ self.suffix = suffix
+ if dummy and not suffix:
+ self.suffix = "-dummy"
+ else:
+ self.suffix = suffix
+
def generate_data(self, appVersion, productName, version, buildNumber,
updateChannels, ftpServer, bouncerServer,
enUSPlatforms, schemaVersion, openURL=None,
**updateKwargs):
assert schemaVersion in (3, 4), 'Unhandled schema version %s' % schemaVersion
details_product = productName.lower()
if details_product == "devedition":
@@ -93,17 +95,17 @@ class ReleaseCreatorBase(object):
updateChannels, ftpServer, bouncerServer,
enUSPlatforms, hashFunction, schemaVersion, openURL=None,
**updateKwargs):
data = self.generate_data(appVersion, productName, version,
buildNumber, updateChannels,
ftpServer, bouncerServer, enUSPlatforms,
schemaVersion, openURL, **updateKwargs)
name = get_release_blob_name(productName, version, buildNumber,
- self.dummy)
+ self.suffix)
api = Release(name=name, auth=self.auth, api_root=self.api_root)
try:
current_data, data_version = api.get_data()
except HTTPError, e:
if e.response.status_code == 404:
log.warning("Release blob doesn't exist, using empty data...")
current_data, data_version = {}, None
else:
@@ -155,17 +157,17 @@ class ReleaseCreatorV3(ReleaseCreatorBas
}
if partialUpdates:
data["ftpFilenames"]["partials"] = {}
data["bouncerProducts"]["partials"] = {}
for previousVersion, previousInfo in partialUpdates.iteritems():
from_ = get_release_blob_name(productName, previousVersion,
previousInfo["buildNumber"],
- self.dummy)
+ self.suffix)
filename = "%s-%s-%s.partial.mar" % (file_prefix, previousVersion, version)
bouncerProduct = "%s-%s-partial-%s" % (productName.lower(), version, previousVersion)
data["ftpFilenames"]["partials"][from_] = filename
data["bouncerProducts"]["partials"][from_] = bouncerProduct
return data
@@ -229,17 +231,17 @@ class ReleaseCreatorV4(ReleaseCreatorBas
if not partialUpdates:
return data
for channel in uniqueChannels:
data["fileUrls"][channel]["partials"] = {}
for previousVersion, previousInfo in partialUpdates.iteritems():
from_ = get_release_blob_name(productName, previousVersion,
previousInfo["buildNumber"],
- self.dummy)
+ self.suffix)
if "localtest" in channel:
dir_ = makeCandidatesDir(productName.lower(), version,
buildNumber, server=ftpServer,
protocol='http')
filename = "%s-%s-%s.partial.mar" % (file_prefix, previousVersion, version)
data["fileUrls"][channel]["partials"][from_] = "%supdate/%%OS_FTP%%/%%LOCALE%%/%s" % (dir_, filename)
else:
# See comment above about these channels for explanation.
@@ -397,31 +399,34 @@ class NightlySubmitterV3(NightlySubmitte
class NightlySubmitterV4(NightlySubmitterBase, MultipleUpdatesNightlyMixin):
def run(self, *args, **kwargs):
return NightlySubmitterBase.run(self, *args, schemaVersion=4, **kwargs)
class ReleaseSubmitterBase(object):
- def __init__(self, api_root, auth, dummy=False):
+ def __init__(self, api_root, auth, dummy=False, suffix=""):
self.api_root = api_root
self.auth = auth
- self.dummy = dummy
+ if dummy and not suffix:
+ self.suffix = "-dummy"
+ else:
+ self.suffix = suffix
def run(self, platform, productName, appVersion, version, build_number, locale,
hashFunction, extVersion, buildID, schemaVersion, **updateKwargs):
assert schemaVersion in (3, 4), 'Unhandled schema version %s' % schemaVersion
targets = buildbot2updatePlatforms(platform)
# Some platforms may have alias', but those are set-up elsewhere
# for release blobs.
build_target = targets[0]
name = get_release_blob_name(productName, version, build_number,
- self.dummy)
+ self.suffix)
data = {
'buildID': buildID,
'appVersion': appVersion,
'platformVersion': extVersion,
'displayVersion': getPrettyVersion(version)
}
data.update(self._get_update_data(productName, version, build_number,
@@ -442,32 +447,32 @@ class MultipleUpdatesReleaseMixin(object
completeInfo=None, partialInfo=None):
data = {}
if completeInfo:
data["completes"] = []
for info in completeInfo:
if "previousVersion" in info:
from_ = get_release_blob_name(productName, version,
- build_number, self.dummy)
+ build_number, self.suffix)
else:
from_ = "*"
data["completes"].append({
"from": from_,
"filesize": info["size"],
"hashValue": info["hash"],
})
if partialInfo:
data["partials"] = []
for info in partialInfo:
data["partials"].append({
"from": get_release_blob_name(productName,
info["previousVersion"],
- info["previousBuildNumber"] ,
- self.dummy),
+ info["previousBuildNumber"],
+ self.suffix),
"filesize": info["size"],
"hashValue": info["hash"],
})
return data
class ReleaseSubmitterV3(ReleaseSubmitterBase, MultipleUpdatesReleaseMixin):
@@ -476,41 +481,47 @@ class ReleaseSubmitterV3(ReleaseSubmitte
class ReleaseSubmitterV4(ReleaseSubmitterBase, MultipleUpdatesReleaseMixin):
def run(self, *args, **kwargs):
return ReleaseSubmitterBase.run(self, *args, schemaVersion=4, **kwargs)
class ReleasePusher(object):
- def __init__(self, api_root, auth, dummy=False):
+ def __init__(self, api_root, auth, dummy=False, suffix=""):
self.api_root = api_root
self.auth = auth
- self.dummy = dummy
+ if dummy and not suffix:
+ self.suffix = "-dummy"
+ else:
+ self.suffix = suffix
def run(self, productName, version, build_number, rule_ids, backgroundRate=None):
name = get_release_blob_name(productName, version, build_number,
- self.dummy)
+ self.suffix)
for rule_id in rule_ids:
data = {"mapping": name}
if backgroundRate:
data["backgroundRate"] = backgroundRate
Rule(api_root=self.api_root, auth=self.auth, rule_id=rule_id
).update_rule(**data)
class ReleaseScheduler(object):
- def __init__(self, api_root, auth, dummy=False):
+ def __init__(self, api_root, auth, dummy=False, suffix=""):
self.api_root = api_root
self.auth = auth
- self.dummy = dummy
+ if dummy and not suffix:
+ self.suffix = "-dummy"
+ else:
+ self.suffix = suffix
def run(self, productName, version, build_number, rule_ids, when, backgroundRate=None):
name = get_release_blob_name(productName, version, build_number,
- self.dummy)
+ self.suffix)
for rule_id in rule_ids:
data, data_version = Rule(api_root=self.api_root, auth=self.auth, rule_id=rule_id).get_data()
data["fallbackMapping"] = data["mapping"]
data["mapping"] = name
data["data_verison"] = data_version
data["rule_id"] = rule_id
data["change_type"] = "update"
# We receive an iso8601 datetime, but what Balrog needs is a to-the-millisecond epoch timestamp