290 lines
12 KiB
YAML
290 lines
12 KiB
YAML
|
|
name: CI-canary-matrix
|
|
|
|
on:
|
|
push:
|
|
tags:
|
|
- "*"
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
canary:
|
|
strategy:
|
|
max-parallel: 3
|
|
matrix:
|
|
os: [ubuntu-24.04, ubuntu-22.04]
|
|
# Configure Options
|
|
# X11 OGL CAIRO
|
|
pkgs: [all, none, no_tk_tcl_rl, no_tk_tcl_brl, no_zlib, no_gc_gl_gu, no_gc, no_gl_gu]
|
|
# Toolchain
|
|
# ubuntu-20.04 [gcc-9, clang-10]
|
|
# ubuntu-22.04 [gcc-11, clang-14]
|
|
# ubuntu-24.04 [gcc-13, clang-18]
|
|
tc: [default, gcc-10, gcc-11, gcc-12, gcc-13, gcc-14, clang-14, clang-15, clang-17, clang-18, clang-19]
|
|
exclude:
|
|
- os: ubuntu-22.04
|
|
tc: gcc-13
|
|
- os: ubuntu-22.04
|
|
tc: gcc-14
|
|
- os: ubuntu-22.04
|
|
tc: clang-17
|
|
- os: ubuntu-22.04 # some sources show this as present but not found
|
|
tc: clang-18
|
|
- os: ubuntu-22.04
|
|
tc: clang-19
|
|
|
|
- os: ubuntu-24.04
|
|
tc: gcc-10
|
|
- os: ubuntu-24.04
|
|
tc: gcc-11
|
|
- os: ubuntu-24.04
|
|
tc: clang-14
|
|
- os: ubuntu-24.04
|
|
tc: clang-15
|
|
fail-fast: false
|
|
runs-on: ${{ matrix.os }}
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Matrix Check
|
|
env:
|
|
MATRIX_OS: ${{ matrix.os }}
|
|
MATRIX_PKGS: ${{ matrix.pkgs }}
|
|
MATRIX_TC: ${{ matrix.tc }}
|
|
run: |
|
|
# This takes the macros params ENV and processes into options list
|
|
|
|
if [ "${MATRIX_PKGS}" = "none" ]
|
|
then
|
|
pkgs=""
|
|
cfgs=""
|
|
else
|
|
pkgs="kcnrzCLUX"
|
|
cfgs=""
|
|
fi
|
|
|
|
# z no.*_zl zlib1g-dev
|
|
# n no.*_nc libncurses-dev
|
|
# r no.*_rl libreadline-dev
|
|
# R no.*_brl --enable-readline-bundled
|
|
# c no.*_tcl tcl-dev
|
|
# k no.*_tk tk-dev
|
|
# C no.*_gc libcairo-dev
|
|
# L no.*_gl libgl-dev
|
|
# U no.*_gu libglu1-mesa-dev # GLU requires GL
|
|
# X no.*_gx libx11-dev
|
|
if echo -n "$MATRIX_PKGS" | grep -q "^no.*_zl"; then
|
|
pkgs=$(echo -n "$pkgs" | sed -e 's#z##'); fi
|
|
if echo -n "$MATRIX_PKGS" | grep -q "^no.*_nc"; then
|
|
pkgs=$(echo -n "$pkgs" | sed -e 's#n##'); fi
|
|
if echo -n "$MATRIX_PKGS" | grep -q "^no.*_brl"; then
|
|
pkgs=$(echo -n "$pkgs" | sed -e 's#r#R#'); fi # replace
|
|
if echo -n "$MATRIX_PKGS" | grep -q "^no.*_rl"; then
|
|
pkgs=$(echo -n "$pkgs" | sed -e 's#r##'); fi
|
|
if echo -n "$MATRIX_PKGS" | grep -q "^no.*_tcl"; then
|
|
pkgs=$(echo -n "$pkgs" | sed -e 's#c##'); fi
|
|
if echo -n "$MATRIX_PKGS" | grep -q "^no.*_tk"; then
|
|
pkgs=$(echo -n "$pkgs" | sed -e 's#k##'); fi
|
|
|
|
if echo -n "$MATRIX_PKGS" | grep -q "^no.*_gc"; then
|
|
pkgs=$(echo -n "$pkgs" | sed -e 's#C##'); fi
|
|
if echo -n "$MATRIX_PKGS" | grep -q "^no.*_gl"; then
|
|
pkgs=$(echo -n "$pkgs" | sed -e 's#L##'); fi
|
|
if echo -n "$MATRIX_PKGS" | grep -q "^no.*_gu"; then
|
|
pkgs=$(echo -n "$pkgs" | sed -e 's#U##'); fi
|
|
if echo -n "$MATRIX_PKGS" | grep -q "^no.*_gx"; then
|
|
pkgs=$(echo -n "$pkgs" | sed -e 's#X##'); fi
|
|
|
|
_package_list=()
|
|
echo -n $pkgs | grep -q "z" && _package_list+=(zlib1g-dev)
|
|
echo -n $pkgs | grep -q "n" && _package_list+=(libncurses-dev)
|
|
echo -n $pkgs | grep -q "r" && _package_list+=(libreadline-dev)
|
|
echo -n $pkgs | grep -q "c" && _package_list+=(tcl-dev)
|
|
echo -n $pkgs | grep -q "k" && _package_list+=(tk-dev)
|
|
echo -n $pkgs | grep -q "C" && _package_list+=(libcairo-dev)
|
|
echo -n $pkgs | grep -q "L" && _package_list+=(libgl-dev)
|
|
echo -n $pkgs | grep -q "U" && _package_list+=(libglu1-mesa-dev)
|
|
echo -n $pkgs | grep -q "X" && _package_list+=(libx11-dev)
|
|
echo "PACKAGE_LIST=${_package_list[*]}" >> $GITHUB_ENV
|
|
|
|
#
|
|
_configure_args=()
|
|
if echo -n "$MATRIX_PKGS" | grep -q "^no.*_zl"; then
|
|
_configure_args+=(--disable-compression); fi
|
|
if echo -n "$MATRIX_PKGS" | grep -q "^no.*_brl"; then
|
|
_configure_args+=(--enable-readline-bundled); fi
|
|
if echo -n "$MATRIX_PKGS" | grep -q "^no.*_rl"; then
|
|
_configure_args+=(--disable-readline); fi
|
|
if echo -n "$MATRIX_PKGS" | grep -q "^no.*_tcl"; then
|
|
_configure_args+=(--without-tcl); fi
|
|
if echo -n "$MATRIX_PKGS" | grep -q "^no.*_tk"; then
|
|
_configure_args+=(--without-tk); fi
|
|
|
|
if echo -n "$MATRIX_PKGS" | grep -q "^no.*_gc"; then
|
|
_configure_args+=(--without-cairo); fi
|
|
if echo -n "$MATRIX_PKGS" | grep -q "^no.*_gl"; then
|
|
_configure_args+=(--without-opengl); fi
|
|
|
|
echo "CONFIGURE_ARGS=${_configure_args[*]}" >> $GITHUB_ENV
|
|
|
|
- name: Setup Toolchain
|
|
env:
|
|
MATRIX_TC: ${{ matrix.tc }}
|
|
run: |
|
|
# decode settings
|
|
BUILD_GCC_VERSION=$( echo -n "$MATRIX_TC" | grep -i "^gcc" | sed -e 's#^gcc\-\?##i')
|
|
BUILD_CLANG_VERSION=$(echo -n "$MATRIX_TC" | grep -i "^clang" | sed -e 's#^clang\-\?##i')
|
|
echo "BUILD_GCC_VERSION=$BUILD_GCC_VERSION" >> $GITHUB_ENV
|
|
echo "BUILD_CLANG_VERSION=$BUILD_CLANG_VERSION" >> $GITHUB_ENV
|
|
|
|
if [ -n "$BUILD_GCC_VERSION" ]
|
|
then
|
|
GCCV=$BUILD_GCC_VERSION
|
|
# https://github.com/actions/runner-images/blob/main/images/ubuntu/Ubuntu2404-Readme.md
|
|
sudo apt-get install gcc-${GCCV} g++-${GCCV} cpp-${GCCV}
|
|
gcc-${GCCV} -v
|
|
g++-${GCCV} -v
|
|
cpp-${GCCV} -v < /dev/null
|
|
ls -l /usr/bin/g++ /usr/bin/g++-[0-9]* /usr/bin/gcc /usr/bin/gcc-[0-9]* /usr/bin/cpp-* /usr/bin/*-gnu-cpp* || true
|
|
update-alternatives --list gcc || true
|
|
update-alternatives --list g++ || true
|
|
update-alternatives --list cpp || true
|
|
update-alternatives --query gcc || true
|
|
update-alternatives --query g++ || true
|
|
update-alternatives --query cpp || true
|
|
ls -l /usr/bin/g++ /usr/bin/g++-[0-9]* /usr/bin/gcc /usr/bin/gcc-[0-9]* /usr/bin/cpp-* /usr/bin/*-gnu-cpp* || true
|
|
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${GCCV} 50
|
|
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-${GCCV} 50
|
|
sudo update-alternatives --install "/usr/bin/$(uname -m)-linux-gnu-cpp" cpp "/usr/bin/$(uname -m)-linux-gnu-cpp-${GCCV}" 50
|
|
ls -l /usr/bin/g++ /usr/bin/g++-[0-9]* /usr/bin/gcc /usr/bin/gcc-[0-9]* /usr/bin/cpp-* /usr/bin/*-gnu-cpp* || true
|
|
update-alternatives --list gcc || true
|
|
update-alternatives --list g++ || true
|
|
update-alternatives --list cpp || true
|
|
hash -r
|
|
gcc -v
|
|
elif [ -n "$BUILD_CLANG_VERSION" ]
|
|
then
|
|
CLANGV=$BUILD_CLANG_VERSION
|
|
# https://github.com/actions/runner-images/blob/main/images/ubuntu/Ubuntu2404-Readme.md
|
|
sudo apt-get install clang-${CLANGV} clang++-${CLANGV} #clang-cpp-${CLANGV}
|
|
clang-${CLANGV} -v
|
|
clang++-${CLANGV} -v
|
|
clang-cpp-${CLANGV} -v < /dev/null
|
|
ls -l /usr/bin/clang++ /usr/bin/clang++-[0-9]* /usr/bin/clang /usr/bin/clang-[0-9]* /usr/bin/clang-cpp-* /usr/bin/clang-cpp* || true
|
|
update-alternatives --list clang || true
|
|
update-alternatives --list clang++ || true
|
|
update-alternatives --list clang-cpp || true
|
|
update-alternatives --query clang || true
|
|
update-alternatives --query clang++ || true
|
|
update-alternatives --query clang-cpp || true
|
|
ls -l /usr/bin/clang++ /usr/bin/clang++-[0-9]* /usr/bin/clang /usr/bin/clang-[0-9]* /usr/bin/clang-cpp-* /usr/bin/clang-cpp* || true
|
|
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-${CLANGV} 50
|
|
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-${CLANGV} 50
|
|
sudo update-alternatives --install "/usr/bin/clang-cpp" clang-cpp "/usr/bin/clang-cpp-${CLANGV}" 50
|
|
ls -l /usr/bin/clang++ /usr/bin/clang++-[0-9]* /usr/bin/clang /usr/bin/clang-[0-9]* /usr/bin/clang-cpp-* /usr/bin/clang-cpp* || true
|
|
update-alternatives --list clang || true
|
|
update-alternatives --list clang++ || true
|
|
update-alternatives --list clang-cpp || true
|
|
hash -r
|
|
clang -v
|
|
fi
|
|
|
|
- name: Get Dependencies
|
|
run: |
|
|
if [ -n "$PACKAGE_LIST" ]
|
|
then
|
|
sudo apt-get install -y ${PACKAGE_LIST}
|
|
fi
|
|
|
|
- name: Build
|
|
run: |
|
|
if [ -n "$BUILD_CLANG_VERSION" ]
|
|
then
|
|
export CC="clang-${BUILD_CLANG_VERSION}"
|
|
export CXX="clang++-${BUILD_CLANG_VERSION}"
|
|
export CPP="clang-cpp-${BUILD_CLANG_VERSION}"
|
|
fi
|
|
|
|
set -o pipefail # due to pipe inside CI
|
|
./configure $CONFIGURE_ARGS 2>&1 | tee CONFIGURE.LOG
|
|
|
|
egrep "^(CPP|CXX|CC)\s" defs.mak
|
|
|
|
# Add -Wall for CI loggings
|
|
sed -e 's# -Werror=# -Wall -Werror=#' -i defs.mak
|
|
# Non security/reliability related warnings
|
|
#sed -e 's# -Werror=# -Wno-unused-variable -Werror=#' -i defs.mak
|
|
#sed -e 's# -Werror=# -Wno-unused-local-typedefs -Werror=#' -i defs.mak
|
|
#sed -e 's# -Werror=# -Wno-unused-label -Werror=#' -i defs.mak
|
|
#sed -e 's# -Werror=# -Wno-unused-but-set-variable -Werror=#' -i defs.mak
|
|
make database/database.h
|
|
make -j$(nproc) 2>&1 | tee MAKE.LOG
|
|
|
|
- name: Summary
|
|
env:
|
|
MATRIX_OS: ${{ matrix.os }}
|
|
MATRIX_PKGS: ${{ matrix.pkgs }}
|
|
run: |
|
|
set +e
|
|
grep "error:" MAKE.LOG > MAKE_error.LOG
|
|
grep "warning:" MAKE.LOG > MAKE_warning.LOG
|
|
|
|
# Less important warnings relating to codesmell more than security (filter out of headline)
|
|
grep -v "Wunused-variable" MAKE_warning.LOG |
|
|
grep -v "Wunused-local-typedefs" |
|
|
grep -v "Wunused-label" |
|
|
grep -v "Wunused-but-set-variable" > MAKE_warning_filtered.LOG
|
|
|
|
ls -l
|
|
wc -l *.LOG
|
|
|
|
error_count=$( grep -c "error:" MAKE_error.LOG)
|
|
filtered_warning_count=$(grep -c "warning:" MAKE_warning_filtered.LOG)
|
|
|
|
title="### $(cat VERSION) ${MATRIX_OS} ${MATRIX_TC} ${MATRIX_PKGS} :: "
|
|
if [ "$error_count" -gt 0 ]
|
|
then
|
|
title="$title $error_count error(s)"
|
|
fi
|
|
if [ "$filtered_warning_count" -gt 0 ]
|
|
then
|
|
title="$title $filtered_warning_count warning(s)"
|
|
fi
|
|
|
|
(
|
|
total_error_count=$( wc -l MAKE_error.LOG | cut -d' ' -f1)
|
|
total_warning_count=$(wc -l MAKE_warning.LOG | cut -d' ' -f1)
|
|
echo "$title"
|
|
echo ""
|
|
echo "PACKAGE_LIST=$PACKAGE_LIST"
|
|
echo "CONFIGURE_ARGS=$CONFIGURE_ARGS"
|
|
echo ""
|
|
if [ "$BUILD_CLANG_VERSION" ]
|
|
then
|
|
"clang-${BUILD_CLANG_VERSION}" --version | head -n1
|
|
if ! update-alternatives --list clang
|
|
then
|
|
update-alternatives --list "clang-${BUILD_CLANG_VERSION}"
|
|
fi
|
|
else
|
|
gcc --version | head -n1
|
|
if ! update-alternatives --list gcc
|
|
then
|
|
update-alternatives --list "gcc-${BUILD_GCC_VERSION}"
|
|
fi
|
|
fi
|
|
echo ""
|
|
echo "total ${total_error_count} error(s) ${total_warning_count} warning(s) :"
|
|
echo "|Count|Warning Group (-j build log inaccuracies)|"
|
|
echo "|--:|:--|"
|
|
# due to -j build the log lines might get corrupted, so missing/incorrect/bogus entries might be seen
|
|
# so we add extra: egrep "\[\-W.*\]" (to try to remove that)
|
|
sed -e 's#.*\(\[\-W\)#\1#' -e 's#\(\]\).*$#\1#' MAKE_warning.LOG | egrep "\[\-W.*\]" | sort | uniq -c | sort -n | tr -s ' ' | tr ' ' '|' | awk '{print $0"|"}'
|
|
echo ""
|
|
sed -e '0,/Configuration Summary/d' -e '/\---/,//d' CONFIGURE.LOG | egrep "^.*:"
|
|
echo ""
|
|
grep DCAD_DIR MAKE.LOG | tail -n1
|
|
) >> $GITHUB_STEP_SUMMARY
|
|
|