|
@@ -0,0 +1,44 @@
|
|
|
+#!/usr/bin/python3
|
|
|
+import json
|
|
|
+import sys
|
|
|
+import re
|
|
|
+
|
|
|
+from catalog_update.upgrade_strategy import semantic_versioning
|
|
|
+from catalog_validation.exceptions import ValidationException
|
|
|
+
|
|
|
+
|
|
|
+def newer_mapping(image_tags):
|
|
|
+ key = list(image_tags.keys())[0]
|
|
|
+ tags = {}
|
|
|
+ for tag in image_tags[key]:
|
|
|
+ match = re.fullmatch('[\w]*-v[0-9]+.[0-9]+.[0-9]+-go[0-9]+.[0-9].+[0-9]+[-\w]*', tag) # noqa
|
|
|
+ if match:
|
|
|
+ removed_go_arch_version = re.sub('-go[0-9]+.[0-9].+[0-9]+[-\w]*','', tag) # noqa
|
|
|
+ app_version = re.sub('[\w]*-v', '', removed_go_arch_version) # noqa
|
|
|
+ if tags.get(app_version):
|
|
|
+ tags.get(app_version).append(tag)
|
|
|
+ else:
|
|
|
+ tags[app_version] = [tag]
|
|
|
+ version = semantic_versioning(list(tags))
|
|
|
+ if not version:
|
|
|
+ return {}
|
|
|
+
|
|
|
+ version_tag = tags[version][0]
|
|
|
+ for tag in tags.get(version):
|
|
|
+ archi = re.sub('[\w]*-v[0-9]+.[0-9]+.[0-9]+-go[0-9]+.[0-9].+[0-9]+', '', tag) # noqa
|
|
|
+ if archi == 'amd64' or archi == '':
|
|
|
+ version_tag = tag
|
|
|
+ break
|
|
|
+ return {
|
|
|
+ 'tags': {key: f'{version_tag}'},
|
|
|
+ 'app_version': f'{version_tag}',
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+if __name__ == '__main__':
|
|
|
+ try:
|
|
|
+ versions_json = json.loads(sys.stdin.read())
|
|
|
+ except ValueError:
|
|
|
+ raise ValidationException('Invalid JSON')
|
|
|
+
|
|
|
+ print(json.dumps(newer_mapping(versions_json)))
|