diff options
Diffstat (limited to 'toolkit/mozapps/installer/informulate.py')
-rw-r--r-- | toolkit/mozapps/installer/informulate.py | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/toolkit/mozapps/installer/informulate.py b/toolkit/mozapps/installer/informulate.py new file mode 100644 index 0000000000..0f646450c5 --- /dev/null +++ b/toolkit/mozapps/installer/informulate.py @@ -0,0 +1,128 @@ +#!/usr/bin/env python +# 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/. + +# Generate build info files for use by other tools. +# This script assumes it is being run in a Mozilla CI build. + +from argparse import ArgumentParser +import datetime +import buildconfig +import json +import mozinfo +import os + + +def main(): + parser = ArgumentParser() + parser.add_argument("output_json", help="Output JSON file") + parser.add_argument("buildhub_json", help="Output buildhub JSON file") + parser.add_argument("output_txt", help="Output text file") + # TODO: Move package-name.mk variables into moz.configure. + parser.add_argument("pkg_platform", help="Package platform identifier") + parser.add_argument( + "--no-download", action="store_true", help="Do not include download information" + ) + parser.add_argument("--package", help="Path to application package file") + parser.add_argument("--installer", help="Path to application installer file") + args = parser.parse_args() + mozinfo.find_and_update_from_json() + + important_substitutions = [ + "target_alias", + "host_alias", + "MOZ_UPDATE_CHANNEL", + "MOZ_APP_VENDOR", + "MOZ_APP_NAME", + "MOZ_APP_VERSION", + "MOZ_APP_MAXVERSION", + "MOZ_APP_ID", + "MOZ_SOURCE_REPO", + ] + other_substitutions = [ + "CC", + "CXX", + "AS", + ] + + all_key_value_pairs = { + x.lower(): buildconfig.substs[x] for x in important_substitutions + } + + def stringify(x): + if isinstance(x, (tuple, list)): + return " ".join(x) + return x or "" + + all_key_value_pairs.update( + {x.lower(): stringify(buildconfig.substs.get(x)) for x in other_substitutions} + ) + build_id = os.environ["MOZ_BUILD_DATE"] + all_key_value_pairs.update( + { + "buildid": build_id, + "moz_source_stamp": buildconfig.substs["MOZ_SOURCE_CHANGESET"], + "moz_pkg_platform": args.pkg_platform, + } + ) + + with open(args.output_json, "wt") as f: + json.dump(all_key_value_pairs, f, indent=2, sort_keys=True) + f.write("\n") + + with open(args.buildhub_json, "wt") as f: + build_time = datetime.datetime.strptime(build_id, "%Y%m%d%H%M%S") + s = buildconfig.substs + record = { + "build": { + "id": build_id, + "date": build_time.isoformat() + "Z", + "as": all_key_value_pairs["as"], + "cc": all_key_value_pairs["cc"], + "cxx": all_key_value_pairs["cxx"], + "host": s["host_alias"], + "target": s["target_alias"], + }, + "source": { + "product": s["MOZ_APP_NAME"], + "repository": s["MOZ_SOURCE_REPO"], + "tree": os.environ["MH_BRANCH"], + "revision": s["MOZ_SOURCE_CHANGESET"], + }, + "target": { + "platform": args.pkg_platform, + "os": mozinfo.info["os"], + # This would be easier if the locale was specified at configure time. + "locale": os.environ.get("AB_CD", "en-US"), + "version": s["MOZ_APP_VERSION_DISPLAY"] or s["MOZ_APP_VERSION"], + "channel": s["MOZ_UPDATE_CHANNEL"], + }, + } + + if args.no_download: + package = None + elif args.installer and os.path.exists(args.installer): + package = args.installer + else: + package = args.package + if package: + st = os.stat(package) + mtime = datetime.datetime.fromtimestamp(st.st_mtime) + record["download"] = { + # The release pipeline will update these keys. + "url": os.path.basename(package), + "mimetype": "application/octet-stream", + "date": mtime.isoformat() + "Z", + "size": st.st_size, + } + + json.dump(record, f, indent=2, sort_keys=True) + f.write("\n") + + with open(args.output_txt, "wt") as f: + f.write("buildID={}\n".format(build_id)) + + +if __name__ == "__main__": + main() |