upgrade_strategy 1.5 KB

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