diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index 151d763..079c488 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -28,6 +28,8 @@ jobs:
- "8.2-dev"
- "8.3"
- "8.3-dev"
+ - "8.4"
+ - "8.4-dev"
steps:
- name: Checkout Code
uses: actions/checkout@v1
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index be08ef3..a565e2e 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -25,8 +25,10 @@ jobs:
- "8.1-dev"
- "8.2"
- "8.2-dev"
- - "8,3"
+ - "8.3"
- "8.3-dev"
+ - "8.4"
+ - "8.4-dev"
steps:
- name: Checkout Code
uses: actions/checkout@v1
diff --git a/8.4-dev/Dockerfile b/8.4-dev/Dockerfile
new file mode 100644
index 0000000..48358c1
--- /dev/null
+++ b/8.4-dev/Dockerfile
@@ -0,0 +1,155 @@
+FROM php:8.4-apache
+
+# common-php70
+ENV DEBIAN_FRONTEND noninteractive
+ENV APACHE_DOCROOT /var/www/html
+ENV PATH=/var/www/vendor/bin:$PATH
+ENV COMPOSER_MEMORY_LIMIT "-1"
+
+RUN apt-get update && apt-get install -y --no-install-recommends \
+ # for bz2
+ bzip2 libbz2-dev \
+ # for ftp
+ libssl-dev \
+ # for gd
+ libfreetype6-dev libjpeg62-turbo-dev libpng-dev \
+ # for intl
+ libicu-dev \
+ # for dom
+ libxml2-dev \
+ # for ldap
+ libldap2-dev \
+ # for mysql
+ mariadb-client \
+ # for ssh client only
+ openssh-client \
+ # For image optimization
+ jpegoptim \
+ optipng \
+ pngquant \
+ # php7.3 needs zlib1g-dev and libzip-dev for the zip extension
+ # https://github.com/docker-library/php/issues/61#issuecomment-468874705
+ zlib1g-dev \
+ libzip-dev \
+ # for git
+ git \
+ # for composer
+ unzip \
+ && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
+
+RUN docker-php-ext-configure gd \
+ && docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu \
+ && docker-php-ext-install -j$(nproc) \
+ bcmath \
+ bz2 \
+ calendar \
+ exif \
+ ftp \
+ gd \
+ gettext \
+ intl \
+ ldap \
+ mysqli \
+ opcache \
+ pcntl \
+ pdo_mysql \
+ shmop \
+ soap \
+ sockets \
+ sysvmsg \
+ sysvsem \
+ sysvshm \
+ zip \
+ && pecl install redis apcu \
+ && docker-php-ext-enable redis apcu
+
+# Configure Apache:
+RUN a2enmod rewrite headers expires \
+ && sed -i "/DocumentRoot \/var\/www\/html/c\\\tDocumentRoot \$\{APACHE_DOCROOT\}" /etc/apache2/sites-enabled/000-default.conf \
+ # Preemptively add a user 1000, for use with $APACHE_RUN_USER on osx
+ && adduser --uid 1000 --gecos 'My OSX User' --disabled-password osxuser
+
+# Install Composer.
+
+ARG COMPOSER_VERSION=2.3.10
+RUN COMPOSER_SHA384=$(curl https://composer.github.io/installer.sig) \
+ && curl -fsSL -o composer-setup.php https://getcomposer.org/installer \
+ && echo "$COMPOSER_SHA384 composer-setup.php" | sha384sum -c - \
+ && php composer-setup.php --version=$COMPOSER_VERSION --install-dir=/usr/local/bin --filename=composer
+
+# Install Dockerize.
+ARG DOCKERIZE_VERSION=v0.6.1
+ARG DOCKERIZE_SHA256=1fa29cd41a5854fd5423e242f3ea9737a50a8c3bcf852c9e62b9eb02c6ccd370
+RUN curl -fsSOL https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
+ && echo "$DOCKERIZE_SHA256 dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz" | sha256sum -c - \
+ && tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
+ && rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz
+
+# Install Drush Launcher. Whereas previously we installed Drush globally, we no longer do,
+# since it's expected that D8 sites will include their own copy of Drush, and Drush 9+ is
+# incompatible with Drupal < 8.
+# @todo: Is the launcher even needed? We add /var/www/vendor/bin on the global path.
+ARG DRUSH_LAUNCHER_VERSION=0.6.0
+ARG DRUSH_LAUNCHER_SHA256=c3f32a800a2f18470b0010cd71c49e49ef5c087f8131eecfe9b686dc1f3f3d4e
+RUN curl -fsSOL https://github.com/drush-ops/drush-launcher/releases/download/$DRUSH_LAUNCHER_VERSION/drush.phar \
+ && echo "$DRUSH_LAUNCHER_SHA256 drush.phar" | sha256sum -c - \
+ && mv drush.phar /usr/bin/drush && chmod +x /usr/bin/drush
+
+# Pre-trust Github host certificates.
+RUN ssh-keyscan github.com >> /etc/ssh/ssh_known_hosts
+
+ADD templates /templates
+ADD scripts/* /usr/local/bin/
+
+# /common-php70
+
+# NodeJS + Yarn
+ARG NODE_MAJOR_VERSION=23
+RUN apt-get update \
+ && apt-get install -y apt-transport-https lsb-release gnupg > /dev/null 2>&1 \
+ && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
+ && curl -sL "https://deb.nodesource.com/setup_$NODE_MAJOR_VERSION.x" | bash \
+ && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \
+ && apt-get update \
+ # Force apt to use the deb.nodesource repository
+ && echo "Package: nodejs\nPin: origin deb.nodesource.com\nPin-priority: 1000" > /etc/apt/preferences.d/99-nodejs \
+ && apt-get install -y nodejs \
+ && apt-get install -y --no-install-recommends yarn \
+ \
+ && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
+
+# XDebug
+# TODO: Remove xdebug next time it causes problems. It is a lot of effort
+# to maintain, and no one is actually using it.
+RUN pecl install xdebug \
+ && docker-php-ext-enable xdebug \
+ && echo "xdebug.mode=debug" > $PHP_INI_DIR/conf.d/xdebug.ini
+
+
+# Blackfire Probe. Note: We do not install Blackfire CLI. You will
+# need that in order to trigger Blackfire tests. The probe just instruments
+# things on the server side.
+RUN version=$(php -r "echo PHP_MAJOR_VERSION.PHP_MINOR_VERSION;") \
+ && curl -A "Docker" -o /tmp/blackfire-probe.tar.gz -D - -L -s https://blackfire.io/api/v1/releases/probe/php/linux/amd64/$version \
+ && mkdir -p /tmp/blackfire \
+ && tar zxpf /tmp/blackfire-probe.tar.gz -C /tmp/blackfire \
+ && mv /tmp/blackfire/blackfire-*.so $(php -r "echo ini_get('extension_dir');")/blackfire.so \
+ && printf "extension=blackfire.so\nblackfire.agent_socket=tcp://blackfire:8707\n" > $PHP_INI_DIR/conf.d/blackfire.ini \
+ && rm -rf /tmp/blackfire /tmp/blackfire-probe.tar.gz
+
+# Terminus.
+ARG TERMINUS_VERSION=3.0.7
+ARG TERMINUS_SHA256="f8fd66afb825ba2314a3c1d9a0b0e7e3dedbe687668613bd511ff6b41c4c6516"
+RUN curl -fsSOL https://github.com/pantheon-systems/terminus/releases/download/$TERMINUS_VERSION/terminus.phar \
+ && echo "$TERMINUS_SHA256 terminus.phar" | sha256sum -c - \
+ && mv terminus.phar /usr/local/bin/terminus \
+ && chmod +x /usr/local/bin/terminus
+
+# Gulp-cli.
+RUN npm i --no-cache -g gulp-cli
+
+# ImageMagick
+RUN apt-get update \
+ && apt-get install -y imagemagick > /dev/null 2>&1 \
+ && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
+
diff --git a/8.4-dev/scripts/check-apache-mem b/8.4-dev/scripts/check-apache-mem
new file mode 100755
index 0000000..a0a7f4d
--- /dev/null
+++ b/8.4-dev/scripts/check-apache-mem
@@ -0,0 +1,3 @@
+#!/usr/bin/env bash
+
+ps -ylC apache2 | awk '{x += $8;y += 1} END {print "Apache Memory Usage (MB): "x/1024; print "Average Process Size (MB): "x/((y-1)*1024)}'
\ No newline at end of file
diff --git a/8.4-dev/scripts/docker-php-entrypoint b/8.4-dev/scripts/docker-php-entrypoint
new file mode 100755
index 0000000..0a6b4ee
--- /dev/null
+++ b/8.4-dev/scripts/docker-php-entrypoint
@@ -0,0 +1,28 @@
+#!/bin/sh
+set -e
+
+# Write overrides to PHP and Apache. This is incompatible with starting the container
+# with any user other than root, but that's not advised for the PHP Apache container
+# anyway.
+
+# PHP 7.3 is the first version that uses Xdebug 3; it's easier to check
+# the php version in here than the Xdebug version
+php_at_least_7_3=$(php -r 'echo version_compare(PHP_VERSION, "7.3") >= 0;')
+
+PHP_AT_LEAST_7_3=$php_at_least_7_3 dockerize \
+ -template /templates/php.overrides.tmpl:$PHP_INI_DIR/conf.d/99-runtime.ini \
+ -template /templates/mpm_prefork.conf.tmpl:/etc/apache2/mods-enabled/mpm_prefork.conf
+
+# Toggle XDebug completely on and off at runtime
+# Enable Xdebug by setting XDEBUG_ENABLE=1.
+if [ -z "$XDEBUG_ENABLE" ] || [ "$XDEBUG_ENABLE" -eq "0" ]; then
+ rm -f $PHP_INI_DIR/conf.d/docker-php-ext-xdebug.ini
+else
+ docker-php-ext-enable xdebug
+fi
+
+# first arg is `-f` or `--some-option`
+if [ "${1#-}" != "$1" ]; then
+ set -- apache2-foreground "$@"
+fi
+exec "$@"
diff --git a/8.4-dev/templates/mpm_prefork.conf.tmpl b/8.4-dev/templates/mpm_prefork.conf.tmpl
new file mode 100644
index 0000000..e62ce0b
--- /dev/null
+++ b/8.4-dev/templates/mpm_prefork.conf.tmpl
@@ -0,0 +1,8 @@
+# Allow overriding some settings to control performance.
+
+ StartServers 5
+ MinSpareServers 5
+ MaxSpareServers 10
+ MaxRequestWorkers {{ default .Env.APACHE_REQUEST_WORKERS "150" }}
+ MaxConnectionsPerChild 5000
+
diff --git a/8.4-dev/templates/php.overrides.tmpl b/8.4-dev/templates/php.overrides.tmpl
new file mode 100644
index 0000000..e99da14
--- /dev/null
+++ b/8.4-dev/templates/php.overrides.tmpl
@@ -0,0 +1,23 @@
+; Set a reasonable max upload size
+upload_max_filesize = 128M
+post_max_size = 128M
+
+; These settings can be overridden at runtime by the presence of environment
+; variables.
+date.timezone={{ default .Env.TZ "UTC" }}
+{{ if .Env.PHP_MEMORY_LIMIT }}memory_limit={{ .Env.PHP_MEMORY_LIMIT }}{{ end }}
+{{ if .Env.SENDMAIL_PATH }}sendmail_path={{ .Env.SENDMAIL_PATH }}{{ end }}
+
+; XDebug can be conditionally triggered.
+{{ if .Env.XDEBUG_ENABLE }}
+{{ if .Env.PHP_AT_LEAST_7_3 }}
+xdebug.client_host={{ default .Env.XDEBUG_REMOTE_HOST "host.docker.internal" }}
+xdebug.idekey={{ default .Env.XDEBUG_IDEKEY "PHPSTORM" }}
+xdebug.start_with_request={{ default .Env.XDEBUG_START_WITH_REQUEST "yes" }}
+{{ else }}
+xdebug.remote_host={{ default .Env.XDEBUG_REMOTE_HOST "host.docker.internal" }}
+xdebug.idekey={{ default .Env.XDEBUG_IDEKEY "PHPSTORM" }}
+xdebug.remote_enable={{ default .Env.XDEBUG_REMOTE_ENABLE "On" }}
+xdebug.remote_autostart={{ default .Env.XDEBUG_REMOTE_AUTOSTART "On" }}
+{{ end }}
+{{ end }}
diff --git a/8.4-dev/test.yml b/8.4-dev/test.yml
new file mode 100644
index 0000000..81f49c9
--- /dev/null
+++ b/8.4-dev/test.yml
@@ -0,0 +1,80 @@
+schemaVersion: "2.0.0"
+commandTests:
+ - name: "php should be configurable by environment variables"
+ setup: [["docker-php-entrypoint"]]
+ envVars:
+ - {key: PHP_MEMORY_LIMIT, value: 512M }
+ - {key: SENDMAIL_PATH, value: /bin/true }
+ - {key: TZ, value: America/New_York }
+ command: "php"
+ args: ["-i"]
+ expectedOutput:
+ - memory_limit => 512M => 512M
+ - sendmail_path => /bin/true => /bin/true
+ - date.timezone => America/New_York => America/New_York
+ - name: "php should use have default values"
+ setup: [["docker-php-entrypoint"]]
+ command: "php"
+ args: ["-i"]
+ expectedOutput:
+ - memory_limit => 128M => 128M
+ - sendmail_path => (?:\/usr\/sbin\/sendmail)? -t -i\s*=> (?:\/usr\/sbin\/sendmail)? -t -i
+ - date.timezone => UTC => UTC
+ - name: "Composer should work"
+ command: composer
+ args: ["diagnose"]
+ - name: "Drush should be launchable"
+ command: drush
+ args: ["--drush-launcher-version"]
+ expectedOutput:
+ - "Drush Launcher Version: 0.6.0"
+
+ - name: "Blackfire agent should be present and configured"
+ command: "php"
+ args: ["-i"]
+ expectedOutput:
+ - Blackfire => enabled
+ - blackfire.agent_socket => tcp://blackfire:8707 => tcp://blackfire:8707
+ - name: "XDebug should be installed and disabled by default"
+ command: "php"
+ args: ["-m"]
+ setup: [["docker-php-entrypoint"]]
+ excludedOutput:
+ - Xdebug
+ - name: "XDebug should be enableable using a simple environment variable"
+ command: "php"
+ args: ["-m"]
+ setup: [["docker-php-entrypoint"]]
+ envVars:
+ - {key: XDEBUG_ENABLE, value: True }
+ expectedOutput:
+ - Xdebug
+ - name: "XDebug should be configurable by using environment variables"
+ command: "php"
+ args: ["-i"]
+ setup: [["docker-php-entrypoint"]]
+ envVars:
+ - {key: XDEBUG_ENABLE, value: True }
+ - {key: XDEBUG_REMOTE_HOST, value: foo.bar}
+ - {key: XDEBUG_IDEKEY, value: foobar}
+
+ - {key: XDEBUG_START_WITH_REQUEST, value: "yes"}
+
+ expectedOutput:
+ - xdebug.idekey => foobar => foobar
+
+ - xdebug.start_with_request => yes => yes
+ - xdebug.client_host => foo.bar => foo.bar
+
+ - name: "NodeJS Should be installed and in the correct version"
+ command: "node"
+ args: ["--version"]
+ expectedOutput:
+ - v23.
+ - name: "Yarn should be installed and functional"
+ command: "yarn"
+ args: ["--version"]
+ - name: "Terminus should be installed and functional"
+ command: "terminus"
+ args: ["self:info"]
+
diff --git a/8.4/Dockerfile b/8.4/Dockerfile
new file mode 100644
index 0000000..87f7b01
--- /dev/null
+++ b/8.4/Dockerfile
@@ -0,0 +1,105 @@
+FROM php:8.4-apache
+
+# common-php70
+ENV DEBIAN_FRONTEND noninteractive
+ENV APACHE_DOCROOT /var/www/html
+ENV PATH=/var/www/vendor/bin:$PATH
+ENV COMPOSER_MEMORY_LIMIT "-1"
+
+RUN apt-get update && apt-get install -y --no-install-recommends \
+ # for bz2
+ bzip2 libbz2-dev \
+ # for ftp
+ libssl-dev \
+ # for gd
+ libfreetype6-dev libjpeg62-turbo-dev libpng-dev \
+ # for intl
+ libicu-dev \
+ # for dom
+ libxml2-dev \
+ # for ldap
+ libldap2-dev \
+ # for mysql
+ mariadb-client \
+ # for ssh client only
+ openssh-client \
+ # For image optimization
+ jpegoptim \
+ optipng \
+ pngquant \
+ # php7.3 needs zlib1g-dev and libzip-dev for the zip extension
+ # https://github.com/docker-library/php/issues/61#issuecomment-468874705
+ zlib1g-dev \
+ libzip-dev \
+ # for git
+ git \
+ # for composer
+ unzip \
+ && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
+
+RUN docker-php-ext-configure gd \
+ && docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu \
+ && docker-php-ext-install -j$(nproc) \
+ bcmath \
+ bz2 \
+ calendar \
+ exif \
+ ftp \
+ gd \
+ gettext \
+ intl \
+ ldap \
+ mysqli \
+ opcache \
+ pcntl \
+ pdo_mysql \
+ shmop \
+ soap \
+ sockets \
+ sysvmsg \
+ sysvsem \
+ sysvshm \
+ zip \
+ && pecl install redis apcu \
+ && docker-php-ext-enable redis apcu
+
+# Configure Apache:
+RUN a2enmod rewrite headers expires \
+ && sed -i "/DocumentRoot \/var\/www\/html/c\\\tDocumentRoot \$\{APACHE_DOCROOT\}" /etc/apache2/sites-enabled/000-default.conf \
+ # Preemptively add a user 1000, for use with $APACHE_RUN_USER on osx
+ && adduser --uid 1000 --gecos 'My OSX User' --disabled-password osxuser
+
+# Install Composer.
+
+ARG COMPOSER_VERSION=2.3.10
+RUN COMPOSER_SHA384=$(curl https://composer.github.io/installer.sig) \
+ && curl -fsSL -o composer-setup.php https://getcomposer.org/installer \
+ && echo "$COMPOSER_SHA384 composer-setup.php" | sha384sum -c - \
+ && php composer-setup.php --version=$COMPOSER_VERSION --install-dir=/usr/local/bin --filename=composer
+
+# Install Dockerize.
+ARG DOCKERIZE_VERSION=v0.6.1
+ARG DOCKERIZE_SHA256=1fa29cd41a5854fd5423e242f3ea9737a50a8c3bcf852c9e62b9eb02c6ccd370
+RUN curl -fsSOL https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
+ && echo "$DOCKERIZE_SHA256 dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz" | sha256sum -c - \
+ && tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
+ && rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz
+
+# Install Drush Launcher. Whereas previously we installed Drush globally, we no longer do,
+# since it's expected that D8 sites will include their own copy of Drush, and Drush 9+ is
+# incompatible with Drupal < 8.
+# @todo: Is the launcher even needed? We add /var/www/vendor/bin on the global path.
+ARG DRUSH_LAUNCHER_VERSION=0.6.0
+ARG DRUSH_LAUNCHER_SHA256=c3f32a800a2f18470b0010cd71c49e49ef5c087f8131eecfe9b686dc1f3f3d4e
+RUN curl -fsSOL https://github.com/drush-ops/drush-launcher/releases/download/$DRUSH_LAUNCHER_VERSION/drush.phar \
+ && echo "$DRUSH_LAUNCHER_SHA256 drush.phar" | sha256sum -c - \
+ && mv drush.phar /usr/bin/drush && chmod +x /usr/bin/drush
+
+# Pre-trust Github host certificates.
+RUN ssh-keyscan github.com >> /etc/ssh/ssh_known_hosts
+
+ADD templates /templates
+ADD scripts/* /usr/local/bin/
+
+# /common-php70
+
diff --git a/8.4/scripts/check-apache-mem b/8.4/scripts/check-apache-mem
new file mode 100755
index 0000000..a0a7f4d
--- /dev/null
+++ b/8.4/scripts/check-apache-mem
@@ -0,0 +1,3 @@
+#!/usr/bin/env bash
+
+ps -ylC apache2 | awk '{x += $8;y += 1} END {print "Apache Memory Usage (MB): "x/1024; print "Average Process Size (MB): "x/((y-1)*1024)}'
\ No newline at end of file
diff --git a/8.4/scripts/docker-php-entrypoint b/8.4/scripts/docker-php-entrypoint
new file mode 100755
index 0000000..0a6b4ee
--- /dev/null
+++ b/8.4/scripts/docker-php-entrypoint
@@ -0,0 +1,28 @@
+#!/bin/sh
+set -e
+
+# Write overrides to PHP and Apache. This is incompatible with starting the container
+# with any user other than root, but that's not advised for the PHP Apache container
+# anyway.
+
+# PHP 7.3 is the first version that uses Xdebug 3; it's easier to check
+# the php version in here than the Xdebug version
+php_at_least_7_3=$(php -r 'echo version_compare(PHP_VERSION, "7.3") >= 0;')
+
+PHP_AT_LEAST_7_3=$php_at_least_7_3 dockerize \
+ -template /templates/php.overrides.tmpl:$PHP_INI_DIR/conf.d/99-runtime.ini \
+ -template /templates/mpm_prefork.conf.tmpl:/etc/apache2/mods-enabled/mpm_prefork.conf
+
+# Toggle XDebug completely on and off at runtime
+# Enable Xdebug by setting XDEBUG_ENABLE=1.
+if [ -z "$XDEBUG_ENABLE" ] || [ "$XDEBUG_ENABLE" -eq "0" ]; then
+ rm -f $PHP_INI_DIR/conf.d/docker-php-ext-xdebug.ini
+else
+ docker-php-ext-enable xdebug
+fi
+
+# first arg is `-f` or `--some-option`
+if [ "${1#-}" != "$1" ]; then
+ set -- apache2-foreground "$@"
+fi
+exec "$@"
diff --git a/8.4/templates/mpm_prefork.conf.tmpl b/8.4/templates/mpm_prefork.conf.tmpl
new file mode 100644
index 0000000..e62ce0b
--- /dev/null
+++ b/8.4/templates/mpm_prefork.conf.tmpl
@@ -0,0 +1,8 @@
+# Allow overriding some settings to control performance.
+
+ StartServers 5
+ MinSpareServers 5
+ MaxSpareServers 10
+ MaxRequestWorkers {{ default .Env.APACHE_REQUEST_WORKERS "150" }}
+ MaxConnectionsPerChild 5000
+
diff --git a/8.4/templates/php.overrides.tmpl b/8.4/templates/php.overrides.tmpl
new file mode 100644
index 0000000..e99da14
--- /dev/null
+++ b/8.4/templates/php.overrides.tmpl
@@ -0,0 +1,23 @@
+; Set a reasonable max upload size
+upload_max_filesize = 128M
+post_max_size = 128M
+
+; These settings can be overridden at runtime by the presence of environment
+; variables.
+date.timezone={{ default .Env.TZ "UTC" }}
+{{ if .Env.PHP_MEMORY_LIMIT }}memory_limit={{ .Env.PHP_MEMORY_LIMIT }}{{ end }}
+{{ if .Env.SENDMAIL_PATH }}sendmail_path={{ .Env.SENDMAIL_PATH }}{{ end }}
+
+; XDebug can be conditionally triggered.
+{{ if .Env.XDEBUG_ENABLE }}
+{{ if .Env.PHP_AT_LEAST_7_3 }}
+xdebug.client_host={{ default .Env.XDEBUG_REMOTE_HOST "host.docker.internal" }}
+xdebug.idekey={{ default .Env.XDEBUG_IDEKEY "PHPSTORM" }}
+xdebug.start_with_request={{ default .Env.XDEBUG_START_WITH_REQUEST "yes" }}
+{{ else }}
+xdebug.remote_host={{ default .Env.XDEBUG_REMOTE_HOST "host.docker.internal" }}
+xdebug.idekey={{ default .Env.XDEBUG_IDEKEY "PHPSTORM" }}
+xdebug.remote_enable={{ default .Env.XDEBUG_REMOTE_ENABLE "On" }}
+xdebug.remote_autostart={{ default .Env.XDEBUG_REMOTE_AUTOSTART "On" }}
+{{ end }}
+{{ end }}
diff --git a/8.4/test.yml b/8.4/test.yml
new file mode 100644
index 0000000..f1d19b9
--- /dev/null
+++ b/8.4/test.yml
@@ -0,0 +1,31 @@
+schemaVersion: "2.0.0"
+commandTests:
+ - name: "php should be configurable by environment variables"
+ setup: [["docker-php-entrypoint"]]
+ envVars:
+ - {key: PHP_MEMORY_LIMIT, value: 512M }
+ - {key: SENDMAIL_PATH, value: /bin/true }
+ - {key: TZ, value: America/New_York }
+ command: "php"
+ args: ["-i"]
+ expectedOutput:
+ - memory_limit => 512M => 512M
+ - sendmail_path => /bin/true => /bin/true
+ - date.timezone => America/New_York => America/New_York
+ - name: "php should use have default values"
+ setup: [["docker-php-entrypoint"]]
+ command: "php"
+ args: ["-i"]
+ expectedOutput:
+ - memory_limit => 128M => 128M
+ - sendmail_path => (?:\/usr\/sbin\/sendmail)? -t -i\s*=> (?:\/usr\/sbin\/sendmail)? -t -i
+ - date.timezone => UTC => UTC
+ - name: "Composer should work"
+ command: composer
+ args: ["diagnose"]
+ - name: "Drush should be launchable"
+ command: drush
+ args: ["--drush-launcher-version"]
+ expectedOutput:
+ - "Drush Launcher Version: 0.6.0"
+
diff --git a/docker-compose.yml b/docker-compose.yml
index dc16d9e..7f86242 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -54,4 +54,9 @@ services:
"8.3-dev":
image: lastcallmedia/php:8.2-dev
build: ./8.3-dev
-
+ "8.4":
+ image: lastcallmedia/php:8.4
+ build: ./8.4
+ "8.4-dev":
+ image: lastcallmedia/php:8.4-dev
+ build: ./8.4-dev
diff --git a/regenerate.sh b/regenerate.sh
index 99212ca..dea49c0 100755
--- a/regenerate.sh
+++ b/regenerate.sh
@@ -12,7 +12,7 @@ set -e
# ./regenerate.sh
#
#####
-php_versions=('7.0' '7.1' '7.2' '7.3' '7.4' '8.0' '8.1', '8.2', '8.3')
+php_versions=('7.0' '7.1' '7.2' '7.3' '7.4' '8.0' '8.1', '8.2', '8.3', '8.4')
dc="version: '2'\nservices:\n"
version_at_least () {
@@ -36,6 +36,8 @@ for PHP_VERSION in "${php_versions[@]}"; do
fi
# Determine node version
+ if version_at_least "$PHP_VERSION" "8.4"; then
+ node_version=23
if version_at_least "$PHP_VERSION" "8.3"; then
node_version=23
if version_at_least "$PHP_VERSION" "8.2"; then