From b2a7840a2821d642ce65e98b32aef046ee1924c5 Mon Sep 17 00:00:00 2001 From: Andrew Hopkins Date: Tue, 5 Sep 2023 16:32:50 -0700 Subject: [PATCH] CI: Update matrix.py so all code is contained in functions. 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 | 278 +++++++++++++++++++++++----------------------- 1 file changed, 140 insertions(+), 138 deletions(-) diff --git a/.github/matrix.py b/.github/matrix.py index 9159d2fdd..5051d1638 100755 --- a/.github/matrix.py +++ b/.github/matrix.py @@ -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: {} ".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 + # Ubuntu -if "haproxy-" in ref_name: - os = "ubuntu-22.04" # stable branch -else: - os = "ubuntu-latest" # development branch + 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"]: + 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", - ] + 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", + ], + } + ) - if "haproxy-" not in ref_name: # development branch - ssl_versions = ssl_versions + [ - "OPENSSL_VERSION=latest", - "LIBRESSL_VERSION=latest", + # 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"]: + 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", ] - 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) + 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": "{}, {}, ssl={}".format(os, CC, clean_ssl(ssl)), + "name": "{}, {}, no features".format(os, CC), "os": os, "TARGET": TARGET, "CC": CC, - "ssl": ssl, - "FLAGS": flags, + "FLAGS": [], } ) -# macOS + # Print matrix -if "haproxy-" in ref_name: - os = "macos-12" # stable branch -else: - os = "macos-latest" # development branch + print(json.dumps(matrix, indent=4, sort_keys=True)) -TARGET = "osx" -for CC in ["clang"]: - matrix.append( - { - "name": "{}, {}, no features".format(os, CC), - "os": os, - "TARGET": TARGET, - "CC": CC, - "FLAGS": [], - } - ) + 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) -# Print matrix - -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 __name__ == "__main__": + if len(sys.argv) == 2: + ref_name = sys.argv[1] + main(ref_name) + else: + print("Usage: {} ".format(sys.argv[0]), file=sys.stderr) + sys.exit(1)