summaryrefslogtreecommitdiffstats
path: root/testing/mozharness/mozharness/mozilla/release.py
diff options
context:
space:
mode:
Diffstat (limited to 'testing/mozharness/mozharness/mozilla/release.py')
-rwxr-xr-xtesting/mozharness/mozharness/mozilla/release.py72
1 files changed, 72 insertions, 0 deletions
diff --git a/testing/mozharness/mozharness/mozilla/release.py b/testing/mozharness/mozharness/mozilla/release.py
new file mode 100755
index 000000000..52a84cdba
--- /dev/null
+++ b/testing/mozharness/mozharness/mozilla/release.py
@@ -0,0 +1,72 @@
+#!/usr/bin/env python
+# ***** BEGIN LICENSE BLOCK *****
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+# ***** END LICENSE BLOCK *****
+"""release.py
+
+"""
+
+import os
+from distutils.version import LooseVersion, StrictVersion
+
+from mozharness.base.config import parse_config_file
+
+
+# SignAndroid {{{1
+class ReleaseMixin():
+ release_config = {}
+
+ def query_release_config(self):
+ if self.release_config:
+ return self.release_config
+ c = self.config
+ dirs = self.query_abs_dirs()
+ if c.get("release_config_file"):
+ self.info("Getting release config from %s..." % c["release_config_file"])
+ rc = None
+ try:
+ rc = parse_config_file(
+ os.path.join(dirs['abs_work_dir'],
+ c["release_config_file"]),
+ config_dict_name="releaseConfig"
+ )
+ except IOError:
+ self.fatal("Release config file %s not found!" % c["release_config_file"])
+ except RuntimeError:
+ self.fatal("Invalid release config file %s!" % c["release_config_file"])
+ self.release_config['version'] = rc['version']
+ self.release_config['buildnum'] = rc['buildNumber']
+ self.release_config['ftp_server'] = rc['stagingServer']
+ self.release_config['ftp_user'] = c.get('ftp_user', rc['hgUsername'])
+ self.release_config['ftp_ssh_key'] = c.get('ftp_ssh_key', rc['hgSshKey'])
+ self.release_config['release_channel'] = rc['releaseChannel']
+ else:
+ self.info("No release config file; using default config.")
+ for key in ('version', 'buildnum',
+ 'ftp_server', 'ftp_user', 'ftp_ssh_key'):
+ self.release_config[key] = c[key]
+ self.info("Release config:\n%s" % self.release_config)
+ return self.release_config
+
+
+def get_previous_version(version, partial_versions):
+ """ The patcher config bumper needs to know the exact previous version
+ We use LooseVersion for ESR because StrictVersion can't parse the trailing
+ 'esr', but StrictVersion otherwise because it can sort X.0bN lower than X.0.
+ The current version is excluded to avoid an error if build1 is aborted
+ before running the updates builder and now we're doing build2
+ """
+ if version.endswith('esr'):
+ return str(max(LooseVersion(v) for v in partial_versions if
+ v != version))
+ else:
+ # StrictVersion truncates trailing zero in versions with more than 1
+ # dot. Compose a structure that will be sorted by StrictVersion and
+ # return untouched version
+ composed = sorted([(v, StrictVersion(v)) for v in partial_versions if
+ v != version], key=lambda x: x[1], reverse=True)
+ return composed[0][0]
+
+