A docker image to run PHP common QA tools:
- composer-unused
- jsonlint
- parallel-lint
- pdepend
- phan
- php-cs-fixer (with kubawerlos/php-cs-fixer-custom-fixers)
- phpcs
- phpdd
- phpinsights
- phploc
- phpmd
- phpmetrics
- phpmnd
- phpstan (with deprecation, dibi, doctrine, phpunit, beberlei-assert, strict-rules and symfony)
- twigcs
- yaml-lint
You can also install XDebug (not enabled) and AST PHP extensions.
Each major version of the build can change the default version of PHP, and major versions of the tools, see the build args section while selecting the corresponding tag in this repository to know which ones are used.
| Tag | Based image | 
|---|---|
| 1-alpine | php:8.2-cli-alpine | 
| 1 | php:8.2-cli | 
Use the latest tag to target the most recent non-alpine release.
It uses the PHP CLI official image.
The first optional ARG is PHP_VERSION (default to 8.2):
docker build alximy/php-qa-tools:latest --tag my-qa-tools --build-arg WITH_COMPOSER_DEPS=1 \
    --build-arg PHP_VERSION=8.0 \
    --build-arg PHP_CS_FIXER_VERSION=^2 \
    --build-arg PHPSTAN_VERSION=^0Then run inside your project:
docker run --rm --volume=`pwd`:/var/qa/ --workdir=/var/qa/ -- my-qa-tools CMDwhere CMD can be any binary from the list above.
Use --it -- my-qa-tools bash if you need interaction.
To inherit from your custom PHP image, use the build arg FROM_IMAGE.
If the image does not have Composer you must use WITH_COMPOSER_DEPS=1 as build
arg.
Alternatively you can use compose.yaml or compose-override.yaml.
First, copy the Dockerfile or
Dockerfile.alpine and entrypoint.sh
from this repository in your project, let's say in devops/qa/, then add the
following to your configuration:
services:
    # ...
    qa:
        container_name: ${COMPOSE_PROJECT_NAME}_qa
        build:
            dockerfile: ./devops/qa/Dockerfile
            args:
                PHP_VERSION: 8.0
                # Optionally inherit from the project PHP image
                #FROM_IMAGE: ${COMPOSE_PROJECT_NAME}_php
                #WITH_XDEBUG: 1
                #WITH_AST: 1
                #PHP_CS_FIXER_VERSION: ^2
                #PHPSTAN_VERSION: ^0
        # Add volumes and working dir according to your project:
        #volumes:
        #    - ./:/var/qa:rw,cached
        #working_dir: /var/qaThen use it as:
docker compose run --rm qa CMDor:
docker compose run --rm -it qa bash- PHP_VERSION=8.2
- FROM_IMAGE=php:${PHP_VERSION}-cli
Required if you don't inherit a PHP image with composer installed. They are not installed by default.
- WITH_COMPOSER_DEPS=1
Following versions are the defaults:
- COMPOSER_UNUSED_VERSION=^0.8
- JSONLINT_VERSION=^1
- PARALLEL_LINT_VERSION=^1
- PDEPEND_VERSION=^2
- PHAN_VERSION=^5
- PHP_CS_FIXER_VERSION=^3
- PHP_CODESNIFFER_VERSION=^3
- PHP_DEPRECATION_DETECTOR_VERSION=^2
- PHP_INSIGHTS_VERSION=^2
- PHP_LOC_VERSION=^7
- PHP_MD_VERSION=^2
- PHP_METRICS_VERSION=^2
- PHP_MND_VERSION=^3
- PHPSTAN_VERSION=^1
- TWIG_CS_VERSION=^6
- YAML_LINTER_VERSION=^6
- PHP_CS_FIXER_EXTENSIONS=""
- PHP_CODESNIFFER_EXTENSIONS=""
- PHPSTAN_EXTENSIONS=""
Example: --build-arg PHPSTAN_EXTENSIONS="my/phpstan-extension:*".
You can add many extensions separated by a space.
They are not installed by default:
- WITH_XDEBUG=1
- WITH_AST=1
XDebug is disabled by default when installed, to enable it use:
ENABLE_XDEBUG=1 as build arg.
This image comes with graphviz, it will allow you to dump Symfony Workflows
using the dot command:
docker run --rm -it --volume=`pwd`:/var/qa/ --workdir=/var/qa/ -- \
    my-qa-tools \
    bashThen, in the prompt:
bin/console workflow:dump my_workflow | dot -Tpng > var/my_workflow.png