@PYTHON@ # vim: ts=4 et: from datetime import datetime from distutils.version import StrictVersion import functools import os import re import sys import yaml if len(sys.argv) != 2: sys.exit("Usage: " + os.path.basename(__file__) + "") PROFILE = sys.argv[1] RELEASE_DIR = os.path.join( os.path.dirname(os.path.realpath(__file__)), '..', 'releases' ) README_MD = os.path.join( RELEASE_DIR, 'README.md') RELEASE_YAML = os.path.join( RELEASE_DIR, PROFILE + '.yaml') # read in releases/.yaml with open(RELEASE_YAML, 'r') as data: RELEASES = yaml.safe_load(data) sections = {} for build, releases in RELEASES.items(): for release, amis in releases.items(): for name, info in amis.items(): version = info['version'] arch = info['arch'] built = info['build_time'] if version in sections: ver = sections[version] else: ver = { 'release': '', 'built': {}, 'name': {}, 'ami': {} } if (arch not in ver['built'] or ver['built'][arch] < built): ver['release'] = release ver['name'][arch] = name ver['built'][arch] = built for region, ami in info['artifacts'].items(): if region not in ver['ami']: ver['ami'][region] = {} ver['ami'][region][arch] = ami sections[version] = ver SECTION = """ ### Alpine Linux {release} ({date})
click to show/hide

{rows}

""" AMI = " [{id}](https://{r}.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId={id}) " + \ "([launch](https://{r}.console.aws.amazon.com/ec2/home#launchAmi={id})) |" ARCHS = ['x86_64', 'aarch64'] # most -> least recent version, edge at end def ver_cmp(a, b): try: if StrictVersion(a) < StrictVersion(b): return 1 if StrictVersion(a) > StrictVersion(b): return -1 return 0 except ValueError: # "edge" doesn't work with StrictVersion if a == 'edge': return 1 if b == 'edge': return -1 return 0 ami_list = "## AMIs\n" for version in sorted(list(sections.keys()), key=functools.cmp_to_key(ver_cmp)): info = sections[version] release = info['release'] rows = [] rows.append('| Region |') rows.append('| ------ |') for arch in ARCHS: if arch in info['name']: rows[0] += ' {n} |'.format(n=info['name'][arch]) rows[1] += ' --- |' for region, amis in info['ami'].items(): row = '| {r} |'.format(r=region) for arch in ARCHS: if arch in amis: row += AMI.format(r=region, id=amis[arch]) rows.append(row) ami_list += SECTION.format( release=release.capitalize(), date=datetime.utcfromtimestamp(max(info['built'].values())).date(), rows="\n".join(rows) ) with open(README_MD, 'r') as file: readme = file.read() readme_re = re.compile('## AMIs.*\Z', re.S) with open(README_MD, 'w') as file: file.write(readme_re.sub(ami_list, readme))