diff --git a/README-maintainer.md b/README-maintainer.md index 435a1800..5291856a 100644 --- a/README-maintainer.md +++ b/README-maintainer.md @@ -27,7 +27,17 @@ * libqpdf/QPDF.cc * manual/qpdf-manual.xml `make_dist` verifies this consistency. -* Generate a signed AppImage. To do this, have the gpg key available and run `./appimage/build-appimage --sign`. Rename the AppImage in appimage/build to qpdf--x86_64.AppImage and include it in the set of files to be released. +* Generate a signed AppImage using the docker image in appimage. Arguments to the docker container are arguments to git clone. The build should be made off the exact commit that will be officially tagged as the release but built prior to tagging the release. +Example: + ``` + cd appimage + docker build -t qpdfbuild . + rm -rf /tmp/build + mkdir -p /tmp/build + cp -rLp ~/.gnupg/. /tmp/build/.gnupg + docker run --privileged -ti --rm -v /tmp/build:/tmp/build qpdfbuild https://github.com/jberkenbilt/qpdf -b work + ``` + Rename the AppImage in appimage/build to qpdf--x86_64.AppImage and include it in the set of files to be released. * Update release date in `manual/qpdf-manual.xml`. Remember to ensure that the entities at the top of the document are consistent with the release notes for both version and release date. * Check `TODO` file to make sure all planned items for the release are done or retargeted. * Each year, update copyright notices. Just do a case-insensitive search for copyright. Don't forget copyright in manual. Also update debian copyright in debian package. Last updated: 2018. diff --git a/appimage/Dockerfile b/appimage/Dockerfile new file mode 100644 index 00000000..d0efc672 --- /dev/null +++ b/appimage/Dockerfile @@ -0,0 +1,11 @@ +FROM ubuntu:14.04 +RUN apt-get update && \ + apt-get -y install screen autoconf git \ + build-essential zlib1g-dev libjpeg-dev \ + docbook-xsl fop xsltproc \ + imagemagick wget fuse && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* +COPY entrypoint /entrypoint +RUN chmod +x /entrypoint +ENTRYPOINT [ "/entrypoint" ] diff --git a/appimage/entrypoint b/appimage/entrypoint new file mode 100755 index 00000000..458a3acf --- /dev/null +++ b/appimage/entrypoint @@ -0,0 +1,22 @@ +#!/bin/bash +set -e +if [ $(id -u) = 0 ]; then + if [ ! -d /tmp/build/.gnupg ]; then + echo "/tmp/build must exist and must contain .gnupg" + exit 2 + fi + id=$(stat -c %u /tmp/build) + adduser --home /tmp/build --no-create-home --uid $id --disabled-password --gecos build build + exec sudo -iu build $0 "$@" +fi + +cd /tmp/build +if [ ! -d qpdf ]; then + if [ "$1" == "" ]; then + echo "A repository and optional git clone arguments must be given" + exit 2 + fi + git clone "$@" qpdf +fi +cd qpdf +./appimage/build-appimage --sign