Files
cproof/ci-build.sh
jabber.developer2 70de0123b0
All checks were successful
CI Code / Check spelling (pull_request) Successful in 20s
CI Code / Check coding style (pull_request) Successful in 35s
CI Code / Linux (arch) (pull_request) Successful in 1h7m2s
CI Code / Linux (ubuntu) (pull_request) Successful in 1h7m18s
CI Code / Linux (debian) (pull_request) Successful in 1h7m33s
fix(ci-build): enhance test configurations for faster CI execution
2025-12-30 08:42:59 +03:00

192 lines
7.5 KiB
Bash
Executable File

#!/usr/bin/env bash
log_content()
{
echo
echo "Content of $1:"
cat "$1"
}
error_handler()
{
ERR_CODE=$?
log_content ./config.log
log_content ./test-suite.log
log_content ./test-suite-memcheck.log
echo
echo "Error ${ERR_CODE} with command '${BASH_COMMAND}' on line ${BASH_LINENO[0]}. Exiting."
echo
exit ${ERR_CODE}
}
trap error_handler ERR
num_cores()
{
# Check for cores, for systems with:
# Line 1. Linux w/ coreutils, or...
# Line 2. OpenBSD, FreeBSD, NetBSD or macOS, or...
# Line 3. Fallback for Linux w/o coreutils (glibc).
nproc \
|| sysctl -n hw.ncpu \
|| getconf _NPROCESSORS_ONLN 2>/dev/null
}
./bootstrap.sh
tests=()
MAKE="make --quiet -j$(num_cores)"
CC="gcc"
ARCH="$(uname | tr '[:upper:]' '[:lower:]')"
case "$ARCH" in
linux*)
# Reduced set of configurations for faster CI
# Uncomment additional configurations for more thorough testing
tests=(
# 1. Full build (all features enabled)
"--enable-notifications --enable-icons-and-clipboard --enable-otr --enable-pgp
--enable-omemo --enable-plugins --enable-c-plugins
--enable-python-plugins --with-xscreensaver --enable-omemo-qrcode --enable-gdk-pixbuf"
# 2. Minimal build (all optional features disabled)
"--disable-notifications --disable-icons-and-clipboard --disable-otr --disable-pgp
--disable-omemo --disable-plugins --disable-c-plugins
--disable-python-plugins --without-xscreensaver --disable-omemo-qrcode --disable-gdk-pixbuf"
# 3. No encryption (disable otr, pgp, omemo)
"--disable-pgp --disable-otr --disable-omemo --disable-omemo-qrcode"
# 4. No plugins
"--disable-plugins --disable-c-plugins --disable-python-plugins"
# 5. Default configuration
""
# --- Additional configurations (uncomment if needed) ---
# "--enable-notifications --enable-otr --enable-pgp --enable-omemo
# --enable-plugins --enable-c-plugins --enable-python-plugins"
# "--enable-notifications --enable-otr"
# "--enable-notifications --enable-otr --enable-pgp"
# "--enable-notifications --enable-otr --enable-pgp --enable-omemo"
# "--enable-notifications --enable-otr --enable-pgp --enable-omemo --enable-omemo-qrcode"
# "--enable-notifications --enable-otr --enable-pgp --enable-omemo --enable-omemo-qrcode
# --enable-icons-and-clipboard"
# "--enable-notifications --enable-otr --enable-pgp --enable-omemo --enable-omemo-qrcode
# --enable-icons-and-clipboard --enable-gdk-pixbuf"
# "--enable-notifications --enable-otr --enable-pgp --enable-omemo --enable-omemo-qrcode
# --enable-icons-and-clipboard --enable-gdk-pixbuf --with-xscreensaver"
# "--enable-notifications --enable-otr --enable-pgp --enable-omemo --enable-omemo-qrcode
# --enable-icons-and-clipboard --enable-gdk-pixbuf --with-xscreensaver --enable-plugins"
# "--enable-notifications --enable-otr --enable-pgp --enable-omemo --enable-omemo-qrcode
# --enable-icons-and-clipboard --enable-gdk-pixbuf --with-xscreensaver --enable-plugins
# --enable-c-plugins"
)
source /etc/profile.d/debuginfod.sh 2>/dev/null || true
;;
darwin*)
# Reduced set of configurations for faster CI
# Uncomment additional configurations for more thorough testing
tests=(
# 1. Full build (all features enabled)
"--enable-notifications --enable-icons-and-clipboard --enable-otr --enable-pgp
--enable-omemo --enable-plugins --enable-c-plugins
--enable-python-plugins"
# 2. Minimal build (all optional features disabled)
"--disable-notifications --disable-icons-and-clipboard --disable-otr --disable-pgp
--disable-omemo --disable-plugins --disable-c-plugins
--disable-python-plugins"
# 3. No encryption (disable otr, pgp, omemo)
"--disable-pgp --disable-otr --disable-omemo"
# 4. No plugins
"--disable-plugins --disable-c-plugins --disable-python-plugins"
# 5. Default configuration
""
# --- Additional configurations (uncomment if needed) ---
# "--enable-notifications --enable-otr --enable-pgp --enable-omemo
# --enable-plugins --enable-c-plugins --enable-python-plugins"
# "--enable-notifications --enable-otr"
# "--enable-notifications --enable-otr --enable-pgp"
# "--enable-notifications --enable-otr --enable-pgp --enable-omemo"
# "--enable-notifications --enable-otr --enable-pgp --enable-omemo
# --enable-plugins"
# "--enable-notifications --enable-otr --enable-pgp --enable-omemo
# --enable-plugins --enable-c-plugins"
# "--enable-notifications --enable-otr --enable-pgp --enable-omemo
# --enable-icons-and-clipboard"
)
;;
openbsd*)
MAKE="gmake"
# TODO(#1231):
# `-std=gnu99 -fexec-charset=UTF-8` to silence:
# src/event/server_events.c:1453:19: error: universal character names are only valid in C++ and C99
# src/event/server_events.c:1454:19: error: universal character names are only valid in C++ and C99
CC="egcc -std=gnu99 -fexec-charset=UTF-8"
# Reduced set of configurations for faster CI
# Uncomment additional configurations for more thorough testing
tests=(
# 1. Full build (all features enabled)
"--enable-notifications --enable-icons-and-clipboard --enable-otr --enable-pgp
--enable-omemo --enable-plugins --enable-c-plugins
--enable-python-plugins"
# 2. Minimal build (all optional features disabled)
"--disable-notifications --disable-icons-and-clipboard --disable-otr --disable-pgp
--disable-omemo --disable-plugins --disable-c-plugins
--disable-python-plugins"
# 3. No encryption (disable otr, pgp, omemo)
"--disable-pgp --disable-otr --disable-omemo"
# 4. No plugins
"--disable-plugins --disable-c-plugins --disable-python-plugins"
# 5. Default configuration
""
# --- Additional configurations (uncomment if needed) ---
# "--enable-notifications --enable-otr --enable-pgp --enable-omemo
# --enable-plugins --enable-c-plugins --enable-python-plugins"
# "--enable-notifications --enable-otr"
# "--enable-notifications --enable-otr --enable-pgp"
# "--enable-notifications --enable-otr --enable-pgp --enable-omemo"
# "--enable-notifications --enable-otr --enable-pgp --enable-omemo
# --enable-plugins"
# "--enable-notifications --enable-otr --enable-pgp --enable-omemo
# --enable-plugins --enable-c-plugins"
# "--enable-notifications --enable-otr --enable-pgp --enable-omemo
# --enable-icons-and-clipboard"
)
;;
esac
case "$ARCH" in
linux*)
echo
echo "--> Building with ./configure ${tests[0]} --enable-valgrind $*"
echo
# shellcheck disable=SC2086
./configure ${tests[0]} --enable-valgrind $*
$MAKE CC="${CC}"
if grep '^ID=' /etc/os-release | grep -q -e debian; then
$MAKE check-valgrind
else
$MAKE check-valgrind || log_content ./test-suite-memcheck.log
fi
$MAKE distclean
;;
esac
for features in "${tests[@]}"
do
echo
echo "--> Building with ./configure ${features} $*"
echo
# shellcheck disable=SC2086
./configure $features $*
$MAKE CC="${CC}"
$MAKE check
./profanity -v
$MAKE clean
done