2021-06-08 15:14:35 +02:00
#!/usr/bin/python3
2020-07-28 23:00:35 +02:00
# 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
2020-11-20 00:16:00 +01:00
import sys
2022-05-13 21:59:38 +05:00
import urllib . request
import re
2020-11-20 00:16:00 +01:00
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 ) )
2020-07-28 23:00:35 +02:00
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 ( )
2022-05-20 23:02:38 +05:00
def determine_latest_openssl ( ssl ) :
openssl_tags = urllib . request . urlopen ( " https://api.github.com/repos/openssl/openssl/tags " )
tags = json . loads ( openssl_tags . read ( ) . decode ( ' utf-8 ' ) )
latest_tag = ' '
for tag in tags :
name = tag [ ' name ' ]
if " openssl- " in name :
if name > latest_tag :
latest_tag = name
return " OPENSSL= {} " . format ( latest_tag [ 8 : ] )
2022-05-13 21:59:38 +05:00
def determine_latest_libressl ( ssl ) :
libressl_download_list = urllib . request . urlopen ( " http://ftp.openbsd.org/pub/OpenBSD/LibreSSL/ " )
for line in libressl_download_list . readlines ( ) :
decoded_line = line . decode ( " utf-8 " )
if " libressl- " in decoded_line and " .tar.gz.asc " in decoded_line :
l = re . split ( " libressl-|.tar.gz.asc " , decoded_line ) [ 1 ]
return " LIBRESSL= {} " . format ( l )
2020-07-28 23:00:35 +02:00
def clean_compression ( compression ) :
return compression . replace ( " USE_ " , " " ) . lower ( )
def get_asan_flags ( cc ) :
2022-07-02 10:30:28 +05:00
return [
" USE_OBSOLETE_LINKER=1 " ,
' DEBUG_CFLAGS= " -g -fsanitize=address " ' ,
' LDFLAGS= " -fsanitize=address " ' ,
' CPU_CFLAGS.generic= " -O1 " ' ,
]
2020-07-28 23:00:35 +02:00
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 " ,
2021-09-12 07:01:36 +02:00
" USE_OT=1 " ,
2022-01-13 11:36:28 +05:00
" OT_INC=$ {HOME} /opt-ot/include " ,
" OT_LIB=$ {HOME} /opt-ot/lib " ,
2021-05-18 09:46:43 +00:00
" OT_RUNPATH=1 " ,
2020-07-28 23:00:35 +02:00
" USE_PCRE=1 " ,
" USE_PCRE_JIT=1 " ,
" USE_LUA=1 " ,
" USE_OPENSSL=1 " ,
" USE_SYSTEMD=1 " ,
" USE_WURFL=1 " ,
2021-04-02 16:39:44 +02:00
" WURFL_INC=addons/wurfl/dummy " ,
" WURFL_LIB=addons/wurfl/dummy " ,
2020-07-28 23:00:35 +02:00
" USE_DEVICEATLAS=1 " ,
2021-04-02 16:19:39 +02:00
" DEVICEATLAS_SRC=addons/deviceatlas/dummy " ,
2021-04-02 15:35:19 +02:00
" USE_PROMEX=1 " ,
2020-11-26 20:59:42 +05:00
" USE_51DEGREES=1 " ,
2021-04-02 16:12:32 +02:00
" 51DEGREES_SRC=addons/51degrees/dummy/pattern " ,
2020-07-28 23:00:35 +02:00
] ,
}
)
2021-08-14 14:36:55 +02:00
for compression in [ " USE_ZLIB=1 " ] :
2020-07-28 23:00:35 +02:00
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 " ,
2022-05-20 23:02:38 +05:00
" OPENSSL_VERSION=latest " ,
2022-05-13 21:59:38 +05:00
" LIBRESSL_VERSION=latest " ,
2021-11-18 18:27:57 +05:00
" QUICTLS=yes " ,
2021-09-02 17:32:43 +02:00
# "BORINGSSL=yes",
2020-07-28 23:00:35 +02:00
] :
flags = [ " USE_OPENSSL=1 " ]
2021-11-18 18:27:57 +05:00
if ssl == " BORINGSSL=yes " or ssl == " QUICTLS=yes " :
2021-05-09 21:27:28 +05:00
flags . append ( " USE_QUIC=1 " )
2020-07-28 23:00:35 +02:00
if ssl != " stock " :
flags . append ( " SSL_LIB=$ {HOME} /opt/lib " )
flags . append ( " SSL_INC=$ {HOME} /opt/include " )
2022-05-13 21:59:38 +05:00
if " LIBRESSL " in ssl and " latest " in ssl :
ssl = determine_latest_libressl ( ssl )
2022-05-20 23:02:38 +05:00
if " OPENSSL " in ssl and " latest " in ssl :
ssl = determine_latest_openssl ( ssl )
2020-07-28 23:00:35 +02:00
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 "
TARGET = " linux-glibc "
2022-07-02 10:30:28 +05:00
for CC in [ " gcc " , " clang " ] :
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_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 " ,
] ,
}
)
2020-07-28 23:00:35 +02:00
# 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 } ) ) )