ci(docker): add Docker publishing workflow and Dockerfile
Some checks failed
Publish Docker image / Push Docker image to Docker Hub (push) Failing after 4m35s
Some checks failed
Publish Docker image / Push Docker image to Docker Hub (push) Failing after 4m35s
Introduce GitHub Actions workflow for automated Docker image publishing to Docker Hub, along with a dedicated Dockerfile in the ci directory to streamline container builds.
This commit is contained in:
116
ci/Dockerfile
Normal file
116
ci/Dockerfile
Normal file
@@ -0,0 +1,116 @@
|
||||
# =============================================================================
|
||||
# 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"]
|
||||
Reference in New Issue
Block a user