alpine-zdt-images/scripts/update-release.py.in
Mike Crute a36d0616bf Convert python scripts to argparse
This removes the manual command line handling and reformats the scripts
into main methods. This is paving the way for a more unified build tool.
2020-05-26 18:10:03 -07:00

81 lines
2.1 KiB
Python

@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)