upgrade_strategy 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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. 'image': {
  9. 'RE_STABLE_VERSION': re.compile(rf'v{RE_STABLE_VERSION_BASE}'),
  10. 'STRIP_TEXT': 'v'
  11. },
  12. 'mlImage': {
  13. 'RE_STABLE_VERSION': re.compile(rf'v{RE_STABLE_VERSION_BASE}'),
  14. 'STRIP_TEXT': 'v'
  15. },
  16. 'mlCudaImage': {
  17. 'RE_STABLE_VERSION': re.compile(rf'v{RE_STABLE_VERSION_BASE}-cuda'),
  18. 'STRIP_TEXT': 'v'
  19. },
  20. 'mlOpenvinoImage': {
  21. 'RE_STABLE_VERSION': re.compile(rf'v{RE_STABLE_VERSION_BASE}-openvino'),
  22. 'STRIP_TEXT': 'v'
  23. },
  24. 'pgvectorImage': {
  25. 'RE_STABLE_VERSION': re.compile(rf'pg15-v{RE_STABLE_VERSION_BASE}'),
  26. 'STRIP_TEXT': 'pg15-v'
  27. }
  28. }
  29. def strip_text(key, STRIP_TEXT):
  30. key = key.replace('-cuda', '').replace('-openvino', '')
  31. return key.strip(STRIP_TEXT)
  32. def newer_mapping(image_tags):
  33. output = {
  34. "tags": {},
  35. "app_version": ""
  36. }
  37. for key in image_tags.keys():
  38. STRIP_TEXT = ENUMS[key].get('STRIP_TEXT', None)
  39. RE_STABLE_VERSION = ENUMS[key].get('RE_STABLE_VERSION')
  40. if (STRIP_TEXT is None) or (RE_STABLE_VERSION is None):
  41. continue
  42. tags = {strip_text(t, STRIP_TEXT): t for t in image_tags[key] if RE_STABLE_VERSION.fullmatch(t)}
  43. version = semantic_versioning(list(tags))
  44. if not version:
  45. continue
  46. if key == 'image':
  47. output['app_version'] = version
  48. output['tags'][key] = tags[version]
  49. return output
  50. if __name__ == '__main__':
  51. try:
  52. versions_json = json.loads(sys.stdin.read())
  53. except ValueError:
  54. raise ValueError('Invalid json specified')
  55. print(json.dumps(newer_mapping(versions_json)))