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.
This commit is contained in:
Andrew Hopkins 2023-09-05 16:32:50 -07:00 committed by William Lallemand
parent 4f77690366
commit b2a7840a28

278
.github/matrix.py vendored
View File

@ -15,12 +15,6 @@ import sys
import urllib.request import urllib.request
from os import environ 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 # this CI is used for both development and stable branches of HAProxy
# #
@ -29,8 +23,6 @@ else:
# "haproxy-" - stable branches # "haproxy-" - stable branches
# otherwise - development branch (i.e. "latest" ssl variants, "latest" github images) # otherwise - development branch (i.e. "latest" ssl variants, "latest" github images)
# #
print("Generating matrix for branch '{}'.".format(ref_name))
def clean_ssl(ssl): def clean_ssl(ssl):
return ssl.replace("_VERSION", "").lower() return ssl.replace("_VERSION", "").lower()
@ -101,160 +93,170 @@ def get_asan_flags(cc):
'CPU_CFLAGS.generic="-O1"', '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: if "haproxy-" in ref_name:
os = "ubuntu-22.04" # stable branch os = "ubuntu-22.04" # stable branch
else: else:
os = "ubuntu-latest" # development branch os = "ubuntu-latest" # development branch
TARGET = "linux-glibc" TARGET = "linux-glibc"
for CC in ["gcc", "clang"]: 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"]:
matrix.append( matrix.append(
{ {
"name": "{}, {}, gz={}".format(os, CC, clean_compression(compression)), "name": "{}, {}, no features".format(os, CC),
"os": os, "os": os,
"TARGET": TARGET, "TARGET": TARGET,
"CC": CC, "CC": CC,
"FLAGS": [compression], "FLAGS": [],
} }
) )
ssl_versions = [ matrix.append(
"stock", {
"OPENSSL_VERSION=1.0.2u", "name": "{}, {}, all features".format(os, CC),
"OPENSSL_VERSION=1.1.1s", "os": os,
"QUICTLS=yes", "TARGET": TARGET,
# "BORINGSSL=yes", "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 # ASAN
ssl_versions = ssl_versions + [
"OPENSSL_VERSION=latest", matrix.append(
"LIBRESSL_VERSION=latest", {
"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: if "haproxy-" not in ref_name: # development branch
flags = ["USE_OPENSSL=1"] ssl_versions = ssl_versions + [
if ssl == "BORINGSSL=yes" or ssl == "QUICTLS=yes" or "LIBRESSL" in ssl: "OPENSSL_VERSION=latest",
flags.append("USE_QUIC=1") "LIBRESSL_VERSION=latest",
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)
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( matrix.append(
{ {
"name": "{}, {}, ssl={}".format(os, CC, clean_ssl(ssl)), "name": "{}, {}, no features".format(os, CC),
"os": os, "os": os,
"TARGET": TARGET, "TARGET": TARGET,
"CC": CC, "CC": CC,
"ssl": ssl, "FLAGS": [],
"FLAGS": flags,
} }
) )
# macOS # Print matrix
if "haproxy-" in ref_name: print(json.dumps(matrix, indent=4, sort_keys=True))
os = "macos-12" # stable branch
else:
os = "macos-latest" # development branch
TARGET = "osx" if environ.get("GITHUB_OUTPUT") is not None:
for CC in ["clang"]: with open(environ.get("GITHUB_OUTPUT"), "a") as f:
matrix.append( print("matrix={}".format(json.dumps({"include": matrix})), file=f)
{
"name": "{}, {}, no features".format(os, CC),
"os": os,
"TARGET": TARGET,
"CC": CC,
"FLAGS": [],
}
)
# Print matrix if __name__ == "__main__":
if len(sys.argv) == 2:
print(json.dumps(matrix, indent=4, sort_keys=True)) ref_name = sys.argv[1]
main(ref_name)
if environ.get("GITHUB_OUTPUT") is not None: else:
with open(environ.get("GITHUB_OUTPUT"), "a") as f: print("Usage: {} <ref_name>".format(sys.argv[0]), file=sys.stderr)
print("matrix={}".format(json.dumps({"include": matrix})), file=f) sys.exit(1)