2019-05-28 05:27:55 +00:00
|
|
|
@PYTHON@
|
|
|
|
# vim: set ts=4 et:
|
|
|
|
|
|
|
|
import os
|
|
|
|
import re
|
|
|
|
import sys
|
2020-05-22 01:22:26 +00:00
|
|
|
import json
|
|
|
|
import argparse
|
|
|
|
|
2019-05-28 05:27:55 +00:00
|
|
|
import yaml
|
|
|
|
|
2020-05-22 01:22:26 +00:00
|
|
|
|
|
|
|
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)
|