# ============================================================================= # Stage 1: Build # ============================================================================= FROM ubuntu:26.04 AS builder ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ autoconf \ automake \ autoconf-archive \ ca-certificates \ libtool \ pkg-config \ git \ wget \ libglib2.0-dev \ libcurl4-openssl-dev \ libsqlite3-dev \ libncurses-dev \ libreadline-dev \ libnotify-dev \ python3-dev \ python3 \ libgpgme-dev \ libotr5-dev \ libgtk-3-dev \ libgdk-pixbuf-2.0-dev \ libsignal-protocol-c-dev \ libgcrypt20-dev \ libqrencode-dev \ libxss-dev \ libcmocka-dev \ && rm -rf /var/lib/apt/lists/* # Build libstrophe from source (not available as Ubuntu package) RUN git clone --depth 1 https://git.jabber.space/devs/libstrophe-gh-mirror.git /tmp/libstrophe \ && cd /tmp/libstrophe \ && autoreconf -i \ && ./configure --prefix=/usr \ && make -j$(nproc) \ && make install \ && rm -rf /tmp/libstrophe WORKDIR /src COPY . . RUN ./bootstrap.sh \ && ./configure \ --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 \ && make -j$(nproc) \ && make install # ============================================================================= # Stage 2: Runtime (minimal) # ============================================================================= FROM ubuntu:26.04 ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates \ libglib2.0-0t64 \ libcurl4t64 \ libsqlite3-0 \ libncursesw6 \ libreadline8t64 \ libnotify4 \ python3 \ libpython3.14 \ libgpgme45 \ libotr5t64 \ libgtk-3-0t64 \ libgdk-pixbuf-2.0-0 \ libsignal-protocol-c2.3.2 \ libgcrypt20 \ libqrencode4 \ libxss1 \ && rm -rf /var/lib/apt/lists/* \ && apt-get clean COPY --from=builder /usr/local/bin/profanity /usr/local/bin/profanity COPY --from=builder /usr/local/lib/libprofanity* /usr/local/lib/ COPY --from=builder /usr/local/include/profapi.h /usr/local/include/ COPY --from=builder /usr/local/share/profanity /usr/local/share/profanity COPY --from=builder /usr/lib/libstrophe.so* /usr/lib/ RUN ldconfig RUN ldd /usr/local/bin/profanity | grep 'not found' && exit 1 || true RUN mkdir -p /root/.config/profanity ENTRYPOINT ["profanity"]