@PYTHON@ # vim: set ts=4 et: import os import re import sys import json import argparse import yaml def find_repo_root(): path = os.getcwd() while ".git" not in set(os.listdir(path)) and path != "/": path = os.path.dirname(path) if path == "/": raise Exception("No repo found, stopping at /") return path def parse_artifact_ids(ids): parsed = re.split(":|,", ids) return dict(zip(parsed[0::2], parsed[1::2])) def main(args): parser = argparse.ArgumentParser(description="Update release YAML") parser.add_argument("profile", help="name of profile to update") parser.add_argument("build", help="name of build to update") args = parser.parse_args() root = find_repo_root() release_dir = os.path.join(root, "releases") if not os.path.exists(release_dir): os.makedirs(release_dir) release_yaml = os.path.join(release_dir, f"{args.profile}.yaml") releases = {} if os.path.exists(release_yaml): with open(release_yaml, "r") as data: releases = yaml.safe_load(data) manifest_json = os.path.join( root, "build", "profile", args.profile, args.build, "manifest.json") with open(manifest_json, "r") as data: manifest = json.load(data) data = manifest["builds"][0]["custom_data"] release = data["release"] if args.build not in releases: releases[args.build] = {} if release not in releases[args.build]: releases[args.build][release] = {} releases[args.build][release][data["ami_name"]] = { "description": data["ami_desc"], "profile": args.profile, "profile_build": args.build, "version": data["version"], "release": release, "arch": data["arch"], "revision": data["revision"], "end_of_life": data["end_of_life"], "build_time": manifest["builds"][0]["build_time"], "artifacts": parse_artifact_ids(manifest["builds"][0]["artifact_id"]), } with open(release_yaml, "w") as data: yaml.dump(releases, data, sort_keys=False) if __name__ == "__main__": main(sys.argv)