]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
CI: Update matrix.py so all code is contained in functions.
authorAndrew Hopkins <andhop@amazon.com>
Tue, 5 Sep 2023 23:32:50 +0000 (16:32 -0700)
committerWilliam Lallemand <wlallemand@haproxy.org>
Wed, 6 Sep 2023 11:41:36 +0000 (13:41 +0200)
Refactor matrix.py so all the logic is contained inside either
helper functions or a new main function. Run the new main function
by default. This lets other GitHub actions use functions in the
python code without generating the whole matrix.

.github/matrix.py

index 9159d2fdd9534f044cb79dfd4489340dbeb252e7..5051d16382cb1f7bef28bff83494f458da41acd1 100755 (executable)
@@ -15,12 +15,6 @@ import sys
 import urllib.request
 from os import environ
 
-if len(sys.argv) == 2:
-    ref_name = sys.argv[1]
-else:
-    print("Usage: {} <ref_name>".format(sys.argv[0]), file=sys.stderr)
-    sys.exit(1)
-
 #
 # this CI is used for both development and stable branches of HAProxy
 #
@@ -29,8 +23,6 @@ else:
 #   "haproxy-" - stable branches
 #   otherwise  - development branch (i.e. "latest" ssl variants, "latest" github images)
 #
-print("Generating matrix for branch '{}'.".format(ref_name))
-
 
 def clean_ssl(ssl):
     return ssl.replace("_VERSION", "").lower()
@@ -101,160 +93,170 @@ def get_asan_flags(cc):
         'CPU_CFLAGS.generic="-O1"',
     ]
 
+def main(ref_name):
+    print("Generating matrix for branch '{}'.".format(ref_name))
+
+    matrix = []
 
-matrix = []
-
-# Ubuntu
-
-if "haproxy-" in ref_name:
-    os = "ubuntu-22.04" # stable branch
-else:
-    os = "ubuntu-latest" # development branch
-
-TARGET = "linux-glibc"
-for CC in ["gcc", "clang"]:
-    matrix.append(
-        {
-            "name": "{}, {}, no features".format(os, CC),
-            "os": os,
-            "TARGET": TARGET,
-            "CC": CC,
-            "FLAGS": [],
-        }
-    )
-
-    matrix.append(
-        {
-            "name": "{}, {}, all features".format(os, CC),
-            "os": os,
-            "TARGET": TARGET,
-            "CC": CC,
-            "FLAGS": [
-                "USE_ZLIB=1",
-                "USE_OT=1",
-                "OT_INC=${HOME}/opt-ot/include",
-                "OT_LIB=${HOME}/opt-ot/lib",
-                "OT_RUNPATH=1",
-                "USE_PCRE=1",
-                "USE_PCRE_JIT=1",
-                "USE_LUA=1",
-                "USE_OPENSSL=1",
-                "USE_SYSTEMD=1",
-                "USE_WURFL=1",
-                "WURFL_INC=addons/wurfl/dummy",
-                "WURFL_LIB=addons/wurfl/dummy",
-                "USE_DEVICEATLAS=1",
-                "DEVICEATLAS_SRC=addons/deviceatlas/dummy",
-                "USE_PROMEX=1",
-                "USE_51DEGREES=1",
-                "51DEGREES_SRC=addons/51degrees/dummy/pattern",
-            ],
-        }
-    )
-
-    # ASAN
-
-    matrix.append(
-        {
-            "name": "{}, {}, ASAN, all features".format(os, CC),
-            "os": os,
-            "TARGET": TARGET,
-            "CC": CC,
-            "FLAGS": get_asan_flags(CC)
-            + [
-                "USE_ZLIB=1",
-                "USE_OT=1",
-                "OT_INC=${HOME}/opt-ot/include",
-                "OT_LIB=${HOME}/opt-ot/lib",
-                "OT_RUNPATH=1",
-                "USE_PCRE=1",
-                "USE_PCRE_JIT=1",
-                "USE_LUA=1",
-                "USE_OPENSSL=1",
-                "USE_SYSTEMD=1",
-                "USE_WURFL=1",
-                "WURFL_INC=addons/wurfl/dummy",
-                "WURFL_LIB=addons/wurfl/dummy",
-                "USE_DEVICEATLAS=1",
-                "DEVICEATLAS_SRC=addons/deviceatlas/dummy",
-                "USE_PROMEX=1",
-                "USE_51DEGREES=1",
-                "51DEGREES_SRC=addons/51degrees/dummy/pattern",
-            ],
-        }
-    )
-
-    for compression in ["USE_ZLIB=1"]:
+    # Ubuntu
+
+    if "haproxy-" in ref_name:
+        os = "ubuntu-22.04" # stable branch
+    else:
+        os = "ubuntu-latest" # development branch
+
+    TARGET = "linux-glibc"
+    for CC in ["gcc", "clang"]:
         matrix.append(
             {
-                "name": "{}, {}, gz={}".format(os, CC, clean_compression(compression)),
+                "name": "{}, {}, no features".format(os, CC),
                 "os": os,
                 "TARGET": TARGET,
                 "CC": CC,
-                "FLAGS": [compression],
+                "FLAGS": [],
             }
         )
 
