upgrade_strategy 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #!/usr/bin/python3
  2. import json
  3. import re
  4. import sys
  5. from catalog_update.upgrade_strategy import semantic_versioning
  6. from catalog_update.upgrade_strategy import datetime_versioning
  7. ENUMS = {
  8. 'image': {
  9. 'RE_STABLE_VERSION': re.compile(r'RELEASE\.\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2}Z'),
  10. 'STRIP_TEXT': 'RELEASE.',
  11. 'function': datetime_versioning,
  12. 'function_arg': '%Y-%m-%dT%H-%M-%SZ'
  13. },
  14. 'logSearchImage': {
  15. 'RE_STABLE_VERSION': re.compile(r'v\d+\.\d+\.\d+'),
  16. 'STRIP_TEXT': 'v',
  17. 'function': semantic_versioning
  18. },
  19. }
  20. def newer_mapping(image_tags):
  21. output = {
  22. "tags": {},
  23. "app_version": ""
  24. }
  25. for key in image_tags.keys():
  26. STRIP_TEXT = ENUMS[key].get('STRIP_TEXT', None) if key in ENUMS else None
  27. RE_STABLE_VERSION = ENUMS[key].get('RE_STABLE_VERSION', None) if key in ENUMS else None
  28. VERSION_FUNCTION = ENUMS[key].get('function', None) if key in ENUMS else None
  29. if (STRIP_TEXT is None) or (RE_STABLE_VERSION is None) or (VERSION_FUNCTION is None):
  30. continue
  31. tags = {t.strip(STRIP_TEXT): t for t in image_tags[key] if RE_STABLE_VERSION.fullmatch(t)}
  32. if ENUMS[key].get('function_arg', None):
  33. version = VERSION_FUNCTION(list(tags), ENUMS[key].get('function_arg'))
  34. else:
  35. version = VERSION_FUNCTION(list(tags))
  36. if not version:
  37. continue
  38. if key == 'image':
  39. output['app_version'] = version
  40. output['tags'][key] = tags[version]
  41. return output
  42. if __name__ == '__main__':
  43. try:
  44. versions_json = json.loads(sys.stdin.read())
  45. except ValueError:
  46. raise ValueError('Invalid json specified')
  47. print(json.dumps(newer_mapping(versions_json)))