A Dagger module (TypeScript SDK, .dagger/) runs the quality suite in
php:8.5-cli-trixie containers — reproducible locally and in CI:
dagger call quality # or: mise ci — runs all four checks in parallel
dagger call test # PHPUnit (SQLite test database)
dagger call lint # php-cs-fixer --dry-run
dagger call analyse # PHPStan level 8
dagger call rector-check # Rector --dry-runDagger needs a Docker engine, so run it from the host (or a CI runner), not inside the devcontainer.
base() builds a PHP 8.5 container with the required extensions (intl, pdo_pgsql,
redis, …), a Composer binary, and cached Composer downloads / PHPStan results
(Dagger cache volumes), then mounts the project source and runs
composer install --no-scripts.
The source mount excludes vendor, node_modules, var, .env*, .git,
.dagger, public/build, and config/jwt:
- A minimal
.envis generated inside the container (SQLiteDATABASE_URL, null mailer, dummy secrets) so the suite is fully self-contained. config/jwtis excluded sotest()always generates a fresh JWT keypair whose passphrase matches that generated.env— locally-generated dev keys would mismatch.var/cacheandvar/logare recreated inside the container before Symfony boots.
test() provisions the SQLite schema (doctrine:schema:create --env=test) and the
JWT keypair before running PHPUnit; quality() runs all four functions with
Promise.all, each in its own container fanning out from the shared base() layer.