-    ssl_versions = [
-        "stock",
-        "OPENSSL_VERSION=1.0.2u",
-        "OPENSSL_VERSION=1.1.1s",
-        "QUICTLS=yes",
-        # "BORINGSSL=yes",
-    ]
-
-    if "haproxy-" not in ref_name: # development branch
-        ssl_versions = ssl_versions + [
-            "OPENSSL_VERSION=latest",
-            "LIBRESSL_VERSION=latest",
-        ]
+        matrix.append(
+            {
+                "name": "{}, {}, all features".format(os, CC),
+                "os": os,
+                "TARGET": TARGET,
+                "CC": CC,
+                "FLAGS": [
+                    "USE_ZLIB=1",
+                    "USE_OT=1",
+                    "OT_INC=${HOME}/opt-ot/include",
+                    "OT_LIB=${HOME}/opt-ot/lib",
+                    "OT_RUNPATH=1",
+                    "USE_PCRE=1",
+                    "USE_PCRE_JIT=1",
+                    "USE_LUA=1",
+                    "USE_OPENSSL=1",
+                    "USE_SYSTEMD=1",
+                    "USE_WURFL=1",
+                    "WURFL_INC=addons/wurfl/dummy",
+                    "WURFL_LIB=addons/wurfl/dummy",
+                    "USE_DEVICEATLAS=1",
+                    "DEVICEATLAS_SRC=addons/deviceatlas/dummy",
+                    "USE_PROMEX=1",
+                    "USE_51DEGREES=1",
+                    "51DEGREES_SRC=addons/51degrees/dummy/pattern",
+                ],
+            }
+        )
 
-    for ssl in ssl_versions:
-        flags = ["USE_OPENSSL=1"]
-        if ssl == "BORINGSSL=yes" or ssl == "QUICTLS=yes" or "LIBRESSL" in ssl:
-            flags.append("USE_QUIC=1")
-        if ssl != "stock":
-            flags.append("SSL_LIB=${HOME}/opt/lib")
-            flags.append("SSL_INC=${HOME}/opt/include")
-        if "LIBRESSL" in ssl and "latest" in ssl:
-            ssl = determine_latest_libressl(ssl)
-        if "OPENSSL" in ssl and "latest" in ssl:
-            ssl = determine_latest_openssl(ssl)
+        # ASAN
 
         matrix.append(
             {
-                "name": "{}, {}, ssl={}".format(os, CC, clean_ssl(ssl)),
+                "name": "{}, {}, ASAN, all features".format(os, CC),
                 "os": os,
                 "TARGET": TARGET,
                 "CC": CC,
-                "ssl": ssl,
-                "FLAGS": flags,
+                "FLAGS": get_asan_flags(CC)
+                + [
+                    "USE_ZLIB=1",
+                    "USE_OT=1",
+                    "OT_INC=${HOME}/opt-ot/include",
+                    "OT_LIB=${HOME}/opt-ot/lib",
+                    "OT_RUNPATH=1",
+                    "USE_PCRE=1",
+                    "USE_PCRE_JIT=1",
+                    "USE_LUA=1",
+                    "USE_OPENSSL=1",
+                    "USE_SYSTEMD=1",
+                    "USE_WURFL=1",
+                    "WURFL_INC=addons/wurfl/dummy",
+                    "WURFL_LIB=addons/wurfl/dummy",
+                    "USE_DEVICEATLAS=1",
+                    "DEVICEATLAS_SRC=addons/deviceatlas/dummy",
+                    "USE_PROMEX=1",
+                    "USE_51DEGREES=1",
+                    "51DEGREES_SRC=addons/51degrees/dummy/pattern",
+                ],
             }
         )
 
