upgrade_strategy 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  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. 'j21Image': {
  61. 'RE_STABLE_VERSION': re.compile(rf'{RE_STABLE_VERSION_BASE}-java21'),
  62. 'STRIP_TEXT': '-java21'
  63. },
  64. 'j21gImage': {
  65. 'RE_STABLE_VERSION': re.compile(rf'{RE_STABLE_VERSION_BASE}-java21-graalvm'),
  66. 'STRIP_TEXT': '-java21-graalvm'
  67. },
  68. 'j21alpineImage': {
  69. 'RE_STABLE_VERSION': re.compile(rf'{RE_STABLE_VERSION_BASE}-java21-alpine'),
  70. 'STRIP_TEXT': '-java21-alpine'
  71. }
  72. }
  73. def newer_mapping(image_tags):
  74. output = {
  75. "tags": {},
  76. "app_version": ""
  77. }
  78. for key in image_tags.keys():
  79. STRIP_TEXT = ENUMS[key].get('STRIP_TEXT', None) if key in ENUMS else None
  80. RE_STABLE_VERSION = ENUMS[key].get('RE_STABLE_VERSION', None) if key in ENUMS else None
  81. if (STRIP_TEXT is None) or (RE_STABLE_VERSION is None):
  82. continue
  83. tags = {t.strip(STRIP_TEXT): t for t in image_tags[key] if RE_STABLE_VERSION.fullmatch(t)}
  84. version = semantic_versioning(list(tags))
  85. if not version:
  86. continue
  87. if key == 'j8Image':
  88. output['app_version'] = version
  89. output['tags'][key] = tags[version]
  90. return output
  91. if __name__ == '__main__':
  92. try:
  93. versions_json = json.loads(sys.stdin.read())
  94. except ValueError:
  95. raise ValueError('Invalid json specified')
  96. print(json.dumps(newer_mapping(versions_json)))