Bug 1389312: When pushing updates, always submit balrog rule changes as scheduled-changes.
MozReview-Commit-ID: LW7499j5ppu
--- a/lib/python/balrog/submitter/cli.py
+++ b/lib/python/balrog/submitter/cli.py
@@ -515,28 +515,36 @@ class ReleaseScheduler(object):
def __init__(self, api_root, auth, dummy=False, suffix=""):
self.api_root = api_root
self.auth = auth
if dummy and not suffix:
self.suffix = "-dummy"
else:
self.suffix = suffix
- def run(self, productName, version, build_number, rule_ids, when, backgroundRate=None):
+ def run(self, productName, version, build_number, rule_ids, when=None, backgroundRate=None):
name = get_release_blob_name(productName, version, build_number,
self.suffix)
+
+ if when is not None:
+ when = arrow.get(when)
+
+ soon = arrow.now().shift(minutes=2)
+ if when is None or when < soon:
+ when = soon
+
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
- data["when"] = arrow.get(when).timestamp * 1000
+ data["when"] = when.timestamp * 1000
if backgroundRate:
data["backgroundRate"] = backgroundRate
ScheduledRuleChange(api_root=self.api_root, auth=self.auth, rule_id=rule_id
).add_scheduled_rule_change(**data)
class BlobTweaker(object):
--- a/scripts/build-promotion/balrog-release-shipper.py
+++ b/scripts/build-promotion/balrog-release-shipper.py
@@ -11,17 +11,17 @@ sys.path.insert(0, path.join(path.dirnam
sys.path.insert(0, path.join(path.dirname(__file__),
"../../lib/python/vendor/arrow-0.10.0"))
sys.path.insert(0, path.join(path.dirname(__file__),
"../../lib/python/vendor/python-dateutil-2.6.0"))
sys.path.insert(0, path.join(path.dirname(__file__),
"../../lib/python/vendor/six-1.10.0"))
sys.path.insert(0, path.join(path.dirname(__file__), "../../lib/python"))
-from balrog.submitter.cli import ReleasePusher, ReleaseScheduler
+from balrog.submitter.cli import ReleaseScheduler
if __name__ == '__main__':
from argparse import ArgumentParser
parser = ArgumentParser()
parser.add_argument("-a", "--api-root", dest="api_root", required=True)
parser.add_argument("-c", "--credentials-file", dest="credentials_file", required=True)
parser.add_argument("-u", "--username", dest="username", required=True)
@@ -40,20 +40,15 @@ if __name__ == '__main__':
logging.basicConfig(stream=sys.stdout, level=logging_level,
format="%(message)s")
credentials = {}
execfile(args.credentials_file, credentials)
auth = (args.username, credentials['balrog_credentials'][args.username])
suffix = os.environ.get("BALROG_BLOB_SUFFIX")
- if args.schedule_at:
- scheduler = ReleaseScheduler(args.api_root, auth, suffix=suffix)
- if args.backgroundRate:
- scheduler.run(args.product_name.capitalize(), args.version,
- args.build_number, args.rule_ids, args.schedule_at, args.backgroundRate)
- else:
- scheduler.run(args.product_name.capitalize(), args.version,
- args.build_number, args.rule_ids, args.schedule_at)
+ scheduler = ReleaseScheduler(args.api_root, auth, suffix=suffix)
+ if args.backgroundRate:
+ scheduler.run(args.product_name.capitalize(), args.version,
+ args.build_number, args.rule_ids, args.schedule_at, args.backgroundRate)
else:
- pusher = ReleasePusher(args.api_root, auth, suffix=suffix)
- pusher.run(args.product_name.capitalize(), args.version,
- args.build_number, args.rule_ids, args.backgroundRate)
+ scheduler.run(args.product_name.capitalize(), args.version,
+ args.build_number, args.rule_ids, args.schedule_at)
--- a/scripts/updates/balrog-release-shipper.py
+++ b/scripts/updates/balrog-release-shipper.py
@@ -10,17 +10,17 @@ import logging
import sys
import site
# Use explicit version of python-requests
sys.path.insert(0, path.join(path.dirname(__file__),
"../../lib/python/vendor/requests-2.7.0"))
site.addsitedir(os.path.join(os.path.dirname(__file__), "../../lib/python"))
-from balrog.submitter.cli import ReleasePusher
+from balrog.submitter.cli import ReleaseScheduler
from release.info import readReleaseConfig
from util.retry import retry
from util.hg import mercurial, make_hg_url
HG = "hg.mozilla.org"
DEFAULT_BUILDBOT_CONFIGS_REPO = make_hg_url(HG, 'build/buildbot-configs')
REQUIRED_CONFIG = ('productName', 'version', 'buildNumber', "updateChannels")
@@ -83,11 +83,11 @@ if __name__ == '__main__':
release_config = validate(options)
credentials = {}
execfile(options.credentials_file, credentials)
auth = (options.username, credentials['balrog_credentials'][options.username])
ruleIds = [release_config["updateChannels"][release_channel]["ruleId"]]
- pusher = ReleasePusher(options.api_root, auth)
+ pusher = ReleaseScheduler(options.api_root, auth)
pusher.run(release_config['productName'].capitalize(), release_config['version'],
release_config['buildNumber'], ruleIds)