From 9ba1a949b75fa17dbc7a2e03054c5a56f16d3660 Mon Sep 17 00:00:00 2001 From: loks0n <22452787+loks0n@users.noreply.github.com> Date: Thu, 14 May 2026 19:57:12 +0100 Subject: [PATCH] Collapse per-version Dockerfiles into one templated build + slim images Replace php-8.{3,4,5}/Dockerfile with a single root Dockerfile driven by versions/.env, and trim the runtime image. Templating: - Single Dockerfile parameterized via build args (PHP_VERSION, PHP_API, extension pins). - Per-version pins live in versions/8.3.env, 8.4.env, 8.5.env. - Root tests.yaml replaces the per-version copies (uses php -m, no ABI-specific paths). - ci.yml builds by sourcing the env file and passing --build-arg per key. Image-size cleanup (~28% smaller): - Strip extension .so files in each builder stage (binutils added to the compile stage); halves swoole/mongodb among others. - Replace dev packages with their runtime equivalents in the final stage (brotli-libs, lz4-libs, zstd-libs, yaml). Drop linux-headers (build-only). - sockets.so is now compiled once in the compile stage and copied into final, instead of recompiled (which required linux-headers at runtime). Extension version unification (across 8.3/8.4): - redis 6.1.0 -> 6.3.0 - imagick 3.7.0 -> 3.8.1 (8.3 only; 8.4/8.5 already at 3.8.1) - yaml 2.2.4 -> 2.3.0 - xdebug 3.4.1 -> 3.5.1 Image sizes: - 8.3: 237MB -> 169MB - 8.4: 246MB -> 178MB - 8.5: 262MB -> 194MB Co-Authored-By: Claude Opus 4.7 --- .github/workflows/ci.yml | 12 +- php-8.3/Dockerfile => Dockerfile | 128 +++++++++---------- README.md | 15 ++- php-8.3/tests.yaml | 34 ----- php-8.4/Dockerfile | 210 ------------------------------- php-8.4/tests.yaml | 35 ------ php-8.5/Dockerfile | 209 ------------------------------ php-8.5/tests.yaml | 34 ----- versions/8.3.env | 14 +++ versions/8.4.env | 14 +++ versions/8.5.env | 14 +++ 11 files changed, 130 insertions(+), 589 deletions(-) rename php-8.3/Dockerfile => Dockerfile (57%) delete mode 100644 php-8.3/tests.yaml delete mode 100644 php-8.4/Dockerfile delete mode 100644 php-8.4/tests.yaml delete mode 100644 php-8.5/Dockerfile delete mode 100644 php-8.5/tests.yaml create mode 100644 versions/8.3.env create mode 100644 versions/8.4.env create mode 100644 versions/8.5.env diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f127da4..6d8f367 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -44,7 +44,15 @@ jobs: - name: Build image run: | - docker image build --tag utopia-base-test php-${{ matrix.php-versions }}/. + set -a + . ./versions/${{ matrix.php-versions }}.env + set +a + args=() + while IFS='=' read -r k _; do + [[ -z "$k" || "$k" =~ ^# ]] && continue + args+=(--build-arg "$k") + done < versions/${{ matrix.php-versions }}.env + docker image build "${args[@]}" --tag utopia-base-test . - name: Save image run: docker image save utopia-base-test -o image.tar @@ -95,7 +103,7 @@ jobs: sudo mv "$asset" /usr/local/bin/container-structure-test - name: Run container structure tests - run: container-structure-test test --image utopia-base-test --config php-${{ matrix.php-versions }}/tests.yaml + run: container-structure-test test --image utopia-base-test --config tests.yaml dive: name: Dive (${{ matrix.php-versions }}) diff --git a/php-8.3/Dockerfile b/Dockerfile similarity index 57% rename from php-8.3/Dockerfile rename to Dockerfile index e3ee491..4dd0297 100644 --- a/php-8.3/Dockerfile +++ b/Dockerfile @@ -1,17 +1,20 @@ -FROM php:8.3-cli-alpine AS compile - -ENV PHP_REDIS_VERSION="6.1.0" \ - PHP_SWOOLE_VERSION="v6.2.0" \ - PHP_IMAGICK_VERSION="3.7.0" \ - PHP_YAML_VERSION="2.2.4" \ - PHP_MAXMINDDB_VERSION="v1.12.0" \ - PHP_SCRYPT_VERSION="2.0.1" \ - PHP_ZSTD_VERSION="0.14.0" \ - PHP_BROTLI_VERSION="0.15.0" \ - PHP_SNAPPY_VERSION="0.2.2" \ - PHP_LZ4_VERSION="0.4.4" \ - PHP_XDEBUG_VERSION="3.4.1" \ - PHP_MONGO_VERSION="2.2.1" +ARG PHP_VERSION=8.5 +ARG PHP_API + +FROM php:${PHP_VERSION}-cli-alpine AS compile +ARG PHP_API +ARG PHP_REDIS_VERSION +ARG PHP_SWOOLE_VERSION +ARG PHP_IMAGICK_VERSION +ARG PHP_YAML_VERSION +ARG PHP_MAXMINDDB_VERSION +ARG PHP_SCRYPT_VERSION +ARG PHP_ZSTD_VERSION +ARG PHP_BROTLI_VERSION +ARG PHP_SNAPPY_VERSION +ARG PHP_LZ4_VERSION +ARG PHP_XDEBUG_VERSION +ARG PHP_MONGO_VERSION RUN \ apk add --no-cache --virtual .deps \ @@ -23,6 +26,7 @@ RUN \ gcc \ g++ \ git \ + binutils \ zlib-dev \ openssl-dev \ yaml-dev \ @@ -38,18 +42,18 @@ RUN \ curl-dev \ cmake -RUN docker-php-ext-install sockets +RUN docker-php-ext-install sockets && \ + strip --strip-unneeded /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/sockets.so FROM compile AS redis RUN \ - # Redis Extension git clone --depth 1 --branch $PHP_REDIS_VERSION https://github.com/phpredis/phpredis.git && \ cd phpredis && \ phpize && \ ./configure && \ - make && make install + make && make install && \ + strip --strip-unneeded /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/*.so -## Swoole Extension FROM compile AS swoole RUN \ git clone --depth 1 --branch $PHP_SWOOLE_VERSION https://github.com/swoole/swoole-src.git && \ @@ -57,27 +61,27 @@ RUN \ phpize && \ ./configure --enable-sockets --enable-http2 --enable-openssl --enable-swoole-curl && \ make && make install && \ + strip --strip-unneeded /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/*.so && \ cd .. -## Imagick Extension FROM compile AS imagick RUN \ git clone --depth 1 --branch $PHP_IMAGICK_VERSION https://github.com/imagick/imagick && \ cd imagick && \ phpize && \ ./configure && \ - make && make install + make && make install && \ + strip --strip-unneeded /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/*.so -## YAML Extension FROM compile AS yaml RUN \ git clone --depth 1 --branch $PHP_YAML_VERSION https://github.com/php/pecl-file_formats-yaml && \ cd pecl-file_formats-yaml && \ phpize && \ ./configure && \ - make && make install + make && make install && \ + strip --strip-unneeded /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/*.so -## Maxminddb extension FROM compile AS maxmind RUN \ git clone --depth 1 --branch $PHP_MAXMINDDB_VERSION https://github.com/maxmind/MaxMind-DB-Reader-php.git && \ @@ -85,86 +89,86 @@ RUN \ cd ext && \ phpize && \ ./configure && \ - make && make install + make && make install && \ + strip --strip-unneeded /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/*.so -# Zstd Compression FROM compile AS zstd RUN git clone --recursive -n https://github.com/kjdev/php-ext-zstd.git \ && cd php-ext-zstd \ && git checkout $PHP_ZSTD_VERSION \ && phpize \ && ./configure --with-libzstd \ - && make && make install + && make && make install \ + && strip --strip-unneeded /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/*.so -## Brotli Extension FROM compile AS brotli RUN git clone https://github.com/kjdev/php-ext-brotli.git \ && cd php-ext-brotli \ && git reset --hard $PHP_BROTLI_VERSION \ && phpize \ && ./configure --with-libbrotli \ - && make && make install + && make && make install \ + && strip --strip-unneeded /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/*.so -## LZ4 Extension FROM compile AS lz4 RUN git clone --recursive https://github.com/kjdev/php-ext-lz4.git \ && cd php-ext-lz4 \ && git reset --hard $PHP_LZ4_VERSION \ && phpize \ && ./configure --with-lz4-includedir=/usr \ - && make && make install + && make && make install \ + && strip --strip-unneeded /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/*.so -## Snappy Extension FROM compile AS snappy RUN git clone --recursive https://github.com/kjdev/php-ext-snappy.git \ && cd php-ext-snappy \ && git reset --hard $PHP_SNAPPY_VERSION \ && phpize \ && ./configure \ - && make && make install + && make && make install \ + && strip --strip-unneeded /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/*.so -## Scrypt Extension FROM compile AS scrypt RUN git clone --depth 1 https://github.com/DomBlack/php-scrypt.git \ && cd php-scrypt \ && git reset --hard $PHP_SCRYPT_VERSION \ && phpize \ && ./configure --enable-scrypt \ - && make && make install + && make && make install \ + && strip --strip-unneeded /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/*.so -## XDebug Extension FROM compile AS xdebug RUN \ git clone --depth 1 --branch $PHP_XDEBUG_VERSION https://github.com/xdebug/xdebug && \ cd xdebug && \ phpize && \ ./configure && \ - make && make install + make && make install && \ + strip --strip-unneeded /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/*.so -## MongoDB Extension FROM compile AS mongodb RUN \ git clone --depth 1 --recursive --branch $PHP_MONGO_VERSION https://github.com/mongodb/mongo-php-driver.git && \ cd mongo-php-driver && \ phpize && \ ./configure && \ - make && make install + make && make install && \ + strip --strip-unneeded /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/*.so -FROM php:8.3-cli-alpine AS final +FROM php:${PHP_VERSION}-cli-alpine AS final +ARG PHP_API LABEL maintainer="team@appwrite.io" RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone RUN \ - apk update \ - && apk add --no-cache \ - linux-headers \ + apk add --no-cache \ rsync \ - brotli-dev \ - lz4-dev \ - zstd-dev \ - yaml-dev \ + brotli-libs \ + lz4-libs \ + zstd-libs \ + yaml \ imagemagick \ libjpeg-turbo \ libjxl \ @@ -173,26 +177,24 @@ RUN \ imagemagick-heic \ libgomp \ libwebp \ - git \ - && rm -rf /var/cache/apk/* - -RUN docker-php-ext-install sockets + git WORKDIR /usr/src/code -COPY --from=swoole /usr/local/lib/php/extensions/no-debug-non-zts-20230831/swoole.so /usr/local/lib/php/extensions/no-debug-non-zts-20230831/ -COPY --from=redis /usr/local/lib/php/extensions/no-debug-non-zts-20230831/redis.so /usr/local/lib/php/extensions/no-debug-non-zts-20230831/ -COPY --from=imagick /usr/local/lib/php/extensions/no-debug-non-zts-20230831/imagick.so /usr/local/lib/php/extensions/no-debug-non-zts-20230831/ -COPY --from=yaml /usr/local/lib/php/extensions/no-debug-non-zts-20230831/yaml.so /usr/local/lib/php/extensions/no-debug-non-zts-20230831/ -COPY --from=scrypt /usr/local/lib/php/extensions/no-debug-non-zts-20230831/scrypt.so /usr/local/lib/php/extensions/no-debug-non-zts-20230831/ -COPY --from=zstd /usr/local/lib/php/extensions/no-debug-non-zts-20230831/zstd.so /usr/local/lib/php/extensions/no-debug-non-zts-20230831/ -COPY --from=brotli /usr/local/lib/php/extensions/no-debug-non-zts-20230831/brotli.so /usr/local/lib/php/extensions/no-debug-non-zts-20230831/ -COPY --from=lz4 /usr/local/lib/php/extensions/no-debug-non-zts-20230831/lz4.so /usr/local/lib/php/extensions/no-debug-non-zts-20230831/ -COPY --from=snappy /usr/local/lib/php/extensions/no-debug-non-zts-20230831/snappy.so /usr/local/lib/php/extensions/no-debug-non-zts-20230831/ -COPY --from=xdebug /usr/local/lib/php/extensions/no-debug-non-zts-20230831/xdebug.so /usr/local/lib/php/extensions/no-debug-non-zts-20230831/ -COPY --from=mongodb /usr/local/lib/php/extensions/no-debug-non-zts-20230831/mongodb.so /usr/local/lib/php/extensions/no-debug-non-zts-20230831/ - -# Enable Extensions +COPY --from=compile /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/sockets.so /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/ +COPY --from=compile /usr/local/etc/php/conf.d/docker-php-ext-sockets.ini /usr/local/etc/php/conf.d/ +COPY --from=swoole /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/swoole.so /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/ +COPY --from=redis /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/redis.so /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/ +COPY --from=imagick /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/imagick.so /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/ +COPY --from=yaml /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/yaml.so /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/ +COPY --from=scrypt /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/scrypt.so /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/ +COPY --from=zstd /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/zstd.so /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/ +COPY --from=brotli /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/brotli.so /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/ +COPY --from=lz4 /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/lz4.so /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/ +COPY --from=snappy /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/snappy.so /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/ +COPY --from=xdebug /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/xdebug.so /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/ +COPY --from=mongodb /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/mongodb.so /usr/local/lib/php/extensions/no-debug-non-zts-${PHP_API}/ + RUN echo extension=swoole.so >> /usr/local/etc/php/conf.d/swoole.ini RUN echo extension=redis.so >> /usr/local/etc/php/conf.d/redis.ini RUN echo extension=imagick.so >> /usr/local/etc/php/conf.d/imagick.ini diff --git a/README.md b/README.md index 9c85a87..4371198 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,18 @@ All publishing workflows share a `build-` concurrency group so a release qu ## Local development +A single `Dockerfile` is templated by the per-version configs in `versions/.env`: + ```sh -docker build -t utopia-base-test php-8.4/. -container-structure-test test --image utopia-base-test --config php-8.4/tests.yaml +set -a && . versions/8.4.env && set +a +args=() +while IFS='=' read -r k _; do + [[ -z "$k" || "$k" =~ ^# ]] && continue + args+=(--build-arg "$k") +done < versions/8.4.env + +docker build "${args[@]}" -t utopia-base-test . +container-structure-test test --image utopia-base-test --config tests.yaml ``` + +To bump an extension version, edit the relevant `versions/.env`. To add a new PHP version, drop in a new `versions/.env` and add the version to the matrix in `.github/workflows/ci.yml` and `publish.yml`. diff --git a/php-8.3/tests.yaml b/php-8.3/tests.yaml deleted file mode 100644 index 577053a..0000000 --- a/php-8.3/tests.yaml +++ /dev/null @@ -1,34 +0,0 @@ -schemaVersion: '2.0.0' - -fileExistenceTests: - ## Extension files - - name: 'Check swoole extension' - path: /usr/local/lib/php/extensions/no-debug-non-zts-20230831/swoole.so - shouldExist: true - - name: 'Check redis extension' - path: /usr/local/lib/php/extensions/no-debug-non-zts-20230831/redis.so - shouldExist: true - - name: 'Check imagick extension' - path: /usr/local/lib/php/extensions/no-debug-non-zts-20230831/imagick.so - shouldExist: true - - name: 'Check yaml extension' - path: /usr/local/lib/php/extensions/no-debug-non-zts-20230831/yaml.so - shouldExist: true - - name: 'Check scrypt extension' - path: /usr/local/lib/php/extensions/no-debug-non-zts-20230831/scrypt.so - shouldExist: true - - name: 'Check zstd extension' - path: /usr/local/lib/php/extensions/no-debug-non-zts-20230831/zstd.so - shouldExist: true - - name: 'Check brotli extension' - path: /usr/local/lib/php/extensions/no-debug-non-zts-20230831/brotli.so - shouldExist: true - - name: 'Check lz4 extension' - path: /usr/local/lib/php/extensions/no-debug-non-zts-20230831/lz4.so - shouldExist: true - - name: 'Check snappy extension' - path: /usr/local/lib/php/extensions/no-debug-non-zts-20230831/snappy.so - shouldExist: true - - name: 'Check mongodb extension' - path: /usr/local/lib/php/extensions/no-debug-non-zts-20230831/mongodb.so - shouldExist: true \ No newline at end of file diff --git a/php-8.4/Dockerfile b/php-8.4/Dockerfile deleted file mode 100644 index 38dddea..0000000 --- a/php-8.4/Dockerfile +++ /dev/null @@ -1,210 +0,0 @@ -FROM php:8.4-cli-alpine AS compile - -ENV PHP_REDIS_VERSION="6.1.0" \ - PHP_SWOOLE_VERSION="v6.2.0" \ - PHP_IMAGICK_VERSION="3.8.1" \ - PHP_YAML_VERSION="2.2.4" \ - PHP_MAXMINDDB_VERSION="v1.12.0" \ - PHP_SCRYPT_VERSION="2.0.1" \ - PHP_ZSTD_VERSION="0.14.0" \ - PHP_BROTLI_VERSION="0.15.0" \ - PHP_SNAPPY_VERSION="0.2.2" \ - PHP_LZ4_VERSION="0.4.4" \ - PHP_XDEBUG_VERSION="3.4.1" \ - PHP_MONGO_VERSION="2.2.1" - -RUN \ - apk add --no-cache --virtual .deps \ - linux-headers \ - icu-dev \ - make \ - automake \ - autoconf \ - gcc \ - g++ \ - git \ - zlib-dev \ - openssl-dev \ - yaml-dev \ - imagemagick \ - imagemagick-dev \ - libjpeg-turbo-dev \ - jpeg-dev \ - libjxl-dev \ - libmaxminddb-dev \ - zstd-dev \ - brotli-dev \ - lz4-dev \ - curl-dev \ - cmake - -RUN docker-php-ext-install sockets - -FROM compile AS redis -RUN \ - # Redis Extension - git clone --depth 1 --branch $PHP_REDIS_VERSION https://github.com/phpredis/phpredis.git && \ - cd phpredis && \ - phpize && \ - ./configure && \ - make && make install - -## Swoole Extension -FROM compile AS swoole -RUN \ - git clone --depth 1 --branch $PHP_SWOOLE_VERSION https://github.com/swoole/swoole-src.git && \ - cd swoole-src && \ - phpize && \ - ./configure --enable-sockets --enable-http2 --enable-openssl --enable-swoole-curl && \ - make && make install && \ - cd .. - -## Imagick Extension -FROM compile AS imagick -RUN \ - git clone --depth 1 --branch $PHP_IMAGICK_VERSION https://github.com/imagick/imagick && \ - cd imagick && \ - phpize && \ - ./configure && \ - make && make install - -## YAML Extension -FROM compile AS yaml -RUN \ - git clone --depth 1 --branch $PHP_YAML_VERSION https://github.com/php/pecl-file_formats-yaml && \ - cd pecl-file_formats-yaml && \ - phpize && \ - ./configure && \ - make && make install - -## Maxminddb extension -FROM compile AS maxmind -RUN \ - git clone --depth 1 --branch $PHP_MAXMINDDB_VERSION https://github.com/maxmind/MaxMind-DB-Reader-php.git && \ - cd MaxMind-DB-Reader-php && \ - cd ext && \ - phpize && \ - ./configure && \ - make && make install - -# Zstd Compression -FROM compile AS zstd -RUN git clone --recursive -n https://github.com/kjdev/php-ext-zstd.git \ - && cd php-ext-zstd \ - && git checkout $PHP_ZSTD_VERSION \ - && phpize \ - && ./configure --with-libzstd \ - && make && make install - -## Brotli Extension -FROM compile AS brotli -RUN git clone https://github.com/kjdev/php-ext-brotli.git \ - && cd php-ext-brotli \ - && git reset --hard $PHP_BROTLI_VERSION \ - && phpize \ - && ./configure --with-libbrotli \ - && make && make install - -## LZ4 Extension -FROM compile AS lz4 -RUN git clone --recursive https://github.com/kjdev/php-ext-lz4.git \ - && cd php-ext-lz4 \ - && git reset --hard $PHP_LZ4_VERSION \ - && phpize \ - && ./configure --with-lz4-includedir=/usr \ - && make && make install - -## Snappy Extension -FROM compile AS snappy -RUN git clone --recursive https://github.com/kjdev/php-ext-snappy.git \ - && cd php-ext-snappy \ - && git reset --hard $PHP_SNAPPY_VERSION \ - && phpize \ - && ./configure \ - && make && make install - -## Scrypt Extension -FROM compile AS scrypt -RUN git clone --depth 1 https://github.com/DomBlack/php-scrypt.git \ - && cd php-scrypt \ - && git reset --hard $PHP_SCRYPT_VERSION \ - && phpize \ - && ./configure --enable-scrypt \ - && make && make install - -## XDebug Extension -FROM compile AS xdebug -RUN \ - git clone --depth 1 --branch $PHP_XDEBUG_VERSION https://github.com/xdebug/xdebug && \ - cd xdebug && \ - phpize && \ - ./configure && \ - make && make install - -## MongoDB Extension -FROM compile AS mongodb -RUN \ - git clone --depth 1 --recursive --branch $PHP_MONGO_VERSION https://github.com/mongodb/mongo-php-driver.git && \ - cd mongo-php-driver && \ - phpize && \ - ./configure && \ - make && make install - -FROM php:8.4-cli-alpine AS final - -LABEL maintainer="team@appwrite.io" - -RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone - -RUN \ - apk update \ - && apk add --no-cache \ - linux-headers \ - rsync \ - brotli-dev \ - lz4-dev \ - zstd-dev \ - yaml-dev \ - imagemagick \ - libjpeg-turbo \ - libjxl \ - libavif \ - libheif \ - imagemagick-heic \ - libgomp \ - libwebp \ - git \ - && rm -rf /var/cache/apk/* - -RUN docker-php-ext-install sockets - -WORKDIR /usr/src/code - -COPY --from=swoole /usr/local/lib/php/extensions/no-debug-non-zts-20240924/swoole.so /usr/local/lib/php/extensions/no-debug-non-zts-20240924/ -COPY --from=redis /usr/local/lib/php/extensions/no-debug-non-zts-20240924/redis.so /usr/local/lib/php/extensions/no-debug-non-zts-20240924/ -COPY --from=imagick /usr/local/lib/php/extensions/no-debug-non-zts-20240924/imagick.so /usr/local/lib/php/extensions/no-debug-non-zts-20240924/ -COPY --from=yaml /usr/local/lib/php/extensions/no-debug-non-zts-20240924/yaml.so /usr/local/lib/php/extensions/no-debug-non-zts-20240924/ -COPY --from=scrypt /usr/local/lib/php/extensions/no-debug-non-zts-20240924/scrypt.so /usr/local/lib/php/extensions/no-debug-non-zts-20240924/ -COPY --from=zstd /usr/local/lib/php/extensions/no-debug-non-zts-20240924/zstd.so /usr/local/lib/php/extensions/no-debug-non-zts-20240924/ -COPY --from=brotli /usr/local/lib/php/extensions/no-debug-non-zts-20240924/brotli.so /usr/local/lib/php/extensions/no-debug-non-zts-20240924/ -COPY --from=lz4 /usr/local/lib/php/extensions/no-debug-non-zts-20240924/lz4.so /usr/local/lib/php/extensions/no-debug-non-zts-20240924/ -COPY --from=snappy /usr/local/lib/php/extensions/no-debug-non-zts-20240924/snappy.so /usr/local/lib/php/extensions/no-debug-non-zts-20240924/ -COPY --from=xdebug /usr/local/lib/php/extensions/no-debug-non-zts-20240924/xdebug.so /usr/local/lib/php/extensions/no-debug-non-zts-20240924/ -COPY --from=mongodb /usr/local/lib/php/extensions/no-debug-non-zts-20240924/mongodb.so /usr/local/lib/php/extensions/no-debug-non-zts-20240924/ - -# Enable Extensions -RUN echo extension=swoole.so >> /usr/local/etc/php/conf.d/swoole.ini -RUN echo extension=redis.so >> /usr/local/etc/php/conf.d/redis.ini -RUN echo extension=imagick.so >> /usr/local/etc/php/conf.d/imagick.ini -RUN echo extension=yaml.so >> /usr/local/etc/php/conf.d/yaml.ini -RUN echo extension=scrypt.so >> /usr/local/etc/php/conf.d/scrypt.ini -RUN echo extension=zstd.so >> /usr/local/etc/php/conf.d/zstd.ini -RUN echo extension=brotli.so >> /usr/local/etc/php/conf.d/brotli.ini -RUN echo extension=lz4.so >> /usr/local/etc/php/conf.d/lz4.ini -RUN echo extension=snappy.so >> /usr/local/etc/php/conf.d/snappy.ini -RUN echo extension=mongodb.so >> /usr/local/etc/php/conf.d/mongodb.ini - -EXPOSE 80 - -CMD [ "tail", "-f", "/dev/null" ] - diff --git a/php-8.4/tests.yaml b/php-8.4/tests.yaml deleted file mode 100644 index 3efb0d6..0000000 --- a/php-8.4/tests.yaml +++ /dev/null @@ -1,35 +0,0 @@ -schemaVersion: '2.0.0' - -fileExistenceTests: - ## Extension files - - name: 'Check swoole extension' - path: /usr/local/lib/php/extensions/no-debug-non-zts-20240924/swoole.so - shouldExist: true - - name: 'Check redis extension' - path: /usr/local/lib/php/extensions/no-debug-non-zts-20240924/redis.so - shouldExist: true - - name: 'Check imagick extension' - path: /usr/local/lib/php/extensions/no-debug-non-zts-20240924/imagick.so - shouldExist: true - - name: 'Check yaml extension' - path: /usr/local/lib/php/extensions/no-debug-non-zts-20240924/yaml.so - shouldExist: true - - name: 'Check scrypt extension' - path: /usr/local/lib/php/extensions/no-debug-non-zts-20240924/scrypt.so - shouldExist: true - - name: 'Check zstd extension' - path: /usr/local/lib/php/extensions/no-debug-non-zts-20240924/zstd.so - shouldExist: true - - name: 'Check brotli extension' - path: /usr/local/lib/php/extensions/no-debug-non-zts-20240924/brotli.so - shouldExist: true - - name: 'Check lz4 extension' - path: /usr/local/lib/php/extensions/no-debug-non-zts-20240924/lz4.so - shouldExist: true - - name: 'Check snappy extension' - path: /usr/local/lib/php/extensions/no-debug-non-zts-20240924/snappy.so - shouldExist: true - - name: 'Check mongodb extension' - path: /usr/local/lib/php/extensions/no-debug-non-zts-20240924/mongodb.so - shouldExist: true - diff --git a/php-8.5/Dockerfile b/php-8.5/Dockerfile deleted file mode 100644 index 77db570..0000000 --- a/php-8.5/Dockerfile +++ /dev/null @@ -1,209 +0,0 @@ -FROM php:8.5-cli-alpine AS compile - -ENV PHP_REDIS_VERSION="6.3.0" \ - PHP_SWOOLE_VERSION="v6.2.0" \ - PHP_IMAGICK_VERSION="3.8.1" \ - PHP_YAML_VERSION="2.3.0" \ - PHP_MAXMINDDB_VERSION="v1.12.0" \ - PHP_SCRYPT_VERSION="2.0.1" \ - PHP_ZSTD_VERSION="d6d26eb805058fc672686715a7b5e39d8f65dd36" \ - PHP_BROTLI_VERSION="0.18.3" \ - PHP_SNAPPY_VERSION="ddc8b58d8892593695a17c2b83d72ba3e9f41f64" \ - PHP_LZ4_VERSION="bf27b2c13922b6fbeb2eac5251be4e8a95d01e36" \ - PHP_XDEBUG_VERSION="3.5.1" \ - PHP_MONGO_VERSION="2.2.1" - -RUN \ - apk add --no-cache --virtual .deps \ - linux-headers \ - icu-dev \ - make \ - automake \ - autoconf \ - gcc \ - g++ \ - git \ - zlib-dev \ - openssl-dev \ - yaml-dev \ - imagemagick \ - imagemagick-dev \ - libjpeg-turbo-dev \ - jpeg-dev \ - libjxl-dev \ - libmaxminddb-dev \ - zstd-dev \ - brotli-dev \ - lz4-dev \ - curl-dev \ - cmake - -RUN docker-php-ext-install sockets - -FROM compile AS redis -RUN \ - # Redis Extension - git clone --depth 1 --branch $PHP_REDIS_VERSION https://github.com/phpredis/phpredis.git && \ - cd phpredis && \ - phpize && \ - ./configure && \ - make && make install - -## Swoole Extension -FROM compile AS swoole -RUN \ - git clone --depth 1 --branch $PHP_SWOOLE_VERSION https://github.com/swoole/swoole-src.git && \ - cd swoole-src && \ - phpize && \ - ./configure --enable-sockets --enable-http2 --enable-openssl --enable-swoole-curl && \ - make && make install && \ - cd .. - -## Imagick Extension -FROM compile AS imagick -RUN \ - git clone --depth 1 --branch $PHP_IMAGICK_VERSION https://github.com/imagick/imagick && \ - cd imagick && \ - phpize && \ - ./configure && \ - make && make install - -## YAML Extension -FROM compile AS yaml -RUN \ - git clone --depth 1 --branch $PHP_YAML_VERSION https://github.com/php/pecl-file_formats-yaml && \ - cd pecl-file_formats-yaml && \ - phpize && \ - ./configure && \ - make && make install - -## Maxminddb extension -FROM compile AS maxmind -RUN \ - git clone --depth 1 --branch $PHP_MAXMINDDB_VERSION https://github.com/maxmind/MaxMind-DB-Reader-php.git && \ - cd MaxMind-DB-Reader-php && \ - cd ext && \ - phpize && \ - ./configure && \ - make && make install - -# Zstd Compression -FROM compile AS zstd -RUN git clone --recursive -n https://github.com/kjdev/php-ext-zstd.git \ - && cd php-ext-zstd \ - && git checkout $PHP_ZSTD_VERSION \ - && phpize \ - && ./configure --with-libzstd \ - && make && make install - -## Brotli Extension -FROM compile AS brotli -RUN git clone https://github.com/kjdev/php-ext-brotli.git \ - && cd php-ext-brotli \ - && git reset --hard $PHP_BROTLI_VERSION \ - && phpize \ - && ./configure --with-libbrotli \ - && make && make install - -## LZ4 Extension -FROM compile AS lz4 -RUN git clone --recursive https://github.com/kjdev/php-ext-lz4.git \ - && cd php-ext-lz4 \ - && git reset --hard $PHP_LZ4_VERSION \ - && phpize \ - && ./configure --with-lz4-includedir=/usr \ - && make && make install - -## Snappy Extension -FROM compile AS snappy -RUN git clone --recursive https://github.com/kjdev/php-ext-snappy.git \ - && cd php-ext-snappy \ - && git reset --hard $PHP_SNAPPY_VERSION \ - && phpize \ - && ./configure \ - && make && make install - -## Scrypt Extension -FROM compile AS scrypt -RUN git clone --depth 1 https://github.com/DomBlack/php-scrypt.git \ - && cd php-scrypt \ - && git reset --hard $PHP_SCRYPT_VERSION \ - && phpize \ - && ./configure --enable-scrypt \ - && make && make install - -## XDebug Extension -FROM compile AS xdebug -RUN \ - git clone --depth 1 --branch $PHP_XDEBUG_VERSION https://github.com/xdebug/xdebug && \ - cd xdebug && \ - phpize && \ - ./configure && \ - make && make install - -## MongoDB Extension -FROM compile AS mongodb -RUN \ - git clone --depth 1 --recursive --branch $PHP_MONGO_VERSION https://github.com/mongodb/mongo-php-driver.git && \ - cd mongo-php-driver && \ - phpize && \ - ./configure && \ - make && make install - -FROM php:8.5-cli-alpine AS final - -LABEL maintainer="team@appwrite.io" - -RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone - -RUN \ - apk update \ - && apk add --no-cache \ - linux-headers \ - rsync \ - brotli-dev \ - lz4-dev \ - zstd-dev \ - yaml-dev \ - imagemagick \ - libjpeg-turbo \ - libjxl \ - libavif \ - libheif \ - imagemagick-heic \ - libgomp \ - libwebp \ - git \ - && rm -rf /var/cache/apk/* - -RUN docker-php-ext-install sockets - -WORKDIR /usr/src/code - -COPY --from=swoole /usr/local/lib/php/extensions/no-debug-non-zts-20250925/swoole.so /usr/local/lib/php/extensions/no-debug-non-zts-20250925/ -COPY --from=redis /usr/local/lib/php/extensions/no-debug-non-zts-20250925/redis.so /usr/local/lib/php/extensions/no-debug-non-zts-20250925/ -COPY --from=imagick /usr/local/lib/php/extensions/no-debug-non-zts-20250925/imagick.so /usr/local/lib/php/extensions/no-debug-non-zts-20250925/ -COPY --from=yaml /usr/local/lib/php/extensions/no-debug-non-zts-20250925/yaml.so /usr/local/lib/php/extensions/no-debug-non-zts-20250925/ -COPY --from=scrypt /usr/local/lib/php/extensions/no-debug-non-zts-20250925/scrypt.so /usr/local/lib/php/extensions/no-debug-non-zts-20250925/ -COPY --from=zstd /usr/local/lib/php/extensions/no-debug-non-zts-20250925/zstd.so /usr/local/lib/php/extensions/no-debug-non-zts-20250925/ -COPY --from=brotli /usr/local/lib/php/extensions/no-debug-non-zts-20250925/brotli.so /usr/local/lib/php/extensions/no-debug-non-zts-20250925/ -COPY --from=lz4 /usr/local/lib/php/extensions/no-debug-non-zts-20250925/lz4.so /usr/local/lib/php/extensions/no-debug-non-zts-20250925/ -COPY --from=snappy /usr/local/lib/php/extensions/no-debug-non-zts-20250925/snappy.so /usr/local/lib/php/extensions/no-debug-non-zts-20250925/ -COPY --from=xdebug /usr/local/lib/php/extensions/no-debug-non-zts-20250925/xdebug.so /usr/local/lib/php/extensions/no-debug-non-zts-20250925/ -COPY --from=mongodb /usr/local/lib/php/extensions/no-debug-non-zts-20250925/mongodb.so /usr/local/lib/php/extensions/no-debug-non-zts-20250925/ - -# Enable Extensions -RUN echo extension=swoole.so >> /usr/local/etc/php/conf.d/swoole.ini -RUN echo extension=redis.so >> /usr/local/etc/php/conf.d/redis.ini -RUN echo extension=imagick.so >> /usr/local/etc/php/conf.d/imagick.ini -RUN echo extension=yaml.so >> /usr/local/etc/php/conf.d/yaml.ini -RUN echo extension=scrypt.so >> /usr/local/etc/php/conf.d/scrypt.ini -RUN echo extension=zstd.so >> /usr/local/etc/php/conf.d/zstd.ini -RUN echo extension=brotli.so >> /usr/local/etc/php/conf.d/brotli.ini -RUN echo extension=lz4.so >> /usr/local/etc/php/conf.d/lz4.ini -RUN echo extension=snappy.so >> /usr/local/etc/php/conf.d/snappy.ini -RUN echo extension=mongodb.so >> /usr/local/etc/php/conf.d/mongodb.ini - -EXPOSE 80 - -CMD [ "tail", "-f", "/dev/null" ] diff --git a/php-8.5/tests.yaml b/php-8.5/tests.yaml deleted file mode 100644 index 8a32d2d..0000000 --- a/php-8.5/tests.yaml +++ /dev/null @@ -1,34 +0,0 @@ -schemaVersion: '2.0.0' - -fileExistenceTests: - ## Extension files - - name: 'Check swoole extension' - path: /usr/local/lib/php/extensions/no-debug-non-zts-20250925/swoole.so - shouldExist: true - - name: 'Check redis extension' - path: /usr/local/lib/php/extensions/no-debug-non-zts-20250925/redis.so - shouldExist: true - - name: 'Check imagick extension' - path: /usr/local/lib/php/extensions/no-debug-non-zts-20250925/imagick.so - shouldExist: true - - name: 'Check yaml extension' - path: /usr/local/lib/php/extensions/no-debug-non-zts-20250925/yaml.so - shouldExist: true - - name: 'Check scrypt extension' - path: /usr/local/lib/php/extensions/no-debug-non-zts-20250925/scrypt.so - shouldExist: true - - name: 'Check zstd extension' - path: /usr/local/lib/php/extensions/no-debug-non-zts-20250925/zstd.so - shouldExist: true - - name: 'Check brotli extension' - path: /usr/local/lib/php/extensions/no-debug-non-zts-20250925/brotli.so - shouldExist: true - - name: 'Check lz4 extension' - path: /usr/local/lib/php/extensions/no-debug-non-zts-20250925/lz4.so - shouldExist: true - - name: 'Check snappy extension' - path: /usr/local/lib/php/extensions/no-debug-non-zts-20250925/snappy.so - shouldExist: true - - name: 'Check mongodb extension' - path: /usr/local/lib/php/extensions/no-debug-non-zts-20250925/mongodb.so - shouldExist: true diff --git a/versions/8.3.env b/versions/8.3.env new file mode 100644 index 0000000..c6c1427 --- /dev/null +++ b/versions/8.3.env @@ -0,0 +1,14 @@ +PHP_VERSION=8.3 +PHP_API=20230831 +PHP_REDIS_VERSION=6.3.0 +PHP_SWOOLE_VERSION=v6.2.0 +PHP_IMAGICK_VERSION=3.8.1 +PHP_YAML_VERSION=2.3.0 +PHP_MAXMINDDB_VERSION=v1.12.0 +PHP_SCRYPT_VERSION=2.0.1 +PHP_ZSTD_VERSION=0.14.0 +PHP_BROTLI_VERSION=0.15.0 +PHP_SNAPPY_VERSION=0.2.2 +PHP_LZ4_VERSION=0.4.4 +PHP_XDEBUG_VERSION=3.5.1 +PHP_MONGO_VERSION=2.2.1 diff --git a/versions/8.4.env b/versions/8.4.env new file mode 100644 index 0000000..d9fca58 --- /dev/null +++ b/versions/8.4.env @@ -0,0 +1,14 @@ +PHP_VERSION=8.4 +PHP_API=20240924 +PHP_REDIS_VERSION=6.3.0 +PHP_SWOOLE_VERSION=v6.2.0 +PHP_IMAGICK_VERSION=3.8.1 +PHP_YAML_VERSION=2.3.0 +PHP_MAXMINDDB_VERSION=v1.12.0 +PHP_SCRYPT_VERSION=2.0.1 +PHP_ZSTD_VERSION=0.14.0 +PHP_BROTLI_VERSION=0.15.0 +PHP_SNAPPY_VERSION=0.2.2 +PHP_LZ4_VERSION=0.4.4 +PHP_XDEBUG_VERSION=3.5.1 +PHP_MONGO_VERSION=2.2.1 diff --git a/versions/8.5.env b/versions/8.5.env new file mode 100644 index 0000000..d63d4fc --- /dev/null +++ b/versions/8.5.env @@ -0,0 +1,14 @@ +PHP_VERSION=8.5 +PHP_API=20250925 +PHP_REDIS_VERSION=6.3.0 +PHP_SWOOLE_VERSION=v6.2.0 +PHP_IMAGICK_VERSION=3.8.1 +PHP_YAML_VERSION=2.3.0 +PHP_MAXMINDDB_VERSION=v1.12.0 +PHP_SCRYPT_VERSION=2.0.1 +PHP_ZSTD_VERSION=d6d26eb805058fc672686715a7b5e39d8f65dd36 +PHP_BROTLI_VERSION=0.18.3 +PHP_SNAPPY_VERSION=ddc8b58d8892593695a17c2b83d72ba3e9f41f64 +PHP_LZ4_VERSION=bf27b2c13922b6fbeb2eac5251be4e8a95d01e36 +PHP_XDEBUG_VERSION=3.5.1 +PHP_MONGO_VERSION=2.2.1