ci: Move CI related files into own directory

This commit is contained in:
Michael Vetter
2026-03-20 08:36:17 +01:00
parent 180ee651a5
commit 8548dfca96
9 changed files with 7 additions and 7 deletions

67
ci/Dockerfile.arch Normal file
View File

@@ -0,0 +1,67 @@
FROM archlinux
RUN pacman -Syu --noconfirm && pacman -S --needed --noconfirm \
autoconf \
autoconf-archive \
automake \
base-devel \
check \
cmake \
cmocka \
curl \
debuginfod \
doxygen \
expat \
gcc \
git \
gpgme \
gtk2 \
libgcrypt \
libmicrohttpd \
libnotify \
libsignal-protocol-c \
libomemo-c \
libotr \
libtool \
libxss \
make \
openssl \
pkg-config \
python \
wget \
sqlite \
valgrind \
gdk-pixbuf2 \
qrencode
RUN mkdir -p /usr/src/{stabber,profanity}
RUN useradd -mb /usr/src --shell=/bin/false aur && usermod -L aur
USER aur
WORKDIR /usr/src/aur
# NOTE: These will change their extension to .tar.zst if a new snapshot is built
# due to:
# https://www.archlinux.org/news/now-using-zstandard-instead-of-xz-for-package-compression/
RUN wget https://aur.archlinux.org/cgit/aur.git/snapshot/libstrophe-git.tar.gz
RUN tar -zxvf libstrophe-git.tar.gz
RUN pushd libstrophe-git && makepkg && popd
USER root
RUN pacman -U --noconfirm libstrophe-git/libstrophe-git-*.pkg.tar.zst
WORKDIR /usr/src
#RUN git clone https://github.com/boothj5/stabber
#WORKDIR /usr/src/stabber
#RUN ./bootstrap.sh
#RUN ./configure --prefix=/usr --disable-dependency-tracking
#RUN make
#RUN make install
WORKDIR /usr/src/profanity
COPY . /usr/src/profanity

58
ci/Dockerfile.debian Normal file
View File

@@ -0,0 +1,58 @@
# Build the latest Debian testing image
FROM debian:testing
RUN apt-get update && apt-get install -y --no-install-recommends \
autoconf \
autoconf-archive \
automake \
cmake \
expect \
gcc \
git \
libcmocka-dev \
libcurl3-dev \
libgcrypt-dev \
libglib2.0-dev \
libgpgme11-dev \
libgtk-3-dev \
libmicrohttpd-dev \
libncursesw5-dev \
libnotify-dev \
libotr5-dev \
libreadline-dev \
libsignal-protocol-c-dev \
libomemo-c-dev \
libssl-dev \
libtool \
libxss-dev \
make \
meson \
ninja-build \
pkg-config \
python3-dev \
python-dev-is-python3 \
valgrind \
libsqlite3-dev \
libgdk-pixbuf-2.0-dev \
libqrencode-dev
RUN mkdir -p /usr/src/{stabber,libstrophe,profanity}
WORKDIR /usr/src
#RUN git clone https://github.com/boothj5/stabber
RUN git clone -c http.sslverify=false https://github.com/strophe/libstrophe
#WORKDIR /usr/src/stabber
#RUN ./bootstrap.sh
#RUN ./configure --prefix=/usr --disable-dependency-tracking
#RUN make
#RUN make install
WORKDIR /usr/src/libstrophe
RUN ./bootstrap.sh
RUN ./configure --prefix=/usr
RUN make
RUN make install
WORKDIR /usr/src/profanity
COPY . /usr/src/profanity

69
ci/Dockerfile.fedora Normal file
View File

@@ -0,0 +1,69 @@
# Build the latest Fedora image
FROM fedora:latest
# expect - for functional tests
# libmicrohttpd - for stabber
# glibc-locale - to have en_US locale
RUN dnf install -y \
autoconf \
autoconf-archive \
automake \
awk \
expect-devel \
gcc \
git \
glib2-devel \
glibc-all-langpacks \
gtk2-devel \
libXScrnSaver-devel \
libcmocka-devel \
libcurl-devel \
expat-devel \
libgcrypt-devel \
gpgme-devel \
libmicrohttpd-devel \
libnotify-devel \
libotr-devel \
libsignal-protocol-c-devel \
libomemo-c-devel \
libtool \
libuuid-devel \
make \
ncurses-devel \
python3 \
python3-devel \
readline-devel \
openssl-devel \
sqlite-devel \
valgrind \
gdk-pixbuf2-devel \
qrencode-devel
# https://github.com/openSUSE/docker-containers-build/issues/26
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
RUN mkdir -p /usr/src
WORKDIR /usr/src
#RUN mkdir -p /usr/src/stabber
#RUN git clone https://github.com/boothj5/stabber
#WORKDIR /usr/src/stabber
#RUN ./bootstrap.sh
#RUN ./configure --prefix=/usr --disable-dependency-tracking
#RUN make
#RUN make install
WORKDIR /usr/src
RUN mkdir -p /usr/src/libstrophe
RUN git clone -c http.sslverify=false https://github.com/strophe/libstrophe
WORKDIR /usr/src/libstrophe
RUN ./bootstrap.sh
RUN ./configure --prefix=/usr
RUN make
RUN make install
RUN mkdir -p /usr/src/profanity
WORKDIR /usr/src/profanity
COPY . /usr/src/profanity

