phil / dev-tools
Shared development tooling for PHIL and Tilttek packages: quality-tool configurations, Composer scripts, documentation checks and the package skeleton.
Requires
- php: >=8.5
- ext-mbstring: *
- symfony/console: ^8.2
Requires (Dev)
- bamarni/composer-bin-plugin: ^1.9
- brianium/paratest: ^7.27
- ergebnis/phpunit-slow-test-detector: ^2.27
- phpunit/phpunit: ^13.4
- shipmonk/composer-dependency-analyser: ^1.8
- symfony/http-client: ^8.2
- symfony/phpunit-bridge: ^8.2
Suggests
- symfony/http-client: For HttpRecording, to record and replay the HTTP exchanges of integration tests (8.2 or later)
- symfony/phpunit-bridge: For HttpRecording and the #[UseRecord] attribute of integration tests (8.2 or later)
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-11-08 14:54:36 UTC
README
Shared development tooling for PHIL and Tilttek packages: quality-tool configurations, Composer scripts, documentation checks and the package skeleton.
phil/dev-tools holds, once, what every PHIL and Tilttek package checks itself with: the configurations of PHP-CS-Fixer, PHPStan and its extensions, Rector, Deptrac, Arkitect, Infection, PHPUnit with ParaTest and PHPBench, the gates of the dependencies, of the Twig templates and of the scripts, the security checks — the taint analysis, fuzzing, the advisories and the bill of materials —, the backward-compatibility check, the Composer scripts that run them, the documentation checks, the standalone check of each package, the real servers of the integration tests, the HTTP recordings that replay them offline, the benchmarks, the hooks and the split of a monorepo, the matrix of PHP and Symfony versions, and the skeleton of a new package.
A package installs it in require-dev and runs vendor/bin/phil-dev init, which writes thin configuration files that
call the shared ones. Each package keeps its own paths and exceptions in a small phil-dev.php; in a monorepo, the
shared configurations find every package through its own files, so adding a package touches no file of the root and
several batches can work at once in their own worktrees.
Status
| Part | State |
|---|---|
Shared configurations, read through each package's phil-dev.php |
Implemented and tested |
init, new, check-docs, check-packages, infection, deptrac, witnesses, generate |
Implemented and tested |
| Per-package allowed dependencies, generated into Deptrac | Implemented and tested |
| Real servers, HTTP recordings, member autoloading | Implemented and tested |
The version matrix, php and matrix, check-packages --symfony |
Implemented and tested |
The gates audit, unused, normalize, twig and js, ParaTest, the PHPStan extensions |
Implemented and tested |
taint, fuzz, sbom, bc, twigstan |
Implemented and tested |
bench --baseline and --compare, bench:worker and the FrankenPHP service |
Implemented and tested |
split, the CaptainHook configuration, lint-docs, hotspots |
Implemented and tested |
Documentation
| Document | What it covers |
|---|---|
| Installation and usage | Installing, init, the Composer scripts, a new package. |
| Commands | Every command and option of phil-dev. |
| Configuration | How the configurations are layered, and every section of phil-dev.php. |
| Quality gates | What each gate checks, which checks are scripts of their own, the PHPStan witnesses, the Infection modes. |
| Security checks | The advisories, the taint analysis of Psalm, fuzzing, the bill of materials. |
| Benchmarks | PHPBench, the regressions against a baseline, the worker mode of FrankenPHP. |
| The monorepo workflow | The hooks, the split of the finished packages, the prose of the documentation, the hotspots. |
| Dependencies | The default every library may use, and what each package is allowed. |
| Real servers | MySQL, PostgreSQL and Gotenberg in Docker, and their variables. |
| HTTP recordings | Recording and replaying HTTP services with the recorder of Symfony 8.2. |
| The version matrix | The PHP and Symfony versions, adding at RC1 and enforcing at x.y.3. |
| The package skeleton | What new writes, the wording, the CHANGELOG rule, the documentation checks. |
| The add-on convention | Tagged services, extension points and when they are stable. |
| Extension points | What a project may change in this package. |
| Testing | This package's tests, and the test helpers. |
| Reference | Every class and file of the package. |
Quick start
composer require --dev phil/dev-tools vendor/bin/phil-dev init composer update composer deps:normalize:fix composer hooks composer gates
Requirements
PHP 8.5 or later; Docker for the real servers, FrankenPHP and the next PHP of the matrix; git for the split; cspell, markdownlint-cli2 and Vale, or Node.js for the first two, to lint the prose of the documentation.
Contributing
Contributions are welcome: read the contribution guide and the code of conduct. Report a vulnerability privately, as the security policy explains, never in a public issue.
License
MIT, © Philippe Gamache, doing business as Le Gnome Archiviste; a Parler Haut Interagir Librement project. See LICENSE.