haproxy/.github/matrix.py
Willy Tarreau 977209d1d8 CONTRIB: move 51Degrees to addons/51degrees
Now it's much cleaner, both 51d.c and the dummy library live together and
are easier to spot and maintain. The build howto probably ought to be moved
there as well. Makefile, docs and MAINTAINERS were updated, as well as
the github CI's build matrix, travis CI's, and coverity checks.
2021-04-02 17:48:42 +02:00

177 lines
4.4 KiB
Python

# Copyright 2019 Ilya Shipitsin <chipitsine@gmail.com>
# Copyright 2020 Tim Duesterhus <tim@bastelstu.be>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version
# 2 of the License, or (at your option) any later version.
import json
import sys
if len(sys.argv) == 2:
build_type = sys.argv[1]
else:
print("Usage: {} <build_type>".format(sys.argv[0]), file=sys.stderr)
sys.exit(1)
print("Generating matrix for type '{}'.".format(build_type))
def clean_os(os):
if os == "ubuntu-latest":
return "Ubuntu"
elif os == "macos-latest":
return "macOS"
return os.replace("-latest", "")
def clean_ssl(ssl):
return ssl.replace("_VERSION", "").lower()
def clean_compression(compression):
return compression.replace("USE_", "").lower()
def get_asan_flags(cc):
if cc == "clang":
return [
"USE_OBSOLETE_LINKER=1",
'DEBUG_CFLAGS="-g -fsanitize=address"',
'LDFLAGS="-fsanitize=address"',
'CPU_CFLAGS.generic="-O1"',
]
raise ValueError("ASAN is only supported for clang")
matrix = []
# Ubuntu
os = "ubuntu-latest"
TARGET = "linux-glibc"
for CC in ["gcc", "clang"]:
matrix.append(
{
"name": "{}, {}, no features".format(clean_os(os), CC),
"os": os,
"TARGET": TARGET,
"CC": CC,
"FLAGS": [],
}
)
matrix.append(
{
"name": "{}, {}, all features".format(clean_os(os), CC),
"os": os,
"TARGET": TARGET,
"CC": CC,
"FLAGS": [
"USE_ZLIB=1",
"USE_PCRE=1",
"USE_PCRE_JIT=1",
"USE_LUA=1",
"USE_OPENSSL=1",
"USE_SYSTEMD=1",
"USE_WURFL=1",
"WURFL_INC=contrib/wurfl",
"WURFL_LIB=contrib/wurfl",
"USE_DEVICEATLAS=1",
"DEVICEATLAS_SRC=contrib/deviceatlas",
"USE_PROMEX=1",
"USE_51DEGREES=1",
"51DEGREES_SRC=addons/51degrees/dummy/pattern",
],
}
)
for compression in ["USE_SLZ=1", "USE_ZLIB=1"]:
matrix.append(
{
"name": "{}, {}, gz={}".format(
clean_os(os), CC, clean_compression(compression)
),
"os": os,
"TARGET": TARGET,
"CC": CC,
"FLAGS": [compression],
}
)
for ssl in [
"stock",
"OPENSSL_VERSION=1.0.2u",
"LIBRESSL_VERSION=2.9.2",
"LIBRESSL_VERSION=3.2.5",
"BORINGSSL=yes",
]:
flags = ["USE_OPENSSL=1"]
if ssl != "stock":
flags.append("SSL_LIB=${HOME}/opt/lib")
flags.append("SSL_INC=${HOME}/opt/include")
matrix.append(
{
"name": "{}, {}, ssl={}".format(clean_os(os), CC, clean_ssl(ssl)),
"os": os,
"TARGET": TARGET,
"CC": CC,
"ssl": ssl,
"FLAGS": flags,
}
)
# ASAN
os = "ubuntu-latest"
CC = "clang"
TARGET = "linux-glibc"
matrix.append(
{
"name": "{}, {}, ASAN, all features".format(clean_os(os), CC),
"os": os,
"TARGET": TARGET,
"CC": CC,
"FLAGS": get_asan_flags(CC)
+ [
"USE_ZLIB=1",
"USE_PCRE=1",
"USE_PCRE_JIT=1",
"USE_LUA=1",
"USE_OPENSSL=1",
"USE_SYSTEMD=1",
"USE_WURFL=1",
"WURFL_INC=contrib/wurfl",
"WURFL_LIB=contrib/wurfl",
"USE_DEVICEATLAS=1",
"DEVICEATLAS_SRC=contrib/deviceatlas",
"USE_PROMEX=1",
"USE_51DEGREES=1",
"51DEGREES_SRC=addons/51degrees/dummy/pattern",
],
}
)
# macOS
os = "macos-latest"
TARGET = "osx"
for CC in ["clang"]:
matrix.append(
{
"name": "{}, {}, no features".format(clean_os(os), CC),
"os": os,
"TARGET": TARGET,
"CC": CC,
"FLAGS": [],
}
)
# Print matrix
print(json.dumps(matrix, indent=4, sort_keys=True))
print("::set-output name=matrix::{}".format(json.dumps({"include": matrix})))