blob: 3948b9d763709cf28e4182c7a7c74ee5fc5aec3e [file] [log] [blame]
#!/usr/bin/env python
try:
import simplejson as json
except ImportError:
import json
import os
from os import path
import logging
import sys
# Use explicit version of python-requests
sys.path.insert(0, path.join(path.dirname(__file__),
"../../lib/python/vendor/requests-2.7.0"))
sys.path.insert(0, path.join(path.dirname(__file__), "../../lib/python"))
from balrog.submitter.cli import ReleasePusher
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")
def validate(options):
err = False
config = {}
if not path.exists(path.join('buildbot-configs', options.release_config)):
print "%s does not exist!" % options.release_config
sys.exit(1)
config = readReleaseConfig(path.join('buildbot-configs',
options.release_config))
for key in REQUIRED_CONFIG:
if key not in config:
err = True
print "Required item missing in config: %s" % key
if err:
sys.exit(1)
return config
if __name__ == '__main__':
from optparse import OptionParser
parser = OptionParser()
parser.add_option("-p", "--build-properties", dest="build_properties")
parser.add_option("-b", "--buildbot-configs", dest="buildbot_configs",
help="The place to clone buildbot-configs from",
default=os.environ.get('BUILDBOT_CONFIGS_REPO',
DEFAULT_BUILDBOT_CONFIGS_REPO))
parser.add_option("-r", "--release-config", dest="release_config")
parser.add_option("-a", "--api-root", dest="api_root")
parser.add_option("-c", "--credentials-file", dest="credentials_file")
parser.add_option("-u", "--username", dest="username")
parser.add_option("-C", "--release-channel", dest="release_channel")
parser.add_option("-v", "--verbose", dest="verbose", action="store_true")
options, args = parser.parse_args()
logging_level = logging.INFO
if options.verbose:
logging_level = logging.DEBUG
logging.basicConfig(stream=sys.stdout, level=logging_level,
format="%(message)s")
for opt in ('build_properties', 'release_config', 'api_root', 'credentials_file', 'buildbot_configs', 'username', "release_channel"):
if not getattr(options, opt):
print >>sys.stderr, "Required option %s not present" % opt
sys.exit(1)
properties = json.load(open(options.build_properties))['properties']
if properties.get("shipit") != "shipit":
print >>sys.stderr, "Magic keyword not present in properties, bailing"
sys.exit(1)
release_channel = options.release_channel
releaseTag = properties['script_repo_revision']
retry(mercurial, args=(options.buildbot_configs, 'buildbot-configs'), kwargs=dict(revision=releaseTag))
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.run(release_config['productName'].capitalize(), release_config['version'],
release_config['buildNumber'], ruleIds)