59
ci/Dockerfile.tumbleweed Normal file
View File

@@ -0,0 +1,59 @@
# Build the latest openSUSE Tumbleweed image
FROM opensuse/tumbleweed
# expect - for functional tests
# libmicrohttpd - for stabber
# glibc-locale - to have en_US locale
RUN zypper --non-interactive in --no-recommends \
autoconf \
autoconf-archive \
automake \
expect-devel \
gcc \
git \
glib2-devel \
glibc-locale \
gtk2-devel \
libXss-devel \
libcmocka-devel \
libcurl-devel \
libexpat-devel \
libgcrypt-devel \
libgpgme-devel \
libstrophe-devel \
libmicrohttpd-devel \
libnotify-devel \
libotr-devel \
libsignal-protocol-c-devel \
libomemo-c-devel \
libtool \
libuuid-devel \
make \
ncurses-devel \
python310 \
python310-devel \
readline-devel \
sqlite3-devel \
valgrind \
gdk-pixbuf-devel \
qrencode-devel
# https://github.com/openSUSE/docker-containers-build/issues/26
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
RUN mkdir -p /usr/src
WORKDIR /usr/src
#RUN mkdir -p /usr/src/stabber
#RUN git clone git://github.com/boothj5/stabber.git
#WORKDIR /usr/src/stabber
#RUN ./bootstrap.sh
#RUN ./configure --prefix=/usr --disable-dependency-tracking
#RUN make
#RUN make install
RUN mkdir -p /usr/src/profanity
WORKDIR /usr/src/profanity
COPY . /usr/src/profanity

57
ci/Dockerfile.ubuntu Normal file
View File

@@ -0,0 +1,57 @@
FROM ubuntu:latest
ENV DEBIAN_FRONTEND="noninteractive"
RUN apt-get update && apt-get install -y --no-install-recommends \
autoconf \
autoconf-archive \
automake \
expect \
gcc \
git \
libcmocka-dev \
libcurl3-dev \
libgcrypt-dev \
libglib2.0-dev \
libgpgme11-dev \
libgtk2.0-dev \
libmicrohttpd-dev \
libncursesw5-dev \
libnotify-dev \
libotr5-dev \
libreadline-dev \
libsignal-protocol-c-dev \
libomemo-c-dev \
libssl-dev \
libtool \
libxss-dev \
make \
pkg-config \
python3-dev \
python-dev-is-python3 \
valgrind \
libsqlite3-dev \
libgdk-pixbuf-2.0-dev \
libqrencode-dev
RUN mkdir -p /usr/src/{stabber,libstrophe,profanity}
WORKDIR /usr/src
#RUN git clone https://github.com/boothj5/stabber
RUN git clone -c http.sslverify=false https://github.com/strophe/libstrophe
# TODO: Re-enable once libmicrohttpd-dev has been updated.
#WORKDIR /usr/src/stabber
#RUN ./bootstrap.sh
#RUN ./configure --prefix=/usr --disable-dependency-tracking
#RUN make
#RUN make install
WORKDIR /usr/src/libstrophe
RUN ./bootstrap.sh
RUN ./configure --prefix=/usr
RUN make
RUN make install
WORKDIR /usr/src/profanity
COPY . /usr/src/profanity

154
ci/ci-build.sh Executable file
View File

