Explorar o código

NAS-122566 / 23.10 / update "upgrade strategy" for apps with multiple images (#1281)

* update "upgrade strategy" for minecraft

* shorten line

* extraline

* don't try to compare without

* make robust

* terraria update strategy

* minio upgrade strategy

* add arg

* cleaner
Stavros Kois %!s(int64=2) %!d(string=hai) anos
pai
achega
0ca981c6f6

+ 18 - 1
library/ix-dev/community/minecraft/upgrade_info.json

@@ -1 +1,18 @@
-{"filename": "values.yaml", "keys": ["image"]}
+{
+  "filename": "values.yaml",
+  "keys": [
+    "j8Image",
+    "j8gceImage",
+    "j8j9Image",
+    "j8jdkImage",
+    "j11Image",
+    "j11j9Image",
+    "j11jdkImage",
+    "j17Image",
+    "j17j9Image",
+    "j17jdkImage",
+    "j17gceImage",
+    "j17alpineImage",
+    "j19Image"
+  ]
+}

+ 78 - 11
library/ix-dev/community/minecraft/upgrade_strategy

@@ -5,22 +5,89 @@ import sys
 
 from catalog_update.upgrade_strategy import semantic_versioning
 
-
-RE_STABLE_VERSION = re.compile(r'[0-9]+\.[0-9]+\.[0-9]+')
+RE_STABLE_VERSION_BASE = r'\d+\.\d+\.\d+'
+ENUMS = {
+    'j8Image': {
+        'RE_STABLE_VERSION': re.compile(rf'{RE_STABLE_VERSION_BASE}-java8'),
+        'STRIP_TEXT': '-java8'
+    },
+    'j8gceImage': {
+        'RE_STABLE_VERSION': re.compile(rf'{RE_STABLE_VERSION_BASE}-java8-graalvm-ce'),
+        'STRIP_TEXT': '-java8-graalvm-ce'
+    },
+    'j8j9Image': {
+        'RE_STABLE_VERSION': re.compile(rf'{RE_STABLE_VERSION_BASE}-java8-openj9'),
+        'STRIP_TEXT': '-java8-openj9'
+    },
+    'j8jdkImage': {
+        'RE_STABLE_VERSION': re.compile(rf'{RE_STABLE_VERSION_BASE}-java8-jdk'),
+        'STRIP_TEXT': '-java8-jdk'
+    },
+    'j11Image': {
+        'RE_STABLE_VERSION': re.compile(rf'{RE_STABLE_VERSION_BASE}-java11'),
+        'STRIP_TEXT': '-java11'
+    },
+    'j11j9Image': {
+        'RE_STABLE_VERSION': re.compile(rf'{RE_STABLE_VERSION_BASE}-java11-openj9'),
+        'STRIP_TEXT': '-java11-openj9'
+    },
+    'j11jdkImage': {
+        'RE_STABLE_VERSION': re.compile(rf'{RE_STABLE_VERSION_BASE}-java11-jdk'),
+        'STRIP_TEXT': '-java11-jdk'
+    },
+    'j17Image': {
+        'RE_STABLE_VERSION': re.compile(rf'{RE_STABLE_VERSION_BASE}-java17'),
+        'STRIP_TEXT': '-java17'
+    },
+    'j17j9Image': {
+        'RE_STABLE_VERSION': re.compile(rf'{RE_STABLE_VERSION_BASE}-java17-openj9'),
+        'STRIP_TEXT': '-java17-openj9'
+    },
+    'j17jdkImage': {
+        'RE_STABLE_VERSION': re.compile(rf'{RE_STABLE_VERSION_BASE}-java17-jdk'),
+        'STRIP_TEXT': '-java17-jdk'
+    },
+    'j17gceImage': {
+        'RE_STABLE_VERSION': re.compile(rf'{RE_STABLE_VERSION_BASE}-java17-graalvm-ce'),
+        'STRIP_TEXT': '-java17-graalvm-ce'
+    },
+    'j17alpineImage': {
+        'RE_STABLE_VERSION': re.compile(rf'{RE_STABLE_VERSION_BASE}-java17-alpine'),
+        'STRIP_TEXT': '-java17-alpine'
+    },
+    'j19Image': {
+        'RE_STABLE_VERSION': re.compile(rf'{RE_STABLE_VERSION_BASE}-java19'),
+        'STRIP_TEXT': '-java19'
+    }
+}
 
 
 def newer_mapping(image_tags):
-    key = list(image_tags.keys())[0]
-    tags = {t: t for t in image_tags[key] if RE_STABLE_VERSION.fullmatch(t)}
-    version = semantic_versioning(list(tags))
-    if not version:
-        return {}
-
-    return {
-        'tags': {key: tags[version]},
-        'app_version': version,
+    output = {
+        "tags": {},
+        "app_version": ""
     }
 
+    for key in image_tags.keys():
+        STRIP_TEXT = ENUMS[key].get('STRIP_TEXT', None) if key in ENUMS else None
+        RE_STABLE_VERSION = ENUMS[key].get('RE_STABLE_VERSION', None) if key in ENUMS else None
+
+        if (STRIP_TEXT is None) or (RE_STABLE_VERSION is None):
+            continue
+
+        tags = {t.strip(STRIP_TEXT): t for t in image_tags[key] if RE_STABLE_VERSION.fullmatch(t)}
+        version = semantic_versioning(list(tags))
+
+        if not version:
+            continue
+
+        if key == 'j8Image':
+            output['app_version'] = version
+
+        output['tags'][key] = tags[version]
+
+    return output
+
 
 if __name__ == '__main__':
     try:

+ 1 - 1
library/ix-dev/community/terraria/upgrade_info.json

@@ -1 +1 @@
-{"filename": "values.yaml", "keys": ["image"]}
+{ "filename": "values.yaml", "keys": ["image", "vanillaImage"] }

+ 34 - 10
library/ix-dev/community/terraria/upgrade_strategy

@@ -6,21 +6,45 @@ import sys
 from catalog_update.upgrade_strategy import semantic_versioning
 
 
-RE_STABLE_VERSION = re.compile(r'tshock-[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+-[0-9]+\.[0-9]+\.[0-9]+(-[0-9]+)?')
+RE_STABLE_VERSION_BASE = r'\d+\.\d+\.\d+'
+ENUMS = {
+    'image': {
+        'RE_STABLE_VERSION': re.compile(rf'tshock-{RE_STABLE_VERSION_BASE}\.[0-9]+-{RE_STABLE_VERSION_BASE}-[0-9]+'),
+        'STRIP_TEXT': 'tschock-'
+    },
+    'vanillaImage': {
+        'RE_STABLE_VERSION': re.compile(rf'vanilla-{RE_STABLE_VERSION_BASE}\.[0-9]+'),
+        'STRIP_TEXT': 'vanilla-'
+    },
+}
 
 
 def newer_mapping(image_tags):
-    key = list(image_tags.keys())[0]
-    tags = {t: t for t in image_tags[key] if RE_STABLE_VERSION.fullmatch(t)}
-    version = semantic_versioning(list(tags))
-    if not version:
-        return {}
-
-    return {
-        'tags': {key: tags[version]},
-        'app_version': version,
+    output = {
+        "tags": {},
+        "app_version": ""
     }
 
+    for key in image_tags.keys():
+        STRIP_TEXT = ENUMS[key].get('STRIP_TEXT', None) if key in ENUMS else None
+        RE_STABLE_VERSION = ENUMS[key].get('RE_STABLE_VERSION', None) if key in ENUMS else None
+
+        if (STRIP_TEXT is None) or (RE_STABLE_VERSION is None):
+            continue
+
+        tags = {t.strip(STRIP_TEXT): t for t in image_tags[key] if RE_STABLE_VERSION.fullmatch(t)}
+        version = semantic_versioning(list(tags))
+
+        if not version:
+            continue
+
+        if key == 'image':
+            output['app_version'] = version
+
+        output['tags'][key] = tags[version]
+
+    return output
+
 
 if __name__ == '__main__':
     try:

+ 1 - 1
library/ix-dev/enterprise/minio/upgrade_info.json

@@ -1 +1 @@
-{"filename": "values.yaml", "keys": ["image"]}
+{ "filename": "values.yaml", "keys": ["image", "logsearchImage"] }

+ 44 - 10
library/ix-dev/enterprise/minio/upgrade_strategy_disable

@@ -1,23 +1,57 @@
 #!/usr/bin/python3
 import json
+import re
 import sys
 
+from catalog_update.upgrade_strategy import semantic_versioning
 from catalog_update.upgrade_strategy import datetime_versioning
 
 
+ENUMS = {
+    'image': {
+        'RE_STABLE_VERSION': re.compile(r'RELEASE.\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2}}Z'),
+        'STRIP_TEXT': 'RELEASE.',
+        'function': datetime_versioning,
+        'function_arg': '%Y-%m-%dT%H-%M-%SZ'
+    },
+    'logsearchImage': {
+        'RE_STABLE_VERSION': re.compile(r'v\d+\.\d+\.\d+'),
+        'STRIP_TEXT': 'v',
+        'function': semantic_versioning
+    },
+}
+
+
 def newer_mapping(image_tags):
-    key = list(image_tags.keys())[0]
-    tags = {t.strip('RELEASE.'): t for t in image_tags[key] if t.startswith(
-        'RELEASE.') and t.endswith('Z')}
-    version = datetime_versioning(list(tags), '%Y-%m-%dT%H-%M-%SZ')
-    if not version:
-        return {}
-
-    return {
-        'tags': {key: tags[version]},
-        'app_version': version.split('T')[0],
+
+    output = {
+        "tags": {},
+        "app_version": ""
     }
 
+    for key in image_tags.keys():
+        STRIP_TEXT = ENUMS[key].get('STRIP_TEXT', None) if key in ENUMS else None
+        RE_STABLE_VERSION = ENUMS[key].get('RE_STABLE_VERSION', None) if key in ENUMS else None
+        VERSION_FUNCTION = ENUMS[key].get('function', None) if key in ENUMS else None
+
+        if (STRIP_TEXT is None) or (RE_STABLE_VERSION is None) or (VERSION_FUNCTION is None):
+            continue
+
+        tags = {t.strip(STRIP_TEXT): t for t in image_tags[key] if RE_STABLE_VERSION.fullmatch(t)}
+        if ENUMS[key].get('function_arg', None):
+            version = VERSION_FUNCTION(list(tags), ENUMS[key].get('function_arg'))
+        else:
+            version = VERSION_FUNCTION(list(tags))
+        if not version:
+            continue
+
+        if key == 'image':
+            output['app_version'] = version
+
+        output['tags'][key] = tags[version]
+
+    return output
+
 
 if __name__ == '__main__':
     try: