From 90ceb78eda26928ecb4280eb29a4c62b984da435 Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Tue, 27 Oct 2026 20:26:51 +0100 Subject: [PATCH 1/3] ci: remove unused and temporary workflows --- .github/workflows/claude.yml | 37 --- .github/workflows/tmp-php-base-image.yml | 134 ----------- docker/tmp-php/Dockerfile | 275 ----------------------- docker/tmp-php/docker-php-entrypoint | 9 - docker/tmp-php/docker-php-ext-configure | 69 ------ docker/tmp-php/docker-php-ext-enable | 121 ---------- docker/tmp-php/docker-php-ext-install | 143 ------------ docker/tmp-php/docker-php-source | 34 --- 8 files changed, 822 deletions(-) delete mode 100644 .github/workflows/claude.yml delete mode 100644 .github/workflows/tmp-php-base-image.yml delete mode 100644 docker/tmp-php/Dockerfile delete mode 100755 docker/tmp-php/docker-php-entrypoint delete mode 100755 docker/tmp-php/docker-php-ext-configure delete mode 100755 docker/tmp-php/docker-php-ext-enable delete mode 100755 docker/tmp-php/docker-php-ext-install delete mode 100755 docker/tmp-php/docker-php-source diff --git a/.github/workflows/claude.yml b/.github/workflows/claude.yml deleted file mode 100644 index 2b8d50c0db..0000000000 --- a/.github/workflows/claude.yml +++ /dev/null @@ -1,37 +0,0 @@ -name: Claude Code - -on: - issue_comment: - types: [created] - pull_request_review_comment: - types: [created] - issues: - types: [opened, assigned] - pull_request_review: - types: [submitted] - -jobs: - claude: - if: | - (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) || - (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) || - (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) || - (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude'))) - runs-on: ubuntu-latest - permissions: - contents: write - pull-requests: write - issues: write - id-token: write - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - fetch-depth: 1 - - - name: Run Claude Code - id: claude - uses: anthropics/claude-code-action@v1 - with: - claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} - claude_args: '--model opus' diff --git a/.github/workflows/tmp-php-base-image.yml b/.github/workflows/tmp-php-base-image.yml deleted file mode 100644 index f8c1839e33..0000000000 --- a/.github/workflows/tmp-php-base-image.yml +++ /dev/null @@ -1,134 +0,0 @@ -# Temporary: builds PHP from the signed php.net release and rebuilds serversideup/php v4.5.1 on it for the 4.x security fixes. -# Delete this workflow and docker/tmp-php once 4.5 ships on serversideup/php v5. -name: TMP Build Patched PHP Base -run-name: tmp php ${{ inputs.php_version }} - -on: - workflow_dispatch: - inputs: - php_version: - description: Patched PHP 8.4 release, for example 8.4.27 - required: true - type: string - php_sha256: - description: SHA256 of php-.tar.xz from https://www.php.net/downloads.php - required: true - type: string - -permissions: - contents: read - packages: write - -concurrency: - group: tmp-php-base-image - cancel-in-progress: false - -env: - GITHUB_REGISTRY: ghcr.io - PHP_IMAGE: ghcr.io/coollabsio/php - BASE_IMAGE: ghcr.io/coollabsio/serversideup-php - # serversideup/docker-php v4.5.1 - SERVERSIDEUP_CONTEXT: https://github.com/serversideup/docker-php.git#92b16c9ee63bde4f75cdcc7ebe96aee36a896f88 - -jobs: - build: - strategy: - matrix: - include: - - arch: amd64 - platform: linux/amd64 - runner: ubuntu-24.04 - - arch: aarch64 - platform: linux/aarch64 - runner: ubuntu-24.04-arm - runs-on: ${{ matrix.runner }} - steps: - - name: Validate inputs - env: - PHP_VERSION: ${{ inputs.php_version }} - PHP_SHA256: ${{ inputs.php_sha256 }} - run: | - if [[ ! "${PHP_VERSION}" =~ ^8\.4\.[0-9]+$ ]]; then - echo "Unsupported PHP version: ${PHP_VERSION}" - exit 1 - fi - if [[ ! "${PHP_SHA256}" =~ ^[0-9a-f]{64}$ ]]; then - echo "Invalid SHA256: ${PHP_SHA256}" - exit 1 - fi - - - uses: actions/checkout@v5 - with: - persist-credentials: false - - - name: Login to ${{ env.GITHUB_REGISTRY }} - uses: docker/login-action@v3 - with: - registry: ${{ env.GITHUB_REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Build PHP from the signed release (${{ matrix.arch }}) - uses: docker/build-push-action@v6 - with: - context: docker/tmp-php - platforms: ${{ matrix.platform }} - push: true - build-args: | - PHP_VERSION=${{ inputs.php_version }} - PHP_SHA256=${{ inputs.php_sha256 }} - tags: ${{ env.PHP_IMAGE }}:${{ inputs.php_version }}-fpm-alpine3.24-${{ matrix.arch }} - - - name: Rebuild serversideup/php v4.5.1 on it (${{ matrix.arch }}) - uses: docker/build-push-action@v6 - with: - context: ${{ env.SERVERSIDEUP_CONTEXT }} - file: src/variations/fpm-nginx/Dockerfile - platforms: ${{ matrix.platform }} - push: true - build-args: | - BASE_IMAGE=${{ env.PHP_IMAGE }}:${{ inputs.php_version }}-fpm-alpine3.24-${{ matrix.arch }} - PHP_VERSION=8.4 - BASE_OS_VERSION=alpine3.24 - PHP_VARIATION=fpm-nginx - NGINX_VERSION=1.30.4-r1 - REPOSITORY_BUILD_VERSION=v4.5.1-php${{ inputs.php_version }} - tags: ${{ env.BASE_IMAGE }}:${{ inputs.php_version }}-fpm-nginx-alpine-v4.5.1-${{ matrix.arch }} - - - name: Check the PHP version (${{ matrix.arch }}) - env: - IMAGE: ${{ env.BASE_IMAGE }}:${{ inputs.php_version }}-fpm-nginx-alpine-v4.5.1-${{ matrix.arch }} - PHP_VERSION: ${{ inputs.php_version }} - run: | - BUILT_VERSION=$(docker run --rm --entrypoint php "${IMAGE}" -r 'echo PHP_VERSION;') - if [ "${BUILT_VERSION}" != "${PHP_VERSION}" ]; then - echo "The base image runs PHP ${BUILT_VERSION}, expected ${PHP_VERSION}." - exit 1 - fi - - publish: - needs: build - runs-on: ubuntu-24.04 - steps: - - uses: docker/setup-buildx-action@v3 - - - name: Login to ${{ env.GITHUB_REGISTRY }} - uses: docker/login-action@v3 - with: - registry: ${{ env.GITHUB_REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Publish multi-arch images - env: - PHP_VERSION: ${{ inputs.php_version }} - run: | - docker buildx imagetools create \ - "${PHP_IMAGE}:${PHP_VERSION}-fpm-alpine3.24-amd64" \ - "${PHP_IMAGE}:${PHP_VERSION}-fpm-alpine3.24-aarch64" \ - --tag "${PHP_IMAGE}:${PHP_VERSION}-fpm-alpine3.24" - docker buildx imagetools create \ - "${BASE_IMAGE}:${PHP_VERSION}-fpm-nginx-alpine-v4.5.1-amd64" \ - "${BASE_IMAGE}:${PHP_VERSION}-fpm-nginx-alpine-v4.5.1-aarch64" \ - --tag "${BASE_IMAGE}:${PHP_VERSION}-fpm-nginx-alpine-v4.5.1" \ - --tag "${BASE_IMAGE}:8.4-fpm-nginx-alpine-v4.5.1-hotfix" diff --git a/docker/tmp-php/Dockerfile b/docker/tmp-php/Dockerfile deleted file mode 100644 index 0be8e996dd..0000000000 --- a/docker/tmp-php/Dockerfile +++ /dev/null @@ -1,275 +0,0 @@ -# Temporary copy of docker-library/php 8.4/alpine3.24/fpm (9dac3d0), only the PHP release and its SHA256 are build arguments -# -# NOTE: THIS DOCKERFILE IS GENERATED VIA "apply-templates.sh" -# -# PLEASE DO NOT EDIT IT DIRECTLY. -# - -FROM alpine:3.24 - -# dependencies required for running "phpize" -# these get automatically installed and removed by "docker-php-ext-*" (unless they're already installed) -ENV PHPIZE_DEPS \ - autoconf \ - dpkg-dev dpkg \ - file \ - g++ \ - gcc \ - libc-dev \ - make \ - pkgconf \ - re2c - -# persistent / runtime deps -RUN apk add --no-cache \ - ca-certificates \ - curl \ - openssl \ - tar \ - xz - -# ensure www-data user exists -RUN set -eux; \ - adduser -u 82 -D -S -G www-data www-data -# 82 is the standard uid/gid for "www-data" in Alpine -# https://git.alpinelinux.org/aports/tree/main/apache2/apache2.pre-install?h=3.14-stable -# https://git.alpinelinux.org/aports/tree/main/lighttpd/lighttpd.pre-install?h=3.14-stable -# https://git.alpinelinux.org/aports/tree/main/nginx/nginx.pre-install?h=3.14-stable - -ENV PHP_INI_DIR /usr/local/etc/php -RUN set -eux; \ - mkdir -p "$PHP_INI_DIR/conf.d"; \ -# allow running as an arbitrary user (https://github.com/docker-library/php/issues/743) - [ ! -d /var/www/html ]; \ - mkdir -p /var/www/html; \ - chown www-data:www-data /var/www/html; \ - chmod 1777 /var/www/html - -# Apply stack smash protection to functions using local buffers and alloca() -# Make PHP's main executable position-independent (improves ASLR security mechanism, and has no performance impact on x86_64) -# Enable optimization (-O2) -# Enable linker optimization (this sorts the hash buckets to improve cache locality, and is non-default) -# https://github.com/docker-library/php/issues/272 -# -D_LARGEFILE_SOURCE and -D_FILE_OFFSET_BITS=64 (https://www.php.net/manual/en/intro.filesystem.php) -ENV PHP_CFLAGS="-fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" -ENV PHP_CPPFLAGS="$PHP_CFLAGS" -ENV PHP_LDFLAGS="-Wl,-O1 -pie" - -ENV GPG_KEYS AFD8691FDAEDF03BDF6E460563F15A9B715376CA 9D7F99A0CB8F05C8A6958D6256A97AF7600A39A6 0616E93D95AF471243E26761770426E17EBBB3DD - -ARG PHP_VERSION -ARG PHP_SHA256 -ENV PHP_VERSION ${PHP_VERSION} -ENV PHP_URL="https://www.php.net/distributions/php-${PHP_VERSION}.tar.xz" PHP_ASC_URL="https://www.php.net/distributions/php-${PHP_VERSION}.tar.xz.asc" -ENV PHP_SHA256=${PHP_SHA256} - -RUN set -eux; \ - \ - apk add --no-cache --virtual .fetch-deps gnupg; \ - \ - mkdir -p /usr/src; \ - cd /usr/src; \ - \ - curl -fsSL -o php.tar.xz "$PHP_URL"; \ - \ - if [ -n "$PHP_SHA256" ]; then \ - echo "$PHP_SHA256 *php.tar.xz" | sha256sum -c -; \ - fi; \ - \ - curl -fsSL -o php.tar.xz.asc "$PHP_ASC_URL"; \ - export GNUPGHOME="$(mktemp -d)"; \ - for key in $GPG_KEYS; do \ - gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$key"; \ - done; \ - gpg --batch --verify php.tar.xz.asc php.tar.xz; \ - gpgconf --kill all; \ - rm -rf "$GNUPGHOME"; \ - \ - apk del --no-network .fetch-deps - -COPY docker-php-source /usr/local/bin/ - -RUN set -eux; \ - apk add --no-cache --virtual .build-deps \ - $PHPIZE_DEPS \ - argon2-dev \ - coreutils \ - curl-dev \ - gnu-libiconv-dev \ - libsodium-dev \ - libxml2-dev \ - linux-headers \ - oniguruma-dev \ - openssl-dev \ - readline-dev \ - sqlite-dev \ - ; \ - \ -# make sure musl's iconv doesn't get used (https://www.php.net/manual/en/intro.iconv.php) - rm -vf /usr/include/iconv.h; \ - \ - export \ - CFLAGS="$PHP_CFLAGS" \ - CPPFLAGS="$PHP_CPPFLAGS" \ - LDFLAGS="$PHP_LDFLAGS" \ -# https://github.com/php/php-src/blob/d6299206dd828382753453befd1b915491b741c6/configure.ac#L1496-L1511 - PHP_BUILD_PROVIDER='https://github.com/docker-library/php' \ - PHP_UNAME='Linux - Docker' \ - ; \ - docker-php-source extract; \ - cd /usr/src/php; \ - gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; \ - case "$gnuArch" in \ - 'i686-linux-'*) \ - # php zend jit assumes SSE registers, xmm0-7, are available (and "Pentium4"/SSE2 is a reasonable baseline) - # https://github.com/php/php-src/pull/22832 - # so, allow it and use SSE/SSE2 floating-point unit instead of the legacy stack - export \ - CFLAGS="$CFLAGS -msse2 -mfpmath=sse" \ - CPPFLAGS="$CPPFLAGS -msse2 -mfpmath=sse" \ - ; \ - ;; \ - esac; \ - test "$PHP_INI_DIR" != "${PHP_INI_DIR%/php}"; \ - ./configure \ - --build="$gnuArch" \ - --sysconfdir="${PHP_INI_DIR%/php}" \ - --with-config-file-path="$PHP_INI_DIR" \ - --with-config-file-scan-dir="$PHP_INI_DIR/conf.d" \ - \ -# make sure invalid --configure-flags are fatal errors instead of just warnings - --enable-option-checking=fatal \ - \ -# https://github.com/docker-library/php/issues/439 - --with-mhash \ - \ -# https://github.com/docker-library/php/issues/822 - --with-pic \ - \ -# --enable-mbstring is included here because otherwise there's no way to get pecl to use it properly (see https://github.com/docker-library/php/issues/195) - --enable-mbstring \ -# --enable-mysqlnd is included here because it's harder to compile after the fact than extensions are (since it's a plugin for several extensions, not an extension in itself) - --enable-mysqlnd \ -# https://wiki.php.net/rfc/argon2_password_hash - --with-password-argon2 \ -# https://wiki.php.net/rfc/libsodium - --with-sodium=shared \ -# always build against system sqlite3 (https://github.com/php/php-src/commit/6083a387a81dbbd66d6316a3a12a63f06d5f7109) - --with-pdo-sqlite=/usr \ - --with-sqlite3=/usr \ - \ - --with-curl \ - --with-iconv=/usr \ - --with-openssl \ - --with-readline \ - --with-zlib \ - \ -# https://github.com/bwoebi/phpdbg-docs/issues/1#issuecomment-163872806 ("phpdbg is primarily a CLI debugger, and is not suitable for debugging an fpm stack.") - --disable-phpdbg \ - \ -# in PHP 7.4+, the pecl/pear installers are officially deprecated (requiring an explicit "--with-pear") - --with-pear \ - \ - \ - --disable-cgi \ - \ - --enable-fpm \ - --with-fpm-user=www-data \ - --with-fpm-group=www-data \ - ; \ - make -j "$(nproc)"; \ - find -type f -name '*.a' -delete; \ - make install; \ - find \ - /usr/local \ - -type f \ - -perm '/0111' \ - -exec sh -euxc ' \ - strip --strip-all "$@" || : \ - ' -- '{}' + \ - ; \ - make clean; \ - \ -# https://github.com/docker-library/php/issues/692 (copy default example "php.ini" files somewhere easily discoverable) - cp -v php.ini-* "$PHP_INI_DIR/"; \ - \ - cd /; \ - docker-php-source delete; \ - \ - runDeps="$( \ - scanelf --needed --nobanner --format '%n#p' --recursive /usr/local \ - | tr ',' '\n' \ - | sort -u \ - | awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \ - )"; \ - apk add --no-cache $runDeps; \ - \ - apk del --no-network .build-deps; \ - \ -# update pecl channel definitions https://github.com/docker-library/php/issues/443 - pecl update-channels; \ - rm -rf /tmp/pear ~/.pearrc; \ - \ -# smoke test - php --version - -COPY docker-php-ext-* docker-php-entrypoint /usr/local/bin/ - -# enable OPcache by default (https://wiki.php.net/rfc/make_opcache_required) -RUN docker-php-ext-enable opcache - -# sodium was built as a shared module (so that it can be replaced later if so desired), so let's enable it too (https://github.com/docker-library/php/issues/598) -RUN docker-php-ext-enable sodium - -ENTRYPOINT ["docker-php-entrypoint"] -WORKDIR /var/www/html - -RUN set -eux; \ - cd "${PHP_INI_DIR%/php}"; \ - \ - cp -v php-fpm.conf.default php-fpm.conf; \ - cp -v php-fpm.d/www.conf.default php-fpm.d/www.conf; \ - \ - # comment out localhost-only listen address - grep -E '^listen = 127.0.0.1:9000' php-fpm.d/www.conf; \ - sed -ri 's/^(listen = 127.0.0.1:9000)/;\1/' php-fpm.d/www.conf; \ - grep -E '^;listen = 127.0.0.1:9000' php-fpm.d/www.conf; \ - \ - { \ - echo '[global]'; \ - echo 'error_log = /proc/self/fd/2'; \ - echo; echo '; https://github.com/docker-library/php/pull/725#issuecomment-443540114'; echo 'log_limit = 8192'; \ - echo; \ - echo '[www]'; \ - echo '; php-fpm closes STDOUT on startup, so sending logs to /proc/self/fd/1 does not work.'; \ - echo '; https://bugs.php.net/bug.php?id=73886'; \ - echo 'access.log = /proc/self/fd/2'; \ - echo; \ - echo 'clear_env = no'; \ - echo; \ - echo '; Ensure worker stdout and stderr are sent to the main error log.'; \ - echo 'catch_workers_output = yes'; \ - echo 'decorate_workers_output = no'; \ - echo; \ - echo '; default listen address for easy override in later php-fpm.d/*.conf files'; \ - echo 'listen = 9000'; \ - } | tee php-fpm.d/docker.conf; \ - { \ - echo '[global]'; \ - echo 'daemonize = no'; \ - echo; \ - echo '; the [www] ini section below is for backwards compatibility and will be removed in 8.6+'; \ - echo '[www]'; \ - } | tee php-fpm.d/zz-docker.conf; \ - mkdir -p "$PHP_INI_DIR/conf.d"; \ - { \ - echo '; https://github.com/docker-library/php/issues/878#issuecomment-938595965'; \ - echo 'fastcgi.logging = Off'; \ - } > "$PHP_INI_DIR/conf.d/docker-fpm.ini" - -# Override stop signal to stop process gracefully -# https://github.com/php/php-src/blob/17baa87faddc2550def3ae7314236826bc1b1398/sapi/fpm/php-fpm.8.in#L163 -STOPSIGNAL SIGQUIT - -EXPOSE 9000 -CMD ["php-fpm"] diff --git a/docker/tmp-php/docker-php-entrypoint b/docker/tmp-php/docker-php-entrypoint deleted file mode 100755 index 86343d8038..0000000000 --- a/docker/tmp-php/docker-php-entrypoint +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh -set -e - -# first arg is `-f` or `--some-option` -if [ "${1#-}" != "$1" ]; then - set -- php-fpm "$@" -fi - -exec "$@" diff --git a/docker/tmp-php/docker-php-ext-configure b/docker/tmp-php/docker-php-ext-configure deleted file mode 100755 index 34fc1337d5..0000000000 --- a/docker/tmp-php/docker-php-ext-configure +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/sh -set -e - -# prefer user supplied CFLAGS, but default to our PHP_CFLAGS -: ${CFLAGS:=$PHP_CFLAGS} -: ${CPPFLAGS:=$PHP_CPPFLAGS} -: ${LDFLAGS:=$PHP_LDFLAGS} -export CFLAGS CPPFLAGS LDFLAGS - -srcExists= -if [ -d /usr/src/php ]; then - srcExists=1 -fi -docker-php-source extract -if [ -z "$srcExists" ]; then - touch /usr/src/php/.docker-delete-me -fi - -cd /usr/src/php/ext - -usage() { - echo "usage: $0 ext-name [configure flags]" - echo " ie: $0 gd --with-jpeg-dir=/usr/local/something" - echo - echo 'Possible values for ext-name:' - find . \ - -mindepth 2 \ - -maxdepth 2 \ - -type f \ - -name 'config.m4' \ - | xargs -n1 dirname \ - | xargs -n1 basename \ - | sort \ - | xargs - echo - echo 'Some of the above modules are already compiled into PHP; please check' - echo 'the output of "php -i" to see which modules are already loaded.' -} - -ext="$1" -if [ -z "$ext" ] || [ ! -d "$ext" ]; then - usage >&2 - exit 1 -fi -shift - -pm='unknown' -if [ -e /lib/apk/db/installed ]; then - pm='apk' -fi - -if [ "$pm" = 'apk' ]; then - if \ - [ -n "$PHPIZE_DEPS" ] \ - && ! apk info --installed .phpize-deps > /dev/null \ - && ! apk info --installed .phpize-deps-configure > /dev/null \ - ; then - apk add --no-cache --virtual .phpize-deps-configure $PHPIZE_DEPS - fi -fi - -if command -v dpkg-architecture > /dev/null; then - gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" - set -- --build="$gnuArch" "$@" -fi - -cd "$ext" -phpize -./configure --enable-option-checking=fatal "$@" diff --git a/docker/tmp-php/docker-php-ext-enable b/docker/tmp-php/docker-php-ext-enable deleted file mode 100755 index 41d20bbe3f..0000000000 --- a/docker/tmp-php/docker-php-ext-enable +++ /dev/null @@ -1,121 +0,0 @@ -#!/bin/sh -set -e - -extDir="$(php -d 'display_errors=stderr' -r 'echo ini_get("extension_dir");')" -cd "$extDir" - -usage() { - echo "usage: $0 [options] module-name [module-name ...]" - echo " ie: $0 gd mysqli" - echo " $0 pdo pdo_mysql" - echo " $0 --ini-name 0-apc.ini apcu apc" - echo - echo 'Possible values for module-name:' - find -maxdepth 1 \ - -type f \ - -name '*.so' \ - -exec basename '{}' ';' \ - | sort \ - | xargs - echo - echo 'Some of the above modules are already compiled into PHP; please check' - echo 'the output of "php -i" to see which modules are already loaded.' -} - -opts="$(getopt -o 'h?' --long 'help,ini-name:' -- "$@" || { usage >&2 && false; })" -eval set -- "$opts" - -iniName= -while true; do - flag="$1" - shift - case "$flag" in - --help|-h|'-?') usage && exit 0 ;; - --ini-name) iniName="$1" && shift ;; - --) break ;; - *) - { - echo "error: unknown flag: $flag" - usage - } >&2 - exit 1 - ;; - esac -done - -modules= -for module; do - if [ -z "$module" ]; then - continue - fi - if ! [ -f "$module" ] && ! [ -f "$module.so" ]; then - echo >&2 "error: '$module' does not exist" - echo >&2 - usage >&2 - exit 1 - fi - modules="$modules $module" -done - -if [ -z "$modules" ]; then - usage >&2 - exit 1 -fi - -pm='unknown' -if [ -e /lib/apk/db/installed ]; then - pm='apk' -fi - -apkDel= -if [ "$pm" = 'apk' ]; then - if \ - [ -n "$PHPIZE_DEPS" ] \ - && ! apk info --installed .phpize-deps > /dev/null \ - && ! apk info --installed .phpize-deps-configure > /dev/null \ - ; then - apk add --no-cache --virtual '.docker-php-ext-enable-deps' binutils - apkDel='.docker-php-ext-enable-deps' - fi -fi - -for module in $modules; do - moduleFile="$module" - if [ -f "$module.so" ] && ! [ -f "$module" ]; then - moduleFile="$module.so" - fi - if readelf --wide --syms "$moduleFile" | grep -q ' zend_extension_entry$'; then - # https://wiki.php.net/internals/extensions#loading_zend_extensions - line="zend_extension=$module" - else - line="extension=$module" - fi - - ext="$(basename "$module")" - ext="${ext%.*}" - if php -d 'display_errors=stderr' -r 'exit(extension_loaded("'"$ext"'") ? 0 : 1);'; then - # this isn't perfect, but it's better than nothing - # (for example, 'opcache.so' presents inside PHP as 'Zend OPcache', not 'opcache') - echo >&2 - echo >&2 "warning: $ext ($module) is already loaded!" - echo >&2 - continue - fi - - case "$iniName" in - /*) - # allow an absolute path - ini="$iniName" - ;; - *) - ini="$PHP_INI_DIR/conf.d/${iniName:-"docker-php-ext-$ext.ini"}" - ;; - esac - if ! grep -qFx -e "$line" -e "$line.so" "$ini" 2>/dev/null; then - echo "$line" >> "$ini" - fi -done - -if [ "$pm" = 'apk' ] && [ -n "$apkDel" ]; then - apk del --no-network $apkDel -fi diff --git a/docker/tmp-php/docker-php-ext-install b/docker/tmp-php/docker-php-ext-install deleted file mode 100755 index fbf44849c0..0000000000 --- a/docker/tmp-php/docker-php-ext-install +++ /dev/null @@ -1,143 +0,0 @@ -#!/bin/sh -set -e - -# prefer user supplied CFLAGS, but default to our PHP_CFLAGS -: ${CFLAGS:=$PHP_CFLAGS} -: ${CPPFLAGS:=$PHP_CPPFLAGS} -: ${LDFLAGS:=$PHP_LDFLAGS} -export CFLAGS CPPFLAGS LDFLAGS - -srcExists= -if [ -d /usr/src/php ]; then - srcExists=1 -fi -docker-php-source extract -if [ -z "$srcExists" ]; then - touch /usr/src/php/.docker-delete-me -fi - -cd /usr/src/php/ext - -usage() { - echo "usage: $0 [-jN] [--ini-name file.ini] ext-name [ext-name ...]" - echo " ie: $0 gd mysqli" - echo " $0 pdo pdo_mysql" - echo " $0 -j5 gd mbstring mysqli pdo pdo_mysql shmop" - echo - echo 'if custom ./configure arguments are necessary, see docker-php-ext-configure' - echo - echo 'Possible values for ext-name:' - find . \ - -mindepth 2 \ - -maxdepth 2 \ - -type f \ - -name 'config.m4' \ - | xargs -n1 dirname \ - | xargs -n1 basename \ - | sort \ - | xargs - echo - echo 'Some of the above modules are already compiled into PHP; please check' - echo 'the output of "php -i" to see which modules are already loaded.' -} - -opts="$(getopt -o 'h?j:' --long 'help,ini-name:,jobs:' -- "$@" || { usage >&2 && false; })" -eval set -- "$opts" - -j=1 -iniName= -while true; do - flag="$1" - shift - case "$flag" in - --help|-h|'-?') usage && exit 0 ;; - --ini-name) iniName="$1" && shift ;; - --jobs|-j) j="$1" && shift ;; - --) break ;; - *) - { - echo "error: unknown flag: $flag" - usage - } >&2 - exit 1 - ;; - esac -done - -exts= -for ext; do - if [ -z "$ext" ]; then - continue - fi - if [ ! -d "$ext" ]; then - echo >&2 "error: $PWD/$ext does not exist" - echo >&2 - usage >&2 - exit 1 - fi - exts="$exts $ext" -done - -if [ -z "$exts" ]; then - usage >&2 - exit 1 -fi - -pm='unknown' -if [ -e /lib/apk/db/installed ]; then - pm='apk' -fi - -apkDel= -if [ "$pm" = 'apk' ]; then - if [ -n "$PHPIZE_DEPS" ]; then - if apk info --installed .phpize-deps-configure > /dev/null; then - apkDel='.phpize-deps-configure' - elif ! apk info --installed .phpize-deps > /dev/null; then - apk add --no-cache --virtual .phpize-deps $PHPIZE_DEPS - apkDel='.phpize-deps' - fi - fi -fi - -popDir="$PWD" -for ext in $exts; do - cd "$ext" - - [ -e Makefile ] || docker-php-ext-configure "$ext" - - make -j"$j" - - if ! php -n -d 'display_errors=stderr' -r 'exit(ZEND_DEBUG_BUILD ? 0 : 1);' > /dev/null; then - # only "strip" modules if we aren't using a debug build of PHP - # (none of our builds are debug builds, but PHP might be recompiled with "--enable-debug" configure option) - # https://github.com/docker-library/php/issues/1268 - - find modules \ - -maxdepth 1 \ - -name '*.so' \ - -exec sh -euxc ' \ - strip --strip-all "$@" || : - ' -- '{}' + - fi - - make -j"$j" install - - find modules \ - -maxdepth 1 \ - -name '*.so' \ - -exec basename '{}' '.so' ';' \ - | xargs -r docker-php-ext-enable ${iniName:+--ini-name "$iniName"} - - make -j"$j" clean - - cd "$popDir" -done - -if [ "$pm" = 'apk' ] && [ -n "$apkDel" ]; then - apk del --no-network $apkDel -fi - -if [ -e /usr/src/php/.docker-delete-me ]; then - docker-php-source delete -fi diff --git a/docker/tmp-php/docker-php-source b/docker/tmp-php/docker-php-source deleted file mode 100755 index 9033d243de..0000000000 --- a/docker/tmp-php/docker-php-source +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/sh -set -e - -dir=/usr/src/php - -usage() { - echo "usage: $0 COMMAND" - echo - echo "Manage php source tarball lifecycle." - echo - echo "Commands:" - echo " extract extract php source tarball into directory $dir if not already done." - echo " delete delete extracted php source located into $dir if not already done." - echo -} - -case "$1" in - extract) - mkdir -p "$dir" - if [ ! -f "$dir/.docker-extracted" ]; then - tar -Jxf /usr/src/php.tar.xz -C "$dir" --strip-components=1 - touch "$dir/.docker-extracted" - fi - ;; - - delete) - rm -rf "$dir" - ;; - - *) - usage - exit 1 - ;; -esac From 8d1776bdcf4e45269e25daf1370f097bb0c9ea54 Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Tue, 27 Oct 2026 20:26:51 +0100 Subject: [PATCH 2/3] chore: remove Windows support - Removes coolify-testing-host.yml too, it published the testing host to Docker Hub for docker-compose.windows.yml alone, the development setup builds it locally --- .env.windows-docker-desktop.example | 14 --- .github/workflows/coolify-testing-host.yml | 80 ------------- app/Console/Kernel.php | 2 +- app/Helpers/SshMultiplexingHelper.php | 2 +- config/constants.php | 1 - database/seeders/ProductionSeeder.php | 59 +--------- docker-compose.windows.yml | 110 ------------------ tests/Feature/PersistentImageStorageTest.php | 5 - .../ReverbAndTerminalPackagingTest.php | 17 --- tests/Unit/ProductionImageWorkflowTest.php | 15 +-- 10 files changed, 5 insertions(+), 300 deletions(-) delete mode 100644 .env.windows-docker-desktop.example delete mode 100644 .github/workflows/coolify-testing-host.yml delete mode 100644 docker-compose.windows.yml diff --git a/.env.windows-docker-desktop.example b/.env.windows-docker-desktop.example deleted file mode 100644 index e97249505d..0000000000 --- a/.env.windows-docker-desktop.example +++ /dev/null @@ -1,14 +0,0 @@ -IS_WINDOWS_DOCKER_DESKTOP=true - -APP_ID=coolify-windows-docker-desktop -APP_NAME=Coolify -APP_KEY=base64:ssTlCmrIE/q7whnKMvT6DwURikg69COzGsAwFVROm80= - -DB_USERNAME=coolify -DB_PASSWORD=coolify -REDIS_PASSWORD=coolify - -PUSHER_APP_ID=coolify -PUSHER_APP_KEY=coolify -PUSHER_APP_SECRET=coolify -PUSHER_BACKEND_PORT=6001 diff --git a/.github/workflows/coolify-testing-host.yml b/.github/workflows/coolify-testing-host.yml deleted file mode 100644 index 7f5fa156fb..0000000000 --- a/.github/workflows/coolify-testing-host.yml +++ /dev/null @@ -1,80 +0,0 @@ -name: Coolify Testing Host - -on: - push: - branches: [ "next" ] - paths: - - .github/workflows/coolify-testing-host.yml - - docker/testing-host/Dockerfile - -permissions: - contents: read - -env: - DOCKER_REGISTRY: docker.io - IMAGE_NAME: "coollabsio/coolify-testing-host" - -jobs: - build-push: - strategy: - matrix: - include: - - arch: amd64 - platform: linux/amd64 - runner: ubuntu-24.04 - - arch: aarch64 - platform: linux/aarch64 - runner: ubuntu-24.04-arm - runs-on: ${{ matrix.runner }} - steps: - - uses: actions/checkout@v5 - with: - persist-credentials: false - - - name: Login to ${{ env.DOCKER_REGISTRY }} - uses: docker/login-action@v3 - with: - registry: ${{ env.DOCKER_REGISTRY }} - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Build and Push Image (${{ matrix.arch }}) - uses: docker/build-push-action@v6 - with: - context: . - file: docker/testing-host/Dockerfile - platforms: ${{ matrix.platform }} - push: true - tags: | - ${{ env.DOCKER_REGISTRY }}/${{ env.IMAGE_NAME }}:latest-${{ matrix.arch }} - labels: | - coolify.managed=true - - merge-manifest: - runs-on: ubuntu-24.04 - needs: build-push - steps: - - uses: actions/checkout@v5 - with: - persist-credentials: false - - - uses: docker/setup-buildx-action@v3 - - - name: Login to ${{ env.DOCKER_REGISTRY }} - uses: docker/login-action@v3 - with: - registry: ${{ env.DOCKER_REGISTRY }} - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Create & publish manifest on ${{ env.DOCKER_REGISTRY }} - run: | - docker buildx imagetools create \ - ${{ env.DOCKER_REGISTRY }}/${{ env.IMAGE_NAME }}:latest-amd64 \ - ${{ env.DOCKER_REGISTRY }}/${{ env.IMAGE_NAME }}:latest-aarch64 \ - --tag ${{ env.DOCKER_REGISTRY }}/${{ env.IMAGE_NAME }}:latest - - - uses: sarisia/actions-status-discord@v1 - if: always() - with: - webhook: ${{ secrets.DISCORD_WEBHOOK_DEV_RELEASE_CHANNEL }} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index cd63d3502f..92e8cf88a3 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -51,7 +51,7 @@ class Kernel extends ConsoleKernel $this->scheduleInstance->call(fn () => app(CleanupStaleMultiplexedConnections::class)->handle()) ->name('cleanup:ssh-mux') ->hourly() - ->when(fn () => config('constants.ssh.mux_enabled') && ! config('constants.coolify.is_windows_docker_desktop')); + ->when(fn () => config('constants.ssh.mux_enabled')); // Every cloud node reads its own versions.json, so each node refreshes it (no onOneServer). $this->scheduleInstance->call(fn () => refresh_versions_file()) ->name('versions:refresh-local') diff --git a/app/Helpers/SshMultiplexingHelper.php b/app/Helpers/SshMultiplexingHelper.php index f873446407..ffa3c96310 100644 --- a/app/Helpers/SshMultiplexingHelper.php +++ b/app/Helpers/SshMultiplexingHelper.php @@ -463,7 +463,7 @@ class SshMultiplexingHelper private static function isMultiplexingEnabled(): bool { - return config('constants.ssh.mux_enabled') && ! config('constants.coolify.is_windows_docker_desktop'); + return config('constants.ssh.mux_enabled'); } private static function validateSshKey(PrivateKey $privateKey): void diff --git a/config/constants.php b/config/constants.php index 38c7ee287a..4217921652 100644 --- a/config/constants.php +++ b/config/constants.php @@ -22,7 +22,6 @@ return [ 'dev_seed_ip' => env('DEV_SEED_IP') ?: '127.0.0.1', 'registry_url' => env('REGISTRY_URL', 'docker.io'), 'helper_image' => env('HELPER_IMAGE', env('REGISTRY_URL', 'docker.io').'/coollabsio/coolify-helper'), - 'is_windows_docker_desktop' => env('IS_WINDOWS_DOCKER_DESKTOP', false), 'cdn_url' => env('CDN_URL', 'https://cdn.coollabs.io'), 'versions_url' => env('VERSIONS_URL', env('CDN_URL', 'https://cdn.coollabs.io').'/coolify/versions.json'), 'upgrade_script_url' => env('UPGRADE_SCRIPT_URL', env('CDN_URL', 'https://cdn.coollabs.io').'/coolify/upgrade.sh'), diff --git a/database/seeders/ProductionSeeder.php b/database/seeders/ProductionSeeder.php index f1c1848b53..324b209d94 100644 --- a/database/seeders/ProductionSeeder.php +++ b/database/seeders/ProductionSeeder.php @@ -82,7 +82,7 @@ class ProductionSeeder extends Seeder ]); } - if (! isCloud() && config('constants.coolify.is_windows_docker_desktop') == false) { + if (! isCloud()) { $coolify_key_name = '@host.docker.internal'; $ssh_keys_directory = Storage::disk('ssh-keys')->files(); $coolify_key = collect($ssh_keys_directory)->firstWhere(fn ($item) => str($item)->contains($coolify_key_name)); @@ -156,63 +156,6 @@ class ProductionSeeder extends Seeder } } - if (config('constants.coolify.is_windows_docker_desktop')) { - PrivateKey::updateOrCreate( - [ - 'id' => 0, - 'team_id' => 0, - ], - [ - 'name' => 'Testing-host', - 'description' => 'This is a a docker container with SSH access', - 'private_key' => '-----BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW -QyNTUxOQAAACBbhpqHhqv6aI67Mj9abM3DVbmcfYhZAhC7ca4d9UCevAAAAJi/QySHv0Mk -hwAAAAtzc2gtZWQyNTUxOQAAACBbhpqHhqv6aI67Mj9abM3DVbmcfYhZAhC7ca4d9UCevA -AAAECBQw4jg1WRT2IGHMncCiZhURCts2s24HoDS0thHnnRKVuGmoeGq/pojrsyP1pszcNV -uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA== ------END OPENSSH PRIVATE KEY----- -', - ] - ); - if (Server::find(0) == null) { - $server_details = [ - 'id' => 0, - 'uuid' => 'coolify-testing-host', - 'name' => 'localhost', - 'description' => "This is the server where Coolify is running on. Don't delete this!", - 'user' => 'root', - 'ip' => 'coolify-testing-host', - 'team_id' => 0, - 'private_key_id' => 0, - ]; - $server_details['proxy'] = ServerMetadata::from([ - 'type' => ProxyTypes::TRAEFIK->value, - 'status' => ProxyStatus::EXITED->value, - 'last_saved_settings' => null, - 'last_applied_settings' => null, - ]); - $server = Server::create($server_details); - $server->settings->is_reachable = true; - $server->settings->is_usable = true; - $server->settings->save(); - } else { - $server = Server::find(0); - $server->settings->is_reachable = true; - $server->settings->is_usable = true; - $server->settings->save(); - } - - if (StandaloneDocker::find(0) == null) { - StandaloneDocker::create([ - 'id' => 0, - 'name' => 'localhost-coolify', - 'network' => 'coolify', - 'server_id' => 0, - ]); - } - } - get_public_ips(); $this->call(OauthSettingSeeder::class); diff --git a/docker-compose.windows.yml b/docker-compose.windows.yml deleted file mode 100644 index 347495424f..0000000000 --- a/docker-compose.windows.yml +++ /dev/null @@ -1,110 +0,0 @@ -services: - coolify-testing-host: - init: true - image: "docker.io/coollabsio/coolify-testing-host:latest" - pull_policy: always - container_name: coolify-testing-host - volumes: - - //var/run/docker.sock://var/run/docker.sock - - ./:/data/coolify - coolify: - image: "docker.io/coollabsio/coolify:latest" - pull_policy: always - container_name: coolify - restart: always - working_dir: /var/www/html - extra_hosts: - - 'host.docker.internal:host-gateway' - volumes: - - type: bind - source: .env - target: /var/www/html/.env - read_only: true - - ./ssh:/var/www/html/storage/app/ssh - - ./applications:/var/www/html/storage/app/applications - - ./databases:/var/www/html/storage/app/databases - - ./services:/var/www/html/storage/app/services - - ./backups:/var/www/html/storage/app/backups - - ./images:/var/www/html/storage/app/images - env_file: - - .env - environment: - - APP_ID - - APP_ENV=production - - APP_NAME - - APP_KEY - - DB_PASSWORD - - REDIS_PASSWORD - - SSL_MODE=off - - PHP_PM_CONTROL=dynamic - - PHP_PM_START_SERVERS=1 - - PHP_PM_MIN_SPARE_SERVERS=1 - - PHP_PM_MAX_SPARE_SERVERS=10 - - PUSHER_APP_ID - - PUSHER_APP_KEY - - PUSHER_APP_SECRET - - PUSHER_PORT - - PUSHER_BACKEND_PORT - - AUTOUPDATE=true - - SELF_HOSTED=true - - SSH_MUX_ENABLED=false - - IS_WINDOWS_DOCKER_DESKTOP=true - ports: - - "${APP_PORT:-8000}:8080" - - "${REVERB_PORT:-${SOKETI_PORT:-6001}}:6001" - - "6002:6002" - expose: - - "${APP_PORT:-8000}" - - "6001" - - "6002" - healthcheck: - test: curl --fail http://localhost:8080/api/health && curl --fail http://localhost:${PUSHER_BACKEND_PORT:-6001}/up || exit 1 - interval: 5s - retries: 10 - timeout: 2s - depends_on: - postgres: - condition: service_healthy - redis: - condition: service_healthy - postgres: - image: postgres:15-alpine - pull_policy: always - container_name: coolify-db - restart: always - env_file: - - .env - volumes: - - coolify-db:/var/lib/postgresql/data - environment: - POSTGRES_USER: "${DB_USERNAME}" - POSTGRES_PASSWORD: "${DB_PASSWORD}" - POSTGRES_DB: "${DB_DATABASE:-coolify}" - healthcheck: - test: [ "CMD-SHELL", "pg_isready -U ${DB_USERNAME}", "-d", "${DB_DATABASE:-coolify}" ] - interval: 5s - retries: 10 - timeout: 2s - redis: - image: redis:7-alpine - pull_policy: always - container_name: coolify-redis - restart: always - command: redis-server --save 20 1 --loglevel warning --requirepass ${REDIS_PASSWORD} - env_file: - - .env - environment: - REDIS_PASSWORD: "${REDIS_PASSWORD}" - volumes: - - coolify-redis:/data - healthcheck: - test: redis-cli ping - interval: 5s - retries: 10 - timeout: 2s - -volumes: - coolify-db: - name: coolify-db - coolify-redis: - name: coolify-redis diff --git a/tests/Feature/PersistentImageStorageTest.php b/tests/Feature/PersistentImageStorageTest.php index 1439f00302..e3e94b8e17 100644 --- a/tests/Feature/PersistentImageStorageTest.php +++ b/tests/Feature/PersistentImageStorageTest.php @@ -16,11 +16,6 @@ it('persists images in stable and nightly production compose files', function (s 'stable' => 'docker-compose.prod.yml', ]); -it('persists images in the Windows compose file', function () { - expect(file_get_contents(base_path('docker-compose.windows.yml'))) - ->toContain('./images:/var/www/html/storage/app/images'); -}); - it('creates the persistent image directory during installation and upgrades', function (string $script) { expect(file_get_contents(base_path($script))) ->toContain('/data/coolify/images'); diff --git a/tests/Feature/ReverbAndTerminalPackagingTest.php b/tests/Feature/ReverbAndTerminalPackagingTest.php index ef8f39684c..185108a66a 100644 --- a/tests/Feature/ReverbAndTerminalPackagingTest.php +++ b/tests/Feature/ReverbAndTerminalPackagingTest.php @@ -81,7 +81,6 @@ it('includes Reverb but not the terminal server in the Coolify container healthc ->not->toContain('6002/ready'); })->with([ 'production compose' => ['docker-compose.prod.yml'], - 'windows compose' => ['docker-compose.windows.yml'], ]); it('removes the legacy realtime container during upgrades', function (string $script) { @@ -142,7 +141,6 @@ it('removes the dedicated realtime service from bundled compose files', function 'development compose' => ['docker-compose.dev.yml', true], 'maxio development compose' => ['docker-compose-maxio.dev.yml', true], 'multi-instance development compose' => ['docker-compose.dev-multi.yml', true], - 'windows compose' => ['docker-compose.windows.yml', true], ]); it('keeps the internal Reverb listen port separate from the public Pusher port', function () { @@ -184,11 +182,9 @@ it('proxies Reverb and terminal websocket traffic to the Coolify app container', it('uses Pusher environment keys for self-hosted Reverb compatibility', function () { $files = [ '.env.production', - '.env.windows-docker-desktop.example', 'docker-compose.prod.yml', 'docker-compose.dev.yml', 'docker-compose-maxio.dev.yml', - 'docker-compose.windows.yml', 'scripts/install.sh', 'scripts/upgrade.sh', ]; @@ -204,9 +200,6 @@ it('keeps the public websocket port adaptive and configures only the internal Re expect(file_get_contents(base_path('.env.production'))) ->not->toContain('PUSHER_PORT=') ->not->toContain('PUSHER_BACKEND_PORT=') - ->and(file_get_contents(base_path('.env.windows-docker-desktop.example'))) - ->not->toContain('PUSHER_PORT=') - ->toContain('PUSHER_BACKEND_PORT=6001') ->and(file_get_contents(base_path('scripts/install.sh'))) ->not->toContain('update_env_var "PUSHER_PORT"') ->toContain('update_env_var "PUSHER_BACKEND_PORT" "6001"') @@ -221,7 +214,6 @@ it('does not use the browser websocket port as the Docker host port', function ( ->not->toContain('"${PUSHER_PORT:-6001}:6001"'); })->with([ 'production compose' => ['docker-compose.prod.yml'], - 'windows compose' => ['docker-compose.windows.yml'], ]); it('preserves existing public websocket port overrides during install and upgrade', function (string $script) { @@ -264,15 +256,6 @@ it('keeps 4.3.23 realtime setups working with the production compose files', fun 'production compose' => ['docker-compose.prod.yml'], ]); -it('keeps TERMINAL_PORT browser-only in the Windows compose files', function (string $composeFile) { - $coolify = Yaml::parseFile(base_path($composeFile))['services']['coolify']; - - expect($coolify['ports'])->toContain('6002:6002') - ->and(implode("\n", [...$coolify['ports'], ...$coolify['expose']]))->not->toContain('TERMINAL_PORT'); -})->with([ - 'windows compose' => ['docker-compose.windows.yml'], -]); - it('resolves the browser websocket port like 4.3.23', function (string $pageUrl, ?string $pusherPort, ?string $expectedPort) { config()->set('constants.pusher.port', $pusherPort); RequestFacade::swap(Request::create($pageUrl)); diff --git a/tests/Unit/ProductionImageWorkflowTest.php b/tests/Unit/ProductionImageWorkflowTest.php index 9885faa5ec..5f6e12b206 100644 --- a/tests/Unit/ProductionImageWorkflowTest.php +++ b/tests/Unit/ProductionImageWorkflowTest.php @@ -13,21 +13,10 @@ it('builds the development helper image from the coolify-helper repository', fun expect(file_get_contents(dirname(__DIR__, 2)."/{$file}"))->toContain('https://github.com/coollabsio/coolify-helper.git#main:src'); })->with(['scripts/dev-helper', 'docker-compose.dev.yml', 'docker-compose.dev-multi.yml']); -it('publishes the testing host only to Docker Hub', function () { - $workflow = file_get_contents(dirname(__DIR__, 2).'/.github/workflows/coolify-testing-host.yml'); - $cleanupWorkflow = file_get_contents(dirname(__DIR__, 2).'/.github/workflows/cleanup-ghcr-untagged.yml'); - $windowsCompose = file_get_contents(dirname(__DIR__, 2).'/docker-compose.windows.yml'); +it('builds the testing host only for local development', function () { $developmentCompose = file_get_contents(dirname(__DIR__, 2).'/docker-compose.dev.yml'); - expect($workflow) - ->toContain('DOCKER_REGISTRY: docker.io') - ->toContain('IMAGE_NAME: "coollabsio/coolify-testing-host"') - ->toContain('docker/testing-host/Dockerfile') - ->not->toContain('ghcr.io') - ->not->toContain('GITHUB_REGISTRY') - ->and($cleanupWorkflow)->not->toContain('coolify-testing-host') - ->and($windowsCompose)->toContain('docker.io/coollabsio/coolify-testing-host:latest') - ->and($developmentCompose)->toContain('image: coolify-testing-host:dev') + expect($developmentCompose)->toContain('image: coolify-testing-host:dev') ->toContain('dockerfile: ./docker/testing-host/Dockerfile'); }); From 48097c344bdf2f94ca118ed2ae40e862dfbe80c6 Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Sun, 1 Nov 2026 15:31:40 +0100 Subject: [PATCH 3/3] docs: add the removed files to CHANGELOG.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cfe0e46303..16e2e14154 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -48,6 +48,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), ### Removed +- Remove the Windows support with Docker Desktop, `docker-compose.windows.yml` and `.env.windows-docker-desktop.example`, and the testing host image on Docker Hub, which only it used +- Remove the Claude workflow and the temporary workflow and image of the PHP base image - Remove the git-cliff workflow that generated `CHANGELOG.md`, it is written by hand - Remove the temporary hotfix release workflow, patch branches release hotfixes - Remove the `next`, `sha-` and `-rc.N.` image tags, prereleases and nightlies take their place, and the `main` tag on docker.io, it moves on ghcr.io alone