@@ -0,0 +1,154 @@
#!/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*)
tests=(
"--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"
"--disable-notifications --disable-icons-and-clipboard --disable-otr --disable-pgp
--disable-omemo --disable-plugins --disable-c-plugins
--disable-python-plugins --without-xscreensaver"
"--disable-notifications"
"--disable-icons-and-clipboard"
"--disable-otr"
"--disable-pgp"
"--disable-omemo --disable-omemo-qrcode"
"--disable-pgp --disable-otr"
"--disable-pgp --disable-otr --disable-omemo"
"--disable-plugins"
"--disable-python-plugins"
"--disable-c-plugins"
"--disable-c-plugins --disable-python-plugins"
"--without-xscreensaver"
"--disable-gdk-pixbuf"
"")
source /etc/profile.d/debuginfod.sh 2>/dev/null || true
;;
darwin*)
tests=(
"--enable-notifications --enable-icons-and-clipboard --enable-otr --enable-pgp
--enable-omemo --enable-plugins --enable-c-plugins
--enable-python-plugins"
"--disable-notifications --disable-icons-and-clipboard --disable-otr --disable-pgp
--disable-omemo --disable-plugins --disable-c-plugins
--disable-python-plugins"
"--disable-notifications"
"--disable-icons-and-clipboard"
"--disable-otr"
"--disable-pgp"
"--disable-omemo"
"--disable-pgp --disable-otr"
"--disable-pgp --disable-otr --disable-omemo"
"--disable-plugins"
"--disable-python-plugins"
"--disable-c-plugins"
"--disable-c-plugins --disable-python-plugins"
"")
;;
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"
tests=(
"--enable-notifications --enable-icons-and-clipboard --enable-otr --enable-pgp
--enable-omemo --enable-plugins --enable-c-plugins
--enable-python-plugins"
"--disable-notifications --disable-icons-and-clipboard --disable-otr --disable-pgp
--disable-omemo --disable-plugins --disable-c-plugins
--disable-python-plugins"
"--disable-notifications"
"--disable-icons-and-clipboard"
"--disable-otr"
"--disable-pgp"
"--disable-omemo"
"--disable-pgp --disable-otr"
"--disable-pgp --disable-otr --disable-omemo"
"--disable-plugins"
"--disable-python-plugins"
"--disable-c-plugins"
"--disable-c-plugins --disable-python-plugins"
"")
;;
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

70
ci/ci-meson-build.sh Executable file
View File

@@ -0,0 +1,70 @@
#!/usr/bin/env bash
# Exit on error
set -e
error_handler()
{
ERR_CODE=$?
echo
echo "Error ${ERR_CODE} with command '${BASH_COMMAND}' on line ${BASH_LINENO[0]}. Exiting."
# Meson logs are stored in the build directory
if [ -f "build/meson-logs/testlog.txt" ]; then
echo "--- Meson Test Log ---"
cat build/meson-logs/testlog.txt
fi
exit ${ERR_CODE}
}
trap error_handler ERR
tests=(
"-Dnotifications=enabled -Dicons-and-clipboard=enabled -Dotr=enabled -Dpgp=enabled -Domemo=enabled -Dc-plugins=enabled -Dpython-plugins=enabled -Dxscreensaver=enabled -Domemo-qrcode=enabled -Dgdk-pixbuf=enabled"
""
"-Dnotifications=disabled"
"-Dicons-and-clipboard=disabled"
"-Dotr=disabled"
"-Dpgp=disabled"
"-Domemo=disabled -Domemo-qrcode=disabled"
"-Dpgp=disabled -Dotr=disabled"
"-Dpgp=disabled -Dotr=disabled -Domemo=disabled"
"-Dpython-plugins=disabled"
"-Dc-plugins=disabled"
"-Dc-plugins=disabled -Dpython-plugins=disabled"
"-Dxscreensaver=disabled"
"-Dgdk-pixbuf=disabled"
)
BACKEND_OPT=""
if [ -n "${OMEMO_BACKEND}" ]; then
BACKEND_OPT="-Domemo-backend=${OMEMO_BACKEND}"
fi
# Run Valgrind check (Only on Linux, on first/full feature set)
if [[ "$(uname | tr '[:upper:]' '[:lower:]')" == linux* ]]; then
echo "--> Running Valgrind check with full features ${BACKEND_OPT}"
meson setup build_valgrind ${tests[0]} ${BACKEND_OPT} -Dtests=true -Db_sanitize=address,undefined
meson compile -C build_valgrind
meson test -C build_valgrind --print-errorlogs --wrap=valgrind || echo "Valgrind issues detected"
rm -rf build_valgrind
fi
# Iterate through all feature combinations
for features in "${tests[@]}"
do
echo "----------------------------------------------------"
echo "--> Building with: ${features} ${BACKEND_OPT}"
echo "----------------------------------------------------"
rm -rf build_run
meson setup build_run ${features} ${BACKEND_OPT} -Dtests=true
meson compile -C build_run
meson test -C build_run --print-errorlogs
./build_run/profanity -v
done