- Docker — for testing against all supported PHP versions without installing them locally.
- PHP
^8.3and Composer — for running checks locally when your host PHP satisfies the constraint.
The repository ships with a Docker setup that covers all three supported PHP versions (8.3, 8.4, 8.5). Each service gets its own isolated vendor/ volume, so the versions coexist without interfering.
Build the images once after cloning:
composer build
# equivalent: docker compose buildRebuild only when the Dockerfile changes (e.g. a new PHP version is added) or when images have been explicitly removed. Normal day-to-day use does not require a rebuild.
composer 83 # develop and iterate against PHP 8.3
composer docker-fast-all # run check:fast on all PHP versions before pushingcomposer 83 # PHP 8.3
composer 84 # PHP 8.4
composer 85 # PHP 8.5
# equivalent: composer docker:check-fast-83 / docker:check-fast-84 / docker:check-fast-85composer docker-fast-all
# equivalent: composer docker:check-fast-allPass any Composer script directly as an argument:
docker compose run --rm php83 composer check:phpunit
docker compose run --rm php83 composer check:behat
docker compose run --rm php84 composer check:staticcomposer down
# equivalent: docker compose downThere is no docker:up counterpart. All containers are run with --rm and are removed automatically when a check finishes, so there is no persistent "up" state. Nothing runs between checks — the only footprint between runs is disk space used by the stored images and volumes. docker:down is only needed to clean up residual containers and networks left behind by an interrupted or failed run.
Both images and named volumes (vendor/ per PHP version) are preserved by docker:down, so you can resume work with composer 83 directly — no rebuild required. To remove volumes as well, run docker compose down --volumes directly (the next run will reinstall dependencies).
If your host PHP satisfies ^8.3, you can run checks directly:
composer install
composer fast # tests + static analysis
composer test # tests only
composer static # static analysis only
composer fix-all # apply Rector and PHPCBF fixesSee composer list for all available scripts and their aliases.
- Write to the PHP 8.3 floor. Do not use language features or functions introduced after PHP 8.3, even though CI also runs on 8.4 and 8.5.
- Follow the project's coding standards and static analysis toolchain. Run
composer check:staticto verify; runcomposer fix:allto autocorrect where possible. - Every non-generated file must end with a trailing newline.
Anything that is not production library code, documentation, or examples must be added to .gitattributes with export-ignore so it is excluded from Composer/GitHub package archives.