From 2be16df905cfe88cbb6b1deac155126b144cff14 Mon Sep 17 00:00:00 2001 From: Jabber Developer Date: Sun, 5 Jul 2026 13:00:44 +0000 Subject: [PATCH] ci(docker): add Docker publishing workflow and Dockerfile 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. --- .github/workflows/docker-publish.yml | 44 +++++++++++ ci/Dockerfile | 106 +++++++++++++++++++++++++++ 2 files changed, 150 insertions(+) create mode 100644 .github/workflows/docker-publish.yml create mode 100644 ci/Dockerfile diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml new file mode 100644 index 00000000..2624ff7b --- /dev/null +++ b/.github/workflows/docker-publish.yml @@ -0,0 +1,44 @@ +name: Publish Docker image + +on: + push: + branches: [master] + release: + types: [published] + +jobs: + push_to_registry: + name: Push Docker image to Docker Hub + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - name: Check out the repo + uses: actions/checkout@v7 + + - name: Log in to Docker Hub + uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@c299e40c65443455700f0fdfc63efafe5b349051 + with: + images: cproofdev/cproof + tags: | + type=raw,value=dev,enable={{is_default_branch}} + type=sha,prefix=nightly-,enable={{is_default_branch}} + type=ref,event=tag + type=raw,value=latest,enable=${{ startsWith(github.ref, 'refs/tags/') }} + + - name: Build and push Docker image + id: push + uses: docker/build-push-action@2bd26e71295ee32cbf6a73510d165bf7232460f3 + with: + context: . + file: ./ci/Dockerfile + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/ci/Dockerfile b/ci/Dockerfile new file mode 100644 index 00000000..a433fe2d --- /dev/null +++ b/ci/Dockerfile @@ -0,0 +1,106 @@ +# ============================================================================= +# 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"]