diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 18d8e7b..e17f3b7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,7 +18,7 @@ jobs: strategy: ${{ steps.generate-jobs.outputs.strategy }} steps: - uses: actions/checkout@v4 - - uses: docker-library/bashbrew@v0.1.13 + - uses: docker-library/bashbrew@HEAD - id: generate-jobs name: Generate Jobs run: | @@ -33,7 +33,7 @@ jobs: name: ${{ matrix.name }} runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Prepare Environment run: ${{ matrix.runs.prepare }} - name: Pull Dependencies diff --git a/Dockerfile-alpine.template b/Dockerfile-alpine.template index 6691a19..2d3157b 100644 --- a/Dockerfile-alpine.template +++ b/Dockerfile-alpine.template @@ -10,16 +10,10 @@ RUN apk add --no-cache \ RUN set -ex; \ \ apk add --no-cache --virtual .build-deps \ - imap-dev \ - krb5-dev \ postgresql-dev \ sqlite-dev \ ; \ - docker-php-ext-configure \ - imap --with-imap-ssl --with-kerberos \ - ; \ docker-php-ext-install -j "$(nproc)" \ - imap \ pdo_mysql \ pdo_pgsql \ pdo_sqlite \ @@ -34,14 +28,14 @@ RUN set -ex; \ apk add --no-network --virtual .postfixadmin-phpexts-rundeps $runDeps; \ apk del --no-network .build-deps -ARG POSTFIXADMIN_VERSION=3.3.16 -ARG POSTFIXADMIN_SHA512=d1b8074c32f7912c187c2c37c5cca158432cb85fc415d9efe86cf11f70ab035117053cc579306e224cb180e70fa3c84a68335f18d62b43abf591e8105a00847d +ARG POSTFIXADMIN_VERSION=4.0.1 +ARG POSTFIXADMIN_SHA512=88be6834257580c7a52dce33ce552e1868a1b28ba639a3378a66278939640073af4f8893fbfac690e2df5e67db0143c5726aab575bf0e4014b39a03d46916831 ENV POSTFIXADMIN_VERSION $POSTFIXADMIN_VERSION ENV POSTFIXADMIN_SHA512 $POSTFIXADMIN_SHA512 RUN set -eu; \ - curl -fsSL -o postfixadmin.tar.gz "https://github.com/postfixadmin/postfixadmin/archive/postfixadmin-${POSTFIXADMIN_VERSION}.tar.gz"; \ + curl -fsSL -o postfixadmin.tar.gz "https://github.com/postfixadmin/postfixadmin/archive/v${POSTFIXADMIN_VERSION}.tar.gz"; \ echo "$POSTFIXADMIN_SHA512 *postfixadmin.tar.gz" | sha512sum -c -; \ # upstream tarball include ./postfixadmin-postfixadmin-${POSTFIXADMIN_VERSION}/ mkdir /usr/src/postfixadmin; \ @@ -53,5 +47,21 @@ RUN set -eu; \ COPY docker-entrypoint.sh /usr/local/bin/ +COPY --from=composer:2 /usr/bin/composer /usr/local/bin/ + +# https://github.com/moby/buildkit/issues/4503 +# https://github.com/composer/composer/issues/11839 +# https://github.com/composer/composer/blob/94fe2945456df51e122a492b8d14ac4b54c1d2ce/src/Composer/Console/Application.php#L217-L218 +ENV COMPOSER_ALLOW_SUPERUSER 1 + +RUN set -eux; \ + export COMPOSER_HOME="$(mktemp -d)"; \ + # mysqli is expected but we use pdo + composer install --ignore-platform-req=ext-mysqli --no-dev --no-interaction --working-dir /usr/src/postfixadmin; \ + # delete composer cache + rm -rf "$COMPOSER_HOME" + +ENV PATH=${PATH}:/opt/drupal/vendor/bin + ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"] CMD ["%%CMD%%"] diff --git a/Dockerfile-debian.template b/Dockerfile-debian.template index da13288..cce8d4d 100644 --- a/Dockerfile-debian.template +++ b/Dockerfile-debian.template @@ -1,4 +1,4 @@ -FROM php:8.3-%%VARIANT%%-bookworm +FROM php:8.3-%%VARIANT%% LABEL maintainer="David Goodwin (@DavidGoodwin)" # docker-entrypoint.sh dependencies @@ -16,40 +16,32 @@ RUN set -ex; \ \ apt-get update; \ apt-get install -y --no-install-recommends \ - libc-client2007e-dev \ - libkrb5-dev \ - libpq-dev \ - libsqlite3-dev \ + libpq-dev \ + libsqlite3-dev \ ; \ - \ - docker-php-ext-configure \ - imap --with-imap-ssl --with-kerberos \ - ; \ - \ docker-php-ext-install -j "$(nproc)" \ - imap \ pdo_mysql \ pdo_pgsql \ pdo_sqlite \ pgsql \ ; \ - \ # reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies apt-mark auto '.*' > /dev/null; \ apt-mark manual $savedAptMark; \ - ldd "$(php -r 'echo ini_get("extension_dir");')"/*.so \ + ldd "$(php -r 'echo ini_get("extension_dir");')"/*.so \ | awk '/=>/ { so = $(NF-1); if (index(so, "/usr/local/") == 1) { next }; gsub("^/(usr/)?", "", so); print so }' \ | sort -u \ - | xargs -r dpkg-query --search \ - | cut -d: -f1 \ + | xargs -rt dpkg-query --search \ +# https://manpages.debian.org/trixie/dpkg/dpkg-query.1.en.html#S (we ignore diversions and it'll be really unusual for more than one package to provide any given .so file) + | awk 'sub(":$", "", $1) { print $1 }' \ | sort -u \ | xargs -rt apt-mark manual; \ \ apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \ - rm -rf /var/lib/apt/lists/* + apt-get dist-clean -ARG POSTFIXADMIN_VERSION=3.3.16 -ARG POSTFIXADMIN_SHA512=d1b8074c32f7912c187c2c37c5cca158432cb85fc415d9efe86cf11f70ab035117053cc579306e224cb180e70fa3c84a68335f18d62b43abf591e8105a00847d +ARG POSTFIXADMIN_VERSION=4.0.1 +ARG POSTFIXADMIN_SHA512=88be6834257580c7a52dce33ce552e1868a1b28ba639a3378a66278939640073af4f8893fbfac690e2df5e67db0143c5726aab575bf0e4014b39a03d46916831 ENV POSTFIXADMIN_VERSION $POSTFIXADMIN_VERSION ENV POSTFIXADMIN_SHA512 $POSTFIXADMIN_SHA512 @@ -59,7 +51,7 @@ RUN set -eu; sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2 sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf RUN set -eu; \ - curl -fsSL -o postfixadmin.tar.gz "https://github.com/postfixadmin/postfixadmin/archive/postfixadmin-${POSTFIXADMIN_VERSION}.tar.gz"; \ + curl -fsSL -o postfixadmin.tar.gz "https://github.com/postfixadmin/postfixadmin/archive/v${POSTFIXADMIN_VERSION}.tar.gz"; \ echo "$POSTFIXADMIN_SHA512 *postfixadmin.tar.gz" | sha512sum -c -; \ # upstream tarball include ./postfixadmin-postfixadmin-${POSTFIXADMIN_VERSION}/ mkdir /usr/src/postfixadmin; \ @@ -71,5 +63,30 @@ RUN set -eu; \ COPY docker-entrypoint.sh /usr/local/bin/ +COPY --from=composer:2 /usr/bin/composer /usr/local/bin/ + +# https://github.com/moby/buildkit/issues/4503 +# https://github.com/composer/composer/issues/11839 +# https://github.com/composer/composer/blob/94fe2945456df51e122a492b8d14ac4b54c1d2ce/src/Composer/Console/Application.php#L217-L218 +ENV COMPOSER_ALLOW_SUPERUSER 1 + +RUN set -eux; \ + composerDeps=" \ + unzip \ + "; \ + apt-get update; \ + apt-get install -y --no-install-recommends $composerDeps; \ + \ + export COMPOSER_HOME="$(mktemp -d)"; \ + # mysqli is expected but we use pdo + composer install --ignore-platform-req=ext-mysqli --no-dev --no-interaction --working-dir /usr/src/postfixadmin; \ + # delete composer cache + rm -rf "$COMPOSER_HOME"; \ + \ + apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false $composerDeps; \ + apt-get dist-clean + +ENV PATH=${PATH}:/opt/drupal/vendor/bin + ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"] CMD ["%%CMD%%"] diff --git a/apache/Dockerfile b/apache/Dockerfile index 01328fd..d19677c 100644 --- a/apache/Dockerfile +++ b/apache/Dockerfile @@ -1,4 +1,4 @@ -FROM php:8.3-apache-bookworm +FROM php:8.3-apache LABEL maintainer="David Goodwin (@DavidGoodwin)" # docker-entrypoint.sh dependencies @@ -16,40 +16,32 @@ RUN set -ex; \ \ apt-get update; \ apt-get install -y --no-install-recommends \ - libc-client2007e-dev \ - libkrb5-dev \ - libpq-dev \ - libsqlite3-dev \ + libpq-dev \ + libsqlite3-dev \ ; \ - \ - docker-php-ext-configure \ - imap --with-imap-ssl --with-kerberos \ - ; \ - \ docker-php-ext-install -j "$(nproc)" \ - imap \ pdo_mysql \ pdo_pgsql \ pdo_sqlite \ pgsql \ ; \ - \ # reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies apt-mark auto '.*' > /dev/null; \ apt-mark manual $savedAptMark; \ - ldd "$(php -r 'echo ini_get("extension_dir");')"/*.so \ + ldd "$(php -r 'echo ini_get("extension_dir");')"/*.so \ | awk '/=>/ { so = $(NF-1); if (index(so, "/usr/local/") == 1) { next }; gsub("^/(usr/)?", "", so); print so }' \ | sort -u \ - | xargs -r dpkg-query --search \ - | cut -d: -f1 \ + | xargs -rt dpkg-query --search \ +# https://manpages.debian.org/trixie/dpkg/dpkg-query.1.en.html#S (we ignore diversions and it'll be really unusual for more than one package to provide any given .so file) + | awk 'sub(":$", "", $1) { print $1 }' \ | sort -u \ | xargs -rt apt-mark manual; \ \ apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \ - rm -rf /var/lib/apt/lists/* + apt-get dist-clean -ARG POSTFIXADMIN_VERSION=3.3.16 -ARG POSTFIXADMIN_SHA512=d1b8074c32f7912c187c2c37c5cca158432cb85fc415d9efe86cf11f70ab035117053cc579306e224cb180e70fa3c84a68335f18d62b43abf591e8105a00847d +ARG POSTFIXADMIN_VERSION=4.0.1 +ARG POSTFIXADMIN_SHA512=88be6834257580c7a52dce33ce552e1868a1b28ba639a3378a66278939640073af4f8893fbfac690e2df5e67db0143c5726aab575bf0e4014b39a03d46916831 ENV POSTFIXADMIN_VERSION $POSTFIXADMIN_VERSION ENV POSTFIXADMIN_SHA512 $POSTFIXADMIN_SHA512 @@ -59,7 +51,7 @@ RUN set -eu; sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2 sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf RUN set -eu; \ - curl -fsSL -o postfixadmin.tar.gz "https://github.com/postfixadmin/postfixadmin/archive/postfixadmin-${POSTFIXADMIN_VERSION}.tar.gz"; \ + curl -fsSL -o postfixadmin.tar.gz "https://github.com/postfixadmin/postfixadmin/archive/v${POSTFIXADMIN_VERSION}.tar.gz"; \ echo "$POSTFIXADMIN_SHA512 *postfixadmin.tar.gz" | sha512sum -c -; \ # upstream tarball include ./postfixadmin-postfixadmin-${POSTFIXADMIN_VERSION}/ mkdir /usr/src/postfixadmin; \ @@ -71,5 +63,30 @@ RUN set -eu; \ COPY docker-entrypoint.sh /usr/local/bin/ +COPY --from=composer:2 /usr/bin/composer /usr/local/bin/ + +# https://github.com/moby/buildkit/issues/4503 +# https://github.com/composer/composer/issues/11839 +# https://github.com/composer/composer/blob/94fe2945456df51e122a492b8d14ac4b54c1d2ce/src/Composer/Console/Application.php#L217-L218 +ENV COMPOSER_ALLOW_SUPERUSER 1 + +RUN set -eux; \ + composerDeps=" \ + unzip \ + "; \ + apt-get update; \ + apt-get install -y --no-install-recommends $composerDeps; \ + \ + export COMPOSER_HOME="$(mktemp -d)"; \ + # mysqli is expected but we use pdo + composer install --ignore-platform-req=ext-mysqli --no-dev --no-interaction --working-dir /usr/src/postfixadmin; \ + # delete composer cache + rm -rf "$COMPOSER_HOME"; \ + \ + apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false $composerDeps; \ + apt-get dist-clean + +ENV PATH=${PATH}:/opt/drupal/vendor/bin + ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"] CMD ["apache2-foreground"] diff --git a/fpm-alpine/Dockerfile b/fpm-alpine/Dockerfile index c160a7b..fb0b167 100644 --- a/fpm-alpine/Dockerfile +++ b/fpm-alpine/Dockerfile @@ -10,16 +10,10 @@ RUN apk add --no-cache \ RUN set -ex; \ \ apk add --no-cache --virtual .build-deps \ - imap-dev \ - krb5-dev \ postgresql-dev \ sqlite-dev \ ; \ - docker-php-ext-configure \ - imap --with-imap-ssl --with-kerberos \ - ; \ docker-php-ext-install -j "$(nproc)" \ - imap \ pdo_mysql \ pdo_pgsql \ pdo_sqlite \ @@ -34,14 +28,14 @@ RUN set -ex; \ apk add --no-network --virtual .postfixadmin-phpexts-rundeps $runDeps; \ apk del --no-network .build-deps -ARG POSTFIXADMIN_VERSION=3.3.16 -ARG POSTFIXADMIN_SHA512=d1b8074c32f7912c187c2c37c5cca158432cb85fc415d9efe86cf11f70ab035117053cc579306e224cb180e70fa3c84a68335f18d62b43abf591e8105a00847d +ARG POSTFIXADMIN_VERSION=4.0.1 +ARG POSTFIXADMIN_SHA512=88be6834257580c7a52dce33ce552e1868a1b28ba639a3378a66278939640073af4f8893fbfac690e2df5e67db0143c5726aab575bf0e4014b39a03d46916831 ENV POSTFIXADMIN_VERSION $POSTFIXADMIN_VERSION ENV POSTFIXADMIN_SHA512 $POSTFIXADMIN_SHA512 RUN set -eu; \ - curl -fsSL -o postfixadmin.tar.gz "https://github.com/postfixadmin/postfixadmin/archive/postfixadmin-${POSTFIXADMIN_VERSION}.tar.gz"; \ + curl -fsSL -o postfixadmin.tar.gz "https://github.com/postfixadmin/postfixadmin/archive/v${POSTFIXADMIN_VERSION}.tar.gz"; \ echo "$POSTFIXADMIN_SHA512 *postfixadmin.tar.gz" | sha512sum -c -; \ # upstream tarball include ./postfixadmin-postfixadmin-${POSTFIXADMIN_VERSION}/ mkdir /usr/src/postfixadmin; \ @@ -53,5 +47,21 @@ RUN set -eu; \ COPY docker-entrypoint.sh /usr/local/bin/ +COPY --from=composer:2 /usr/bin/composer /usr/local/bin/ + +# https://github.com/moby/buildkit/issues/4503 +# https://github.com/composer/composer/issues/11839 +# https://github.com/composer/composer/blob/94fe2945456df51e122a492b8d14ac4b54c1d2ce/src/Composer/Console/Application.php#L217-L218 +ENV COMPOSER_ALLOW_SUPERUSER 1 + +RUN set -eux; \ + export COMPOSER_HOME="$(mktemp -d)"; \ + # mysqli is expected but we use pdo + composer install --ignore-platform-req=ext-mysqli --no-dev --no-interaction --working-dir /usr/src/postfixadmin; \ + # delete composer cache + rm -rf "$COMPOSER_HOME" + +ENV PATH=${PATH}:/opt/drupal/vendor/bin + ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"] CMD ["php-fpm"] diff --git a/fpm/Dockerfile b/fpm/Dockerfile index 3445bae..06414d6 100644 --- a/fpm/Dockerfile +++ b/fpm/Dockerfile @@ -1,4 +1,4 @@ -FROM php:8.3-fpm-bookworm +FROM php:8.3-fpm LABEL maintainer="David Goodwin (@DavidGoodwin)" # docker-entrypoint.sh dependencies @@ -16,47 +16,39 @@ RUN set -ex; \ \ apt-get update; \ apt-get install -y --no-install-recommends \ - libc-client2007e-dev \ - libkrb5-dev \ - libpq-dev \ - libsqlite3-dev \ + libpq-dev \ + libsqlite3-dev \ ; \ - \ - docker-php-ext-configure \ - imap --with-imap-ssl --with-kerberos \ - ; \ - \ docker-php-ext-install -j "$(nproc)" \ - imap \ pdo_mysql \ pdo_pgsql \ pdo_sqlite \ pgsql \ ; \ - \ # reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies apt-mark auto '.*' > /dev/null; \ apt-mark manual $savedAptMark; \ - ldd "$(php -r 'echo ini_get("extension_dir");')"/*.so \ + ldd "$(php -r 'echo ini_get("extension_dir");')"/*.so \ | awk '/=>/ { so = $(NF-1); if (index(so, "/usr/local/") == 1) { next }; gsub("^/(usr/)?", "", so); print so }' \ | sort -u \ - | xargs -r dpkg-query --search \ - | cut -d: -f1 \ + | xargs -rt dpkg-query --search \ +# https://manpages.debian.org/trixie/dpkg/dpkg-query.1.en.html#S (we ignore diversions and it'll be really unusual for more than one package to provide any given .so file) + | awk 'sub(":$", "", $1) { print $1 }' \ | sort -u \ | xargs -rt apt-mark manual; \ \ apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \ - rm -rf /var/lib/apt/lists/* + apt-get dist-clean -ARG POSTFIXADMIN_VERSION=3.3.16 -ARG POSTFIXADMIN_SHA512=d1b8074c32f7912c187c2c37c5cca158432cb85fc415d9efe86cf11f70ab035117053cc579306e224cb180e70fa3c84a68335f18d62b43abf591e8105a00847d +ARG POSTFIXADMIN_VERSION=4.0.1 +ARG POSTFIXADMIN_SHA512=88be6834257580c7a52dce33ce552e1868a1b28ba639a3378a66278939640073af4f8893fbfac690e2df5e67db0143c5726aab575bf0e4014b39a03d46916831 ENV POSTFIXADMIN_VERSION $POSTFIXADMIN_VERSION ENV POSTFIXADMIN_SHA512 $POSTFIXADMIN_SHA512 RUN set -eu; \ - curl -fsSL -o postfixadmin.tar.gz "https://github.com/postfixadmin/postfixadmin/archive/postfixadmin-${POSTFIXADMIN_VERSION}.tar.gz"; \ + curl -fsSL -o postfixadmin.tar.gz "https://github.com/postfixadmin/postfixadmin/archive/v${POSTFIXADMIN_VERSION}.tar.gz"; \ echo "$POSTFIXADMIN_SHA512 *postfixadmin.tar.gz" | sha512sum -c -; \ # upstream tarball include ./postfixadmin-postfixadmin-${POSTFIXADMIN_VERSION}/ mkdir /usr/src/postfixadmin; \ @@ -68,5 +60,30 @@ RUN set -eu; \ COPY docker-entrypoint.sh /usr/local/bin/ +COPY --from=composer:2 /usr/bin/composer /usr/local/bin/ + +# https://github.com/moby/buildkit/issues/4503 +# https://github.com/composer/composer/issues/11839 +# https://github.com/composer/composer/blob/94fe2945456df51e122a492b8d14ac4b54c1d2ce/src/Composer/Console/Application.php#L217-L218 +ENV COMPOSER_ALLOW_SUPERUSER 1 + +RUN set -eux; \ + composerDeps=" \ + unzip \ + "; \ + apt-get update; \ + apt-get install -y --no-install-recommends $composerDeps; \ + \ + export COMPOSER_HOME="$(mktemp -d)"; \ + # mysqli is expected but we use pdo + composer install --ignore-platform-req=ext-mysqli --no-dev --no-interaction --working-dir /usr/src/postfixadmin; \ + # delete composer cache + rm -rf "$COMPOSER_HOME"; \ + \ + apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false $composerDeps; \ + apt-get dist-clean + +ENV PATH=${PATH}:/opt/drupal/vendor/bin + ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"] CMD ["php-fpm"]