upgrade_strategy 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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. 'j8Image': {
  9. 'RE_STABLE_VERSION': re.compile(rf'{RE_STABLE_VERSION_BASE}-java8'),
  10. 'STRIP_TEXT': '-java8'
  11. },
  12. 'j8gceImage': {
  13. 'RE_STABLE_VERSION': re.compile(rf'{RE_STABLE_VERSION_BASE}-java8-graalvm-ce'),
  14. 'STRIP_TEXT': '-java8-graalvm-ce'
  15. },
  16. 'j8j9Image': {
  17. 'RE_STABLE_VERSION': re.compile(rf'{RE_STABLE_VERSION_BASE}-java8-openj9'),
  18. 'STRIP_TEXT': '-java8-openj9'
  19. },
  20. 'j8jdkImage': {
  21. 'RE_STABLE_VERSION': re.compile(rf'{RE_STABLE_VERSION_BASE}-java8-jdk'),
  22. 'STRIP_TEXT': '-java8-jdk'
  23. },
  24. 'j11Image': {
  25. 'RE_STABLE_VERSION': re.compile(rf'{RE_STABLE_VERSION_BASE}-java11'),
  26. 'STRIP_TEXT': '-java11'
  27. },
  28. 'j11j9Image': {
  29. 'RE_STABLE_VERSION': re.compile(rf'{RE_STABLE_VERSION_BASE}-java11-openj9'),
  30. 'STRIP_TEXT': '-java11-openj9'
  31. },
  32. 'j11jdkImage': {
  33. 'RE_STABLE_VERSION': re.compile(rf'{RE_STABLE_VERSION_BASE}-java11-jdk'),
  34. 'STRIP_TEXT': '-java11-jdk'
  35. },
  36. 'j17Image': {
  37. 'RE_STABLE_VERSION': re.compile(rf'{RE_STABLE_VERSION_BASE}-java17'),
  38. 'STRIP_TEXT': '-java17'
  39. },
  40. 'j17j9Image': {
  41. 'RE_STABLE_VERSION': re.compile(rf'{RE_STABLE_VERSION_BASE}-java17-openj9'),
  42. 'STRIP_TEXT': '-java17-openj9'
  43. },
  44. 'j17jdkImage': {
  45. 'RE_STABLE_VERSION': re.compile(rf'{RE_STABLE_VERSION_BASE}-java17-jdk'),
  46. 'STRIP_TEXT': '-java17-jdk'
  47. },
  48. 'j17gceImage': {
  49. 'RE_STABLE_VERSION': re.compile(rf'{RE_STABLE_VERSION_BASE}-java17-graalvm-ce'),
  50. 'STRIP_TEXT': '-java17-graalvm-ce'
  51. },
  52. 'j17alpineImage': {
  53. 'RE_STABLE_VERSION': re.compile(rf'{RE_STABLE_VERSION_BASE}-java17-alpine'),
  54. 'STRIP_TEXT': '-java17-alpine'
  55. },
  56. 'j19Image': {
  57. 'RE_STABLE_VERSION': re.compile(rf'{RE_STABLE_VERSION_BASE}-java19'),
  58. 'STRIP_TEXT': '-java19'
  59. }
  60. }
  61. def newer_mapping(image_tags):
  62. output = {
  63. "tags": {},
  64. "app_version": ""
  65. }
  66. for key in image_tags.keys():
  67. STRIP_TEXT = ENUMS[key].get('STRIP_TEXT', None) if key in ENUMS else None
  68. RE_STABLE_VERSION = ENUMS[key].get('RE_STABLE_VERSION', None) if key in ENUMS else None
  69. if (STRIP_TEXT is None) or (RE_STABLE_VERSION is None):
  70. continue
  71. tags = {t.strip(STRIP_TEXT): t for t in image_tags[key] if RE_STABLE_VERSION.fullmatch(t)}
  72. version = semantic_versioning(list(tags))
  73. if not version:
  74. continue
  75. if key == 'j8Image':
  76. output['app_version'] = version
  77. output['tags'][key] = tags[version]
  78. return output
  79. if __name__ == '__main__':
  80. try:
  81. versions_json = json.loads(sys.stdin.read())
  82. except ValueError:
  83. raise ValueError('Invalid json specified')
  84. print(json.dumps(newer_mapping(versions_json)))