diff options
Diffstat (limited to 'python/mozrelease/mozrelease/balrog.py')
-rw-r--r-- | python/mozrelease/mozrelease/balrog.py | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/python/mozrelease/mozrelease/balrog.py b/python/mozrelease/mozrelease/balrog.py new file mode 100644 index 0000000000..31418d352e --- /dev/null +++ b/python/mozrelease/mozrelease/balrog.py @@ -0,0 +1,72 @@ +# -*- coding: utf-8 -*- +# 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/. + + +def _generate_show_url(context, entry): + url = entry["url"] + return { + "actions": "showURL", + "openURL": url.format(**context), + } + + +def _generate_product_details(context, entry): + url = entry["url"] + return { + "detailsURL": url.format(**context), + "type": "minor", + } + + +_FIELD_TYPES = { + "show-url": _generate_show_url, + "product-details": _generate_product_details, +} + + +def _generate_conditions(context, entry): + if ( + "release-types" in entry + and context["release-type"] not in entry["release-types"] + ): + return None + if "blob-types" in entry and context["blob-type"] not in entry["blob-types"]: + return None + if "products" in entry and context["product"] not in entry["products"]: + return None + + conditions = {} + if "locales" in entry: + conditions["locales"] = entry["locales"] + if "versions" in entry: + conditions["versions"] = [ + version.format(**context) for version in entry["versions"] + ] + if "update-channel" in entry: + conditions["channels"] = [ + entry["update-channel"] + suffix + for suffix in ("", "-localtest", "-cdntest") + ] + if "build-ids" in entry: + conditions["buildIDs"] = [ + buildid.format(**context) for buildid in entry["build-ids"] + ] + return conditions + + +def generate_update_properties(context, config): + result = [] + for entry in config: + fields = _FIELD_TYPES[entry["type"]](context, entry) + conditions = _generate_conditions(context, entry.get("conditions", {})) + + if conditions is not None: + result.append( + { + "fields": fields, + "for": conditions, + } + ) + return result |