From e539458d17724eaf47518b968fd255657e6512e6 Mon Sep 17 00:00:00 2001 From: loks0n <22452787+loks0n@users.noreply.github.com> Date: Wed, 16 Sep 2026 18:25:50 +0100 Subject: [PATCH] feat: add the igbinary extension Appwrite is moving its Redis cache payloads from JSON to igbinary through utopia-php/cache 5.1's Igbinary codec, which needs the extension in the image. igbinary 3.2.17RC1 is the first tag that builds on PHP 8.5 and no final 3.2.17 exists yet, so the commit is inlined in the build stage instead of catalogued for the weekly updater, which only understands x.y.z pins. Move it into the catalog once igbinary tags a final release. Co-Authored-By: Claude Fable 5.1 --- CHANGES.md | 1 + Dockerfile | 19 +++++++++++++++++++ tests.yaml | 1 + 3 files changed, 21 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 70beb16..2c273ef 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -9,6 +9,7 @@ ### Add +* The `igbinary` extension, so Appwrite can store cache entries as binary payloads through the `Igbinary` codec in `utopia-php/cache` instead of JSON. * Weekly dependency automation (`.github/workflows/dependencies.yml`). A scheduled job resolves the newest upstream release for every pinned Dockerfile source, rewrites the pins, opens a pull request, waits for the exact CI runs for that head, approves and merges it, then tags, builds, and publishes the release. A `recover` step resumes a run that died between merge and publish, so a half-finished release is completed rather than duplicated. * PHP automation domain under `.github/scripts` — `Dependency` (catalog, resolvers, Dockerfile pin rewriting, reporting), `Automation` (release orchestration, version selection, merge and target validation, recovery), `Command`, and `Parity`. Entry points are `bin/dependencies.php`, `bin/orchestrator.php`, and `bin/parity.php`. * Composer tooling for the automation: `lint` (Pint), `check` (PHPStan), `test` (PHPUnit), `parity` (asserts every source class has covering tests), and `verify` to run all four. CI runs `composer verify` before touching any dependency. diff --git a/Dockerfile b/Dockerfile index 5e42bdd..75c716e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -159,6 +159,23 @@ RUN \ cp $(php-config --extension-dir)/brotli.so /artifacts/ && \ strip /artifacts/brotli.so +# igbinary 3.2.17RC1 is the first tag that builds on PHP 8.5, and no final +# 3.2.17 exists yet. The dependency updater only understands x.y.z pins, so the +# commit is inlined here rather than declared as PHP_IGBINARY_VERSION/COMMIT; +# move it into the catalog (.github/scripts/src/Dependency/Catalog.php) once +# igbinary tags a final release. +FROM compile AS igbinary +RUN \ + git init igbinary && \ + cd igbinary && \ + git fetch --depth 1 https://github.com/igbinary/igbinary.git edda7101adf583df047d028a154abf3bf04ced61 && \ + git checkout FETCH_HEAD && \ + phpize && \ + ./configure && \ + make -j"$(nproc)" && make install && \ + cp $(php-config --extension-dir)/igbinary.so /artifacts/ && \ + strip /artifacts/igbinary.so + FROM compile AS lz4 RUN \ git init lz4 && \ @@ -303,6 +320,7 @@ WORKDIR /usr/src/code COPY --from=core-extensions /artifacts/ /tmp/exts/ COPY --from=brotli /artifacts/ /tmp/exts/ +COPY --from=igbinary /artifacts/ /tmp/exts/ COPY --from=imagick /artifacts/ /tmp/exts/ COPY --from=lz4 /artifacts/ /tmp/exts/ COPY --from=maxmind /artifacts/ /tmp/exts/ @@ -320,6 +338,7 @@ RUN cp /tmp/exts/*.so $(php-config --extension-dir)/ && \ docker-php-ext-enable \ brotli \ gd \ + igbinary \ imagick \ intl \ lz4 \ diff --git a/tests.yaml b/tests.yaml index 9b6cce0..e06b8fe 100644 --- a/tests.yaml +++ b/tests.yaml @@ -44,6 +44,7 @@ commandTests: - gd - hash - iconv + - igbinary - imagick - intl - json