# ============================================================================= # Stage 1: Build # ============================================================================= FROM ubuntu:26.04 AS builder ENV DEBIAN_FRONTEND=noninteractive # Build dependencies for full build (all features enabled) RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ autoconf \ automake \ autoconf-archive \ libtool \ pkg-config \ git \ wget \ # Required dependencies libglib2.0-dev \ libcurl4-openssl-dev \ libsqlite3-dev \ libncursesw-dev \ libreadline-dev \ # Optional: notifications libnotify-dev \ # Optional: Python plugins python3-dev \ python3 \ # Optional: PGP libgpgme-dev \ # Optional: OTR libotr-dev \ # Optional: GTK icons/clipboard libgtk-3-dev \ # Optional: GDK Pixbuf libgdk-pixbuf-2.0-dev \ # Optional: OMEMO libsignal-protocol-c-dev \ libgcrypt20-dev \ # Optional: OMEMO QR code libqrencode-dev \ # Optional: xscreensaver libxss-dev \ # Test dependencies (needed for build verification) libcmocka-dev \ && rm -rf /var/lib/apt/lists/* # Build libstrophe from source (not available as Ubuntu package) RUN git clone --depth 1 https://github.com/strophe/libstrophe.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 # Runtime dependencies only (no build tools, no tests) RUN apt-get update && apt-get install -y --no-install-recommends \ # Required runtime libglib2.0-0 \ libcurl4 \ libsqlite3-0 \ libncursesw6 \ libreadline8 \ # Optional feature runtimes libnotify4 \ python3 \ libgpgme11 \ libotr5 \ libgtk-3-0 \ libgdk-pixbuf-2.0-0 \ libsignal-protocol-c-2.0.0 \ libgcrypt20 \ libqrencode4 \ libxss1 \ ca-certificates \ && rm -rf /var/lib/apt/lists/* \ && apt-get clean # Copy installed files from builder stage 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 # Runtime config/data directory RUN mkdir -p /root/.config/profanity ENTRYPOINT ["profanity"]