-# macOS
+        for compression in ["USE_ZLIB=1"]:
+            matrix.append(
+                {
+                    "name": "{}, {}, gz={}".format(os, CC, clean_compression(compression)),
+                    "os": os,
+                    "TARGET": TARGET,
+                    "CC": CC,
+                    "FLAGS": [compression],
+                }
+            )
+
+        ssl_versions = [
+            "stock",
+            "OPENSSL_VERSION=1.0.2u",
+            "OPENSSL_VERSION=1.1.1s",
+            "QUICTLS=yes",
+            # "BORINGSSL=yes",
+        ]
 
-if "haproxy-" in ref_name:
-    os = "macos-12"     # stable branch
-else:
-    os = "macos-latest" # development branch
+        if "haproxy-" not in ref_name: # development branch
+            ssl_versions = ssl_versions + [
+                "OPENSSL_VERSION=latest",
+                "LIBRESSL_VERSION=latest",
+            ]
+
+        for ssl in ssl_versions:
+            flags = ["USE_OPENSSL=1"]
+            if ssl == "BORINGSSL=yes" or ssl == "QUICTLS=yes" or "LIBRESSL" in ssl:
+                flags.append("USE_QUIC=1")
+            if ssl != "stock":
+                flags.append("SSL_LIB=${HOME}/opt/lib")
+                flags.append("SSL_INC=${HOME}/opt/include")
+            if "LIBRESSL" in ssl and "latest" in ssl:
+                ssl = determine_latest_libressl(ssl)
+            if "OPENSSL" in ssl and "latest" in ssl:
+                ssl = determine_latest_openssl(ssl)
+
+            matrix.append(
+                {
+                    "name": "{}, {}, ssl={}".format(os, CC, clean_ssl(ssl)),
+                    "os": os,
+                    "TARGET": TARGET,
+                    "CC": CC,
+                    "ssl": ssl,
+                    "FLAGS": flags,
+                }
+            )
+
+    # macOS
+
+    if "haproxy-" in ref_name:
+        os = "macos-12"     # stable branch
+    else:
+        os = "macos-latest" # development branch
+
+    TARGET = "osx"
+    for CC in ["clang"]:
+        matrix.append(
+            {
+                "name": "{}, {}, no features".format(os, CC),
+                "os": os,
+                "TARGET": TARGET,
+                "CC": CC,
+                "FLAGS": [],
+            }
+        )
 
-TARGET = "osx"
-for CC in ["clang"]:
-    matrix.append(
-        {
-            "name": "{}, {}, no features".format(os, CC),
-            "os": os,
-            "TARGET": TARGET,
-            "CC": CC,
-            "FLAGS": [],
-        }
-    )
+    # Print matrix
 
-# Print matrix
+    print(json.dumps(matrix, indent=4, sort_keys=True))
 
-print(json.dumps(matrix, indent=4, sort_keys=True))
+    if environ.get("GITHUB_OUTPUT") is not None:
+        with open(environ.get("GITHUB_OUTPUT"), "a") as f:
+            print("matrix={}".format(json.dumps({"include": matrix})), file=f)
 
-if environ.get("GITHUB_OUTPUT") is not None:
-    with open(environ.get("GITHUB_OUTPUT"), "a") as f:
-        print("matrix={}".format(json.dumps({"include": matrix})), file=f)
+if __name__ == "__main__":
+    if len(sys.argv) == 2:
+        ref_name = sys.argv[1]
+        main(ref_name)
+    else:
+        print("Usage: {} <ref_name>".format(sys.argv[0]), file=sys.stderr)
+        sys.exit(1)