All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Fixed -
slic composer-cache setandunsetsave their settings without starting a stopped stack. When confirmed, only running PHP services are recreated to apply the cache mount, leaving stopped services and dependencies alone. CI can configure the cache before selecting a project's PHP version without starting containers prematurely.
-
Breaking Change - Playwright suites that launch browsers directly must use built-in fixtures or explicitly connect to the remote browser. Browser-facing
localhostURLs anddownload.path()calls may also need changes. See the migration guidance before upgrading. -
Added - Internal process helpers in src/process-argv.php for executing commands as arrays of literal, unquoted arguments. Use
process_argv()to capture stdout and receive astatus/stdoutresult array, orprocess_argv_realtime()to stream output and receive an exit status. These helpers preserve argument boundaries without shell expansion and support interruptible child-process execution. -
Added - Internal Compose helpers in src/docker-argv.php:
docker_compose_argv()anddocker_compose_argv_realtime()accept command arguments followed by optional Compose options, applying Slic's environment and terminal settings. Use these helpers for new commands built from raw arguments, andslic_stack_argv()for stack file options. Pass values without shell quoting or escaping; existing helpers retain their current calling conventions. -
Changed -
slic playwright testkeeps tests and PHP hooks in the slic container and connects browser fixtures to a temporary server in the Microsoft Playwright image. The image follows the installed CLI version, so dependency ranges are supported. Each invocation owns and cleans up its browser container. -
Changed -
slic playwright install, includinginstall chromium --with-deps, no longer installs browsers or system packages. See the Playwright guide for usage examples and help adapting existing suites. -
Fixed - Playwright browser readiness checks, logs, and cleanup preserve the configured Docker executable and context when using a Docker Compose command prefix.
-
Fixed - Slic and WordPress image publishing workflows try Amazon ECR Public first and fall back to authenticated Docker Hub pulls when the mirror fails, including when ECR download limits are exceeded.
- Fixed - The PHP 7.3, 7.4 and 8.0 images install system packages from the Debian archive, so they can be built and
slic playwright installworks again now that Debian 11 has left LTS.
- Fixed - The object-cache drop-in filter now uses a serializable callback so PHPUnit suites can back up global state.
- Added - First-class support for site-mode projects that use
content/instead ofwp-content/, including plugin and theme container paths. - Changed -
slic herenow mounts the complete project root for every WordPress site, including projects that install core intowp/. - Changed -
slic herenow disables subdirectory builds for sites and enables them for plugin and theme directories. - Fixed - Site mode no longer creates an unused
wp-content/directory when the project uses a custom content directory. - Fixed - Plugin and theme targets in projects that install WordPress in
wp/continue to use Slic's isolated WordPress installation. - Fixed - Switching between site and isolated component targets recreates only the running PHP containers so changed mounts take effect without resetting the test database.
- Fixed - Site theme discovery remains stable while plugin and theme targets use their required theme mounts.
- Fixed - Target-local mount overrides remain authoritative when Slic selects a site layout.
- Changed - Multi-target commands reject mixed site, plugin, and theme targets when their WordPress mounts are incompatible.
- Changed - Multi-target commands reject targets with different target-local bind-mount settings.
- Fixed - Target-local Composer cache and Slic scripts bind mounts now recreate running PHP containers and persist their runtime state.
- Fixed - Target switching now stops without persisting new mount state when Docker cannot determine which services are running.
- Fixed - Test containers now disable the object-cache drop-in without modifying the project file.
- Fixed - Airplane mode now uses and creates the configured must-use plugin directory.
- Added - PCOV support to the slic and WordPress containers to make code coverage generation faster than Xdebug-backed coverage.
- Added - The
slic pcov on|off|statuscommand to configure PCOV and apply it to running containers and checks if xdebug is running and asks the user if they want to disable it. - Updated - The
slic xdebug oncommand now checks if PCOV is enabled and asks the user if they want to disable it. - Added -
pcovonandpcovoffhelpers insideslic shell. - Changed - WordPress containers now apply configured PCOV state through the
apache2-foregroundcommand path while preserving the upstream WordPress image entrypoint. - Updated - GitHub actions versions.
- Added - First-class theme support for
slic here,slic use,slic using, andslic run, including auto-detection when runningslic herefrom athemesdirectory with a siblingpluginsdirectory. - Added - Agent Skills documentation in
skills/slic/for AI-assisted WordPress integration test creation, debugging, and slic workflow guidance. - Added - PHP 8.4 and 8.5 Docker image support for slic and WordPress 7.0, compiling
uopzfrom source for PHP 8.4+ because the PECL release does not build against PHP 8.4. - Changed - PHP 8.3 WordPress images now use WordPress 7.0.0.
- Changed - Docker builds now resolve upstream official PHP and WordPress base images from Amazon ECR Public by default to avoid Docker Hub pull rate limits.
- Fixed - Theme targets now resolve to
SLIC_THEMES_DIRwhen running tests and build/install prompts instead of assuming all targets live inSLIC_PLUGINS_DIR. - Fixed -
slic runnow repairs stale or incomplete WordPress.htaccessrewrite blocks in the configuredSLIC_WP_DIR, preventing Apache-level 404s for pretty REST API URLs.
- Fixed - Add missing
igbinaryandredisPHP extensions to the slic and WordPress Dockerfiles.
- Fixed - Preserve staged PHP versions (from
slic php-version set X.Y --skip-rebuild) when a project's.env.slic.localfile would otherwise override them. Staged versions now correctly take precedence over project-specific PHP version overrides.
- Added - Prevent running slic if the
uopzextension is enabled withuopz.exit=0.
- Fixed - Handling of the project in the
usecommand to guarantee that project specific override files will apply to all operations performed during the handling of theusecommand, including possible spin up of the stack. - Fixed - Correctly handle the
SLIC_WP_AUTO_UPDATE_CORE, allow "undefining" this env var withSLIC_WP_AUTO_UPDATE_CORE= - Fixed - Correctly handle the
SLIC_AUTOMATIC_UPDATER_DISABLED, allow "undefining" this env var withSLIC_AUTOMATIC_UPDATER_DISABLED= - Fixed - Correctly handle the
SLIC_WP_HTTP_BLOCK_EXTERNAL, allow "undefining" this env var withSLIC_WP_HTTP_BLOCK_EXTERNAL= - Changed -
update-dumpcommand now validates dump file existence before processing, provides clearer progress messages, and properly restores the original WordPress version after testing with a specific version. - Fixed -
read_env_file()no longer reads commented out env vars, e.g.# SOME_VAR=testwould previously be set.
- Fixed - Use
mysqlshowto checkdbservice health when using MySQL 5.5.
- Change - Update MariadDB version from version
10.7.8to version11.8.3. - Fixed - Error "Failed to get current SQL modes. Reason: ERROR 2026 (HY000)" due to lower MariaDB image.
- Change - GitHub Actions workflows now use native ARM64 runners (
ubuntu-24.04-arm) instead of QEMU emulation for multi-platform builds, to reduce build times. - Change - Optimized Dockerfile layer ordering to improve cache hit rates - local config files moved to end to prevent invalidating heavy system installation layers.
- Change - Added BuildKit cache mounts for apt package installation and PHP extension compilation, to reduce subsequent build times.
- Change - Added
IPE_CACHE_DIRenvironment variable to cache PHP extension downloads and compiled artifacts across builds. - Change - Implemented platform-specific registry caching (separate caches for amd64/arm64) to prevent cache conflicts and maximize reuse.
- Change - Optimize docker builds and workflows for slic and WordPress containers.
- Fixed -
backup_env_var()not actually populatingbackup_vault()andenv_var_backup()will properly read from the values. - Fixed - PHP version priority order when running
slic use <project>now properly respects overrides in the following order:- CLI environment variable (e.g.,
SLIC_PHP_VERSION=8.3 slic use) - Staged version (from
slic php-version set --skip-rebuild) - Project's
.env.slic.localfile - Auto-detected from project's
slic.jsonorcomposer.json.
- CLI environment variable (e.g.,
- Change -
slic php-version set X.Y --skip-rebuildnow stages the PHP version for the nextslic usecommand without rebuilding containers, useful for CI environments to avoid pulling Docker images multiple times. - Change -
slic php-versionnow shows if the runtime version differs from the configured version. - Change -
slic infonow displays values from.env.slic.runand warns when they're being overridden by other configuration files (like a project's.env.slic.local), making it easier to identify configuration conflicts. - Change - Added console messages to
slic useto clearly indicate which PHP version is being used and why. - Added - PHP version management documentation.
- Breaking Change - On PHP 7.4 MySQL version to 5.5.62 to align with WordPress minimum requirements. The version of MySQL can be overridden using a version of PHP that is not 7.4, by setting the
SLIC_DB_IMAGEenvironment variable explicitly or by setting theSLIC_DB_NO_MINenvironment variable to a non falsy value. - Fixed - Normalize the PHP version read from the project
slic.jsonorcomposer.jsonfiles to make sure no useless PHP version changes will be triggered.
- Fixed - Restored the
selenium/standaolone-chromeimage to version3.141.59from4.27.0-20241225to ensure compatibility with older PHP driver versions.
- Fixed - Better detection of ARM64 architecture in
is_arm64function.
- Added - Allow for projects to declare their desired PHP version for slic via
slic.json(phpVersion) orcomposer.json(config.platform.php). - Added - Support for auto-setup of appropriate PHP containers when running
slic use.
- Updated the ARM64 Chrome container image to version 4.20.0-20240427 from 4.1.2-20220227.
- Updated the x86 Chrome container image to version 4.27.0-20241225 from 3.141.59.
- Updated the
nodeversion to18.17.0, this affects thenpmcommand and any other command using thenpmcontainer.
- Fixed - Set the
opcache.revalidate_freqto0in theslicandwordpresscontainers to avoid issues with cached files in tests.
- Fixed - Run the
playwright installcommand as root, allow running Playwright tests as theslicuser. - Change - The
playwright installcommand will now install only the Chromium browser and its dependencies.
- Fixed - Properly read changes and restart stack after using the
slic php-version setcommand. - Added - PHP 8.3 docker images.
- Change - Update GitHub action versions to remove node notices.
- Change - Build slic images from the latest PHP patch versions.
- Added - The
playwrightcommand to Playwright commands in the stack. - Added - The
lessbinary to thesliccontainer (to correctly format wp-cli output). - Added - The
palias to thesliccontainer to allow running Playwright commands withp <command>, similar toc <command>to run Codeception commands.
- Added - The
sliccommand now loads the.env.slic.localfile from the target directory if it exists. (thanks @cliffordp) - Added - The
chromecontainer shm size is now set to256mby default, and is controllable via theSLIC_CHROME_CONTAINER_SHM_SIZEenv var. (thanks @maurisrx)
- Change - the
airplane-modecommand now installs the plugin in the must-use plugins directory instead of the plugins directory. - Fixed -
.batfile now uses the correct path to theslicexecutable on Windows.
- Added - The
slic update-dumpcommand to update a dump file for the current project, with an optional WordPress version update, e.g.slic update-dump tests/_data/dump.sql latest.
- Change - Disable WordPress's automatic updating in slic containers via docker compose
WORDPRESS_CONFIG_EXTRAdefines. See comments in.env.slicto customize this behavior.
- Change - Build
linux/arm64images for theslicandwordpresscontainers to avoid issues when runningslicon ARM machines.
- Change - Remove
versionproperty from docker compose .yml files as it's obsolete since v2.25. docker/compose#11628
- Change - Update the
npmversion to18.13.0 - Change - Update the
nvmversion tov0.39.7 - Fixed - Ensure
nvmcache directory is world-accessible to allow use ofnvm install
- Change - Allow controlling the value of the
WP_HTTP_BLOCK_EXTERNALconstant using theSLIC_WP_HTTP_BLOCK_EXTERNALenvironment variable defined in the.env.slic.runconfiguration file; set totrueby default to block all outgoing HTTP requests from WordPress. - Change - Allow controlling the value of the
DISABLE_WP_CRONconstant using theSLIC_DISABLE_WP_CRONenvironment variable defined in the.env.slic.runconfiguration file; set totrueby default to disable the WordPress cron system.
- Fix - Added
extra_hosts:"${host:-host}:host-gateway"to slick-stack.yml for Linux compatibility, enabling Xdebug without modifying the XDH environment variable. Ref.
- Change - Update base WordPress container from 6.1 to 6.2.
- Change - Add WP CLI to the
wordpresscontainer aswp.
- Change - Configure
slicandwordpresscontainers consistently withphp.iniconfiguration file. - Change - Set
xdebug.log_level=0inslicandwordpresscontainers to avoid nags in separate process running.
- Change - Enable xdebug coverage mode in all PHP based docker containers when xdebug is enabled via:
xdebug.mode=develop,debug,coverage.
- Change - Tag again to update WordPress version to 6.1 (the last WP version with a PHP 7.4 image).
- Change - Update WordPress version to 6.1 (the last WP version with a PHP 7.4 image).
- Fix - broken CRLF line breaks via slic real-time commands due to docker compose v2.2.x being used Docker compose issue.
- Updates slic-stack.site.yml for full site testing.
- Adds check for
sitetarget to referenceslic_wp_dir()when running commands.
- Change - Default to Composer version 2.
- Change - Leverage Docker Compose syntax to manage network aliases and service dependencies. Clean up a remove code.
- Add the
dccommand to run Docker Compose commands in the stack. - Support the
SLIC_DOCKER_COMPOSE_BINenvironment variable to allow for the use a different Docker Compose binary, thedocker composeone is used by default.
- Fix - issue 142 ensure the hosts file in the docker container contains a tab character before trying to explode it.
- Added - Pass through the COMPOSER_AUTH environment variable to the slic docker container to allow composer installs for private or otherwise protected dependencies. Especially useful when running in GitHub Actions.
- Added - The PHP exif extension to the slic container to allow
slic composer installcommands to succeed when this extension is required.
- Change - No longer build gd in the slick docker container with AVIF, fixing external dependency on the currently down code.videolan.org, and speeding up builds - more info.
- Change - use
tmpfsfor thedbandredisservices data directories to improve performance on Linux machines.
- Changed - Add docker build caching using the GitHub Cache Backend when publishing docker images via GitHub actions.
- Change - Display composer version in
slic info. - Added - The
--skip-rebuildoption to theslic php-version setcommand to allow setting the PHP version without rebuilding the stack in order to speed up CI runs. Example:slic php-version set 8.1 --skip-rebuild - Fix -
slic php-version helpwill now properly show command help text. - Fix -
slic php-versionwill now properly use the default PHP version if theSLIC_PHP_VERSIONenv var is not set.
- Change - The WordPress PHP7.3 image is only available in for WordPress 5.9.x.
- Change - Convert docker image builds into single matrix GitHub workflows.
- Added - Add a PHP 8.2 slic/WordPress docker image build. PHP8.2 is using WordPress version 6.1.1.
- Change - Use docker build arguments when publishing docker containers.
- Change - Bump action docker/build-push-action@v3.1.1 to docker/build-push-action@v3.3.1
- Change - Bump action docker/metadata-action@v4.0.1 to docker/metadata-action@v4.3.0
- Change - Bump nvm version from v0.39.1 to v0.39.3 in slic docker image.
- Fix - Modernize variable syntax to avoid PHP 8.2 deprecation notices.
- Fix - Enable and disable XDebug correctly in WorPress and slic container removing restart requirement.
- Fix - Avoid issues with missing
/usr/sbin/sendmailduring WordPress installation. [#134]
- Fix - Simplify the
restart_all_services()code so that containers are all shut down and then all started.
- Fix - Add the
intlPHP module to the container.
- Fix - Ensure actions that need to execute after containers start actually wait until those containers start.
- Feature - Added the
slic execcommand that allows bash command execution within the stack. [#31] - Fix - Set the Composer cache directory default location correctly. [#78]
- Tweak - Add
SLIC_PHP_VERSIONtoslic info. - Tweak - Make the
Valid Targets:output a bit less readable duringslic infoin favor of keeping the env values visible.
- Feature - Prompt the user to stop containers before updating.
- Feature - Add the
slic php-versioncommand and allow for switching between PHP versioned containers. - Fix - Allow
wordpress.testto be resolvable during test execution by placing it in the/etc/hostsfile of theslicandchromecontainers. - Fix - PHP 8.0+ compatibility fix for WordPress zip downloads.
- Fix - Prevent looping over the same test suite when executing
slic run. [#118] - Fix - Better handling of checking for services that are up.
- Switch the
slic-stack.ymlto use the new Docker images forslicandslic-wordpress.
- Generate Docker images for
slicandwordpresscontainers.
- Fixes for the run command when executed while the containers are not already running.
- Scaffold in a
/cachedirectory to store test-related information. - PHP 8 deprecation warning fix.
- Ensure that the right flags are passed during docker-compose command execution when in non-interactive mode.
- Big overhaul of documentation within the tool.
- Now saving the state of XDebug when running
slic shellmultiple times. - Added XDebug 3 compatible
php.inisettings.
- Rebranded
trictoslic. - Consolidated many of the containers into a single
sliccontainer to simplify the stack and reduce the time to start up and shut down containers. - Containers are no longer brought down upon completion of a command.
- Removed the
servecommand. Since containers remain up, theupcommand can be used to start the stack and make the local site available. - Reworked how
slichandles npm. It now usesnvmunder the hood and automatically installs the version of node that is dictated by.nvmrc. - Removed the
npm_ltscommand. It is no longer needed after the reworking of thenpmcommand.
- Add the
pscommand to list the current containers information. - Fix
mariadbimage to10.7.3.
- Update the Composer container to use PHP 7.4.
- Set
xdebug.log_level=0in the stack configuration to avoid XDebug warnings from breaking code.
- Add the
mysqlcommand to quickly open amysqlshell in the running database container of thetricstack. - Add the
wpcommand as alias of theclicommand.
- Set the version of the
lucatume/codeceptioncontainer tocc3.1.0-v1.1.1.
- Version bump to pull the latest version of the fixed
codeceptioncontainer.
- Use the
seleniarm/standalone-chromiumcontainer for thechromeservice on ARM architecture machines. - Add the
pcntlextension to thecodeceptioncontainer.
- Add support for a Mailcatcher container (thanks @sc0ttkclark).
- Updated the
nodeversion to10.16.0, this affects thenpmcommand and any other command using thenpmcontainer. - Added the
host-ipcommand to get the host machine IP address containers will be able to use to connect to the host (e.g. when setting up XDebug on Linux).
- Fixed an issue where the path to the WP directory would not build correctly on Windows systems.
- Allow opening a shell in the
cliservice to run wp-cli commands just usingtric cli.
- Set
COMPOSER_HTACCESS_PROTECT=0explicitly in thedocker-composeconfiguration file to avoid an.htaccessfile being created in the root directory of the current target.
- Update the WordPress image version, in the
tric-stack.build.ymlfile, from5.5to5.6to fix CI build issues.
- Add an argument, to the
resetcommand, to remove the default WordPress (/_wordpress) installation directory usingtric reset wp.
- Added the
composer-cachecommand so the host machine's composer cache can be leveraged within tric containers.
- Updated default WordPress image to
5.6-apache.
- Updated default repo org to
the-events-calendar.
- Fix an issue where commands that required a ready and available WordPress installation in the
tricWordPress directory would not take care to scaffold and install it; e.g.cliorsite-cli.
- Fix an issue where the
USING_CONTAINERSenvironment variable would be duplicated in environment files set up bytricinit command. - Fix an issue where a negative answer to build targets with sub-directories, e.g. TEC and ET, would result in the target being built anyway.
- Fix the XDebug version and
wordpressserviceDockerfileto keep using version2and not update to version3on a rebuild (e.g. one triggered bytric updateortric build-stackcommands). - Add the
tric sshcommand to allow opening a shell in a running stack service; differently from theshellcommand, thesshcommand will not start the service if it's not already running.
- Add support for the
TRIC_HOSTenvironment variable. This will override the default host machine IP address lookuptricwould perform on Linux or the hard-wiredhost.docker.internalhostnametricwould use on Windows and Mac host to set the defaultxdebug.remote_hostvalue. - Default to the host machin IP address to set
xdebug.remote_hostonly if the host has not been set by means of a call totric xdebug host <host>or by setting theXDHenvironment variable explicitly. - Fix an issue that would reset run settings stored in the
.env.tric.runfile when using thetric xdebug <key> <value>command. - Correctly handle Docker network removal in parallel tasks to avoid "error while removing network" errors.
- Add support for
tric runto run all the available Codeception test suites from the target one after another.
- Removed the 3s wait at start of the
codeceptionservice. - Fixed (in the context of the lucatume/dockerfiles repository) an issue that would cause Codeception tests to exit
0on failure and not1as expected.
- Fixed volumes setup to make sure the volume, and the host file structure, created by WordPress container is owned by the current user and not
root. - Fixed and issue that would change, on Linux, the file modes of all the used plugins, to
a+rwxwhen using theruncommand; fixes #36
- Executing
tric usewithout a target now attempts to set the current working directory as the target. tric infonow outputs all valid targets, which is whattric usewithout a valid target used to do.- The Composer prompt from
tric initno longer appears ifcomposer.jsonis not found, likewise for the NPM prompt ifpackage.jsonis not found. - Fixed an issue that would prevent the
npmandnpm_ltsservices from correctly returning their exit status. - Add support for the
--prettyflag to thenpmandnpm_ltscommands to print a more human-readable output.
- Fixed two issues in the
targetcommand where the command would fail if no previous target had been set. - Set the start of the random network subnet pool for parallel processes used by the
targetcommand to a higher number to reduce the chance of running into overlapping pool issues.
- Activate all debug options in the
wordpressservice. - Use a custom WordPress image for the stack, based on the default
wordpressone, but modified to support and use XDebug.
- Fixed a smaller issue in the
targetcommand.
- Add the
site-clicommand to start a wp-cli container on a running and ready WordPress stack.
- Add a check to ensure a target is set for commands that require it.
- Add the
npm_ltsservice and service to the stack to runnpmcommands on the current LTS version of node.
- Fixed an issue where the terminal columns and lines detection would cause issue in CI context.
- Fixed an issue where the
npmimage would not build correctly in CI context.
- Add support for the
bashsub-command to thetric clicommand to allow opening abashshell into theclicontainer to manage the WordPress installation currently being served bytric serve.
- Add support for multiple commands in the
targetcommand to allow running a set of commands on a set of targets.
- Update the WordPress version used in the stack to
5.5. - Fix handling of default answers in prompts.
- Fix an issue where
docker-composewould display an error due to missing default value for theTRIC_CURRENT_PROJECT_SUBDIRenv var.
- Fix an issue where the
function-mocker-cachevolume would be mounted withrootownership on Linux systems causing Function Mocker to fail while trying to set up cache in plugins that use it.
- Added the
tric targetcommand to support running the same command against multiple targets.
- Fix an issue where the
tric initcommand would not correctly pick up the existing environment files if not running from the plugin directory. - Added the
TRIC_INTERACTIVE,TRIC_BUILD_PROMPTandTRIC_BUILD_SUBDIRenv var to thetric inforeport.
- Added
tric build-subdirwhich allows you to control whether sub-directories (e.g.commonin The Events Calendar) should be built during composer/npm commands or not. - Fix an issue where the
build-promptstatus was reported incorrectly.
- Fix an issue with file modes on the WordPress container that would make its
wp-contentdirectoryrootowned on Linux hosts.
- Fix parallel processing closure argument requirements.
- Allow for additional git upstreams other than GitHub.
- Fix and re-enable the parallel processing functionality.
- Temporarily disabled the parallel processing functionality.
- When running parallel processes, use random subnets to avoid container collision.
- Add support for
DB_prefixed database credentials and name in the original.env.*files.
- Added
tric upgradewhich allows you to upgradetricto the latest tagged release.
- Prompt to
tric updatewhen container build version are out of sync from the tric version. - Output npm error log when one is generated.
- Adjust pathing of subdirectories within the tric stack so that npm can find a
.gitdirectory when performingnpm install. - Suppress the
fixuidcommand output in the npmdocker-entrypoint.sh. - Separated out poolable (passive) command functions from realtime command functions to prevent issues with interactivity.
- Added phpcs and phpcbf commands.
- Added parallel processing of commands.
- Changed
tric buildtotric build-stack.
- Ensure
.htaccessfile is present in_wordpress.
- Initial version