diff --git a/hack/graph-util.py b/hack/graph-util.py index 56ad1358f..cfe4d93aa 100755 --- a/hack/graph-util.py +++ b/hack/graph-util.py @@ -10,6 +10,7 @@ import os import re import shutil +import sys import tarfile import yaml @@ -216,6 +217,23 @@ def normalize_node(node): return node +def print_json(directory): + nodes = load_nodes(directory=os.path.join(directory, '.nodes'), registry='quay.io', repository='openshift-release-dev/ocp-release') + nodes = load_channels(directory=os.path.join(directory, 'channels'), nodes=nodes) + nodes = block_edges(directory=os.path.join(directory, 'blocked-edges'), nodes=nodes) + + for arch_nodes in nodes.values(): + for node in arch_nodes.values(): + for key in ['channels', 'previous', 'next']: + if key in node: + node[key] = sorted(node[key]) + for key in ['internal-previous']: + if key in node: + del node[key] + json.dump({'version': 1, 'nodes': nodes}, sys.stdout, sort_keys=True, indent=2) + sys.stdout.write('\n') + + def push(directory, token, push_versions): nodes = load_nodes(directory=os.path.join(directory, '.nodes'), registry='quay.io', repository='openshift-release-dev/ocp-release') nodes = load_channels(directory=os.path.join(directory, 'channels'), nodes=nodes) @@ -446,6 +464,7 @@ def get_release_metadata(node): raise ValueError('no release-metadata in {} layers ( {} )'.format(node['payload'], json.dumps(manifest))) + def get_token(args): if args.token: return args.token @@ -454,6 +473,7 @@ def get_token(args): return f.read().strip() return None + if __name__ == '__main__': parser = argparse.ArgumentParser(description='Utilities for managing graph data.') subparsers = parser.add_subparsers() @@ -476,8 +496,15 @@ def get_token(args): ) push_to_quay_parser.set_defaults(action='push-to-quay') + print_parser = subparsers.add_parser( + 'print', + help='Write graph metadata to stdout.', + ) + print_parser.set_defaults(action='print-json') + args = parser.parse_args() - token = get_token(args=args) if args.action == 'push-to-quay': - push(directory='.', token=token, push_versions=args.versions) + push(directory='.', token=get_token(args=args), push_versions=args.versions) + if args.action == 'print-json': + print_json(directory='.')