├── Dockerfile ├── Dockerfile.alpine ├── README.md └── entrypoint.sh /Dockerfile: -------------------------------------------------------------------------------- 1 | ARG PHP_VERSION=8.2 2 | ARG FROM_IMAGE=php:${PHP_VERSION}-cli 3 | 4 | FROM ${FROM_IMAGE} as build-qa-tools 5 | 6 | ARG WITH_COMPOSER_DEPS="" 7 | 8 | RUN if [ -n "${WITH_COMPOSER_DEPS}" ]; then \ 9 | set -xe; \ 10 | apt-get update && apt-get install -y \ 11 | git \ 12 | unzip \ 13 | libzip-dev \ 14 | && docker-php-ext-install -j$(nproc) \ 15 | zip; \ 16 | fi 17 | 18 | COPY --from=composer /usr/bin/composer /usr/local/bin/composer 19 | 20 | ENV COMPOSER_ALLOW_SUPERUSER=1 21 | ENV COMPOSER_HOME=/usr/local/composer 22 | ENV QA_DEPS_DIR=/usr/local/src 23 | 24 | # Default QA tools versions 25 | ARG COMPOSER_UNUSED_VERSION=^0.8 26 | ARG JSONLINT_VERSION=^1 27 | ARG PARALLEL_LINT_VERSION=^1 28 | ARG PDEPEND_VERSION=^2 29 | ARG PHAN_VERSION=^5 30 | ARG PHP_CS_FIXER_VERSION=^3 31 | ARG PHP_CODESNIFFER_VERSION=^3 32 | ARG PHP_DEPRECATION_DETECTOR_VERSION=^2 33 | ARG PHP_INSIGHTS_VERSION=^2 34 | ARG PHP_LOC_VERSION=^7 35 | ARG PHP_MD_VERSION=^2 36 | ARG PHP_METRICS_VERSION=^2 37 | ARG PHP_MND_VERSION=^3 38 | ARG PHPSTAN_VERSION=^1 39 | ARG TWIG_CS_VERSION=^6 40 | ARG YAML_LINTER_VERSION=^6 41 | 42 | # Allow custom extensions 43 | ARG PHP_CS_FIXER_EXTENSIONS="" 44 | ARG PHP_CODESNIFFER_EXTENSIONS="" 45 | ARG PHPSTAN_EXTENSIONS="" 46 | 47 | RUN set -xe; \ 48 | mkdir -p ${QA_DEPS_DIR}; \ 49 | cd ${QA_DEPS_DIR}; \ 50 | composer init --name=${COMPOSE_PROJECT_NAME:-alximy}/php-qa-tools --no-interaction; \ 51 | composer config allow-plugins.bamarni/composer-bin-plugin true; \ 52 | composer config extra.bamarni-bin --json '{"bin-links":true, "forward-command":false}'; \ 53 | composer config --global allow-plugins.dealerdirect/phpcodesniffer-composer-installer true; \ 54 | composer config --global allow-plugins.phpstan/extension-installer true 55 | 56 | WORKDIR $QA_DEPS_DIR 57 | 58 | RUN composer require --optimize-autoloader \ 59 | bamarni/composer-bin-plugin 60 | 61 | RUN composer bin composer-unused require --dev --optimize-autoloader \ 62 | icanhazstring/composer-unused:$COMPOSER_UNUSED_VERSION 63 | 64 | RUN composer bin jsonlint require --dev --optimize-autoloader \ 65 | seld/jsonlint:$JSONLINT_VERSION 66 | 67 | RUN composer bin parallel-lint require --dev --optimize-autoloader \ 68 | php-parallel-lint/php-parallel-lint:$PARALLEL_LINT_VERSION 69 | 70 | RUN composer bin pdepend require --dev --optimize-autoloader \ 71 | pdepend/pdepend:$PDEPEND_VERSION 72 | 73 | RUN composer bin phan require --dev --optimize-autoloader \ 74 | phan/phan:$PHAN_VERSION 75 | 76 | RUN composer bin php-cs-fixer require --dev --optimize-autoloader \ 77 | friendsofphp/php-cs-fixer:$PHP_CS_FIXER_VERSION \ 78 | kubawerlos/php-cs-fixer-custom-fixers:* \ 79 | $PHP_CS_FIXER_EXTENSIONS 80 | 81 | RUN composer bin phpcs require --dev --optimize-autoloader \ 82 | squizlabs/php_codesniffer:$PHP_CODESNIFFER_VERSION \ 83 | $PHP_CODESNIFFER_EXTENSIONS 84 | 85 | RUN composer bin phpdd require --dev --optimize-autoloader \ 86 | wapmorgan/php-deprecation-detector:$PHP_DEPRECATION_DETECTOR_VERSION 87 | 88 | RUN composer bin phpinsights require --dev --optimize-autoloader \ 89 | nunomaduro/phpinsights:$PHP_INSIGHTS_VERSION 90 | 91 | RUN composer bin phploc require --dev --optimize-autoloader \ 92 | phploc/phploc:$PHP_LOC_VERSION 93 | 94 | RUN composer bin phpmd require --dev --optimize-autoloader \ 95 | phpmd/phpmd:$PHP_MD_VERSION 96 | 97 | RUN composer bin phpmetrics require --dev --optimize-autoloader \ 98 | phpmetrics/phpmetrics:$PHP_METRICS_VERSION 99 | 100 | RUN composer bin phpmnd require --dev --optimize-autoloader \ 101 | povils/phpmnd:$PHP_MND_VERSION 102 | 103 | RUN composer bin phpstan require --dev --optimize-autoloader \ 104 | phpstan/phpstan:$PHPSTAN_VERSION \ 105 | phpstan/extension-installer:* \ 106 | phpstan/phpstan-deprecation-rules:* \ 107 | phpstan/phpstan-dibi:* \ 108 | phpstan/phpstan-doctrine:* \ 109 | phpstan/phpstan-phpunit:* \ 110 | phpstan/phpstan-beberlei-assert:* \ 111 | phpstan/phpstan-strict-rules:* \ 112 | phpstan/phpstan-symfony:* \ 113 | $PHPSTAN_EXTENSIONS 114 | 115 | RUN composer bin twigcs require --dev --optimize-autoloader \ 116 | friendsoftwig/twigcs:$TWIG_CS_VERSION 117 | 118 | RUN composer bin yaml-lint require --dev --optimize-autoloader \ 119 | symfony/console:$YAML_LINTER_VERSION \ 120 | symfony/yaml:$YAML_LINTER_VERSION 121 | 122 | FROM ${FROM_IMAGE} as build-su-exec 123 | 124 | RUN set -ex; \ 125 | curl -o /usr/local/bin/su-exec.c https://raw.githubusercontent.com/ncopa/su-exec/master/su-exec.c; \ 126 | apt-get update && apt-get install -y --no-install-recommends gcc libc-dev; \ 127 | gcc -Wall \ 128 | /usr/local/bin/su-exec.c -o/usr/local/bin/su-exec; \ 129 | chown root:root /usr/local/bin/su-exec; \ 130 | chmod 0755 /usr/local/bin/su-exec 131 | 132 | FROM ${FROM_IMAGE} as wrap-php 133 | 134 | ARG ENABLE_XDEBUG="" 135 | ARG WITH_XDEBUG="" 136 | ARG WITH_AST="" 137 | 138 | RUN if [ -n "${WITH_XDEBUG}" ]; then \ 139 | pecl install xdebug \ 140 | && echo "xdebug.mode=debug" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \ 141 | && echo "xdebug.client_host = host.docker.internal" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \ 142 | if [ -n "${ENABLE_XDEBUG}" ]; then \ 143 | docker-php-ext-enable xdebug; \ 144 | fi \ 145 | fi 146 | 147 | RUN if [ -n "${WITH_AST}" ]; then \ 148 | pecl install ast \ 149 | && docker-php-ext-enable ast; \ 150 | fi 151 | 152 | RUN set -xe; \ 153 | apt-get update && apt-get install -y \ 154 | bash \ 155 | bash-completion \ 156 | graphviz 157 | 158 | COPY --from=build-qa-tools /usr/local/bin/composer /usr/local/bin/composer 159 | COPY --from=build-qa-tools /usr/local/src /usr/local/src 160 | COPY --from=build-su-exec /usr/local/bin/su-exec /usr/local/bin/ 161 | 162 | ENV PATH /usr/local/src/vendor/bin:$PATH 163 | ENV QA_VENDOR_PATH /usr/local/src/vendor-bin 164 | 165 | RUN set -ex; \ 166 | addgroup php-qa-tools; \ 167 | adduser php-qa-tools --ingroup php-qa-tools --no-create-home; \ 168 | chown -R php-qa-tools:php-qa-tools /usr/local/bin/composer; \ 169 | chown -R php-qa-tools:php-qa-tools /usr/local/src/vendor/bin 170 | 171 | COPY entrypoint.sh /usr/local/bin/ 172 | ENTRYPOINT ["entrypoint.sh"] 173 | 174 | LABEL com.alximy.version=1.0 175 | LABEL com.alximy.release-date="2023-08-25" 176 | LABEL com.alximy.author="jules.pietri@alximy.io" 177 | -------------------------------------------------------------------------------- /Dockerfile.alpine: -------------------------------------------------------------------------------- 1 | ARG PHP_VERSION=8.2 2 | ARG FROM_IMAGE=php:${PHP_VERSION}-cli-alpine 3 | 4 | FROM ${FROM_IMAGE} as build-qa-tools 5 | 6 | ARG WITH_COMPOSER_DEPS="" 7 | 8 | RUN if [ -n "${WITH_COMPOSER_DEPS}" ]; then \ 9 | set -xe; \ 10 | apk update && apk add \ 11 | git \ 12 | unzip \ 13 | libzip-dev \ 14 | && docker-php-ext-install -j$(nproc) \ 15 | zip; \ 16 | fi 17 | 18 | COPY --from=composer /usr/bin/composer /usr/local/bin/composer 19 | 20 | ENV COMPOSER_ALLOW_SUPERUSER=1 21 | ENV COMPOSER_HOME=/usr/local/composer 22 | ENV QA_DEPS_DIR=/usr/local/src 23 | 24 | # Default QA tools versions 25 | ARG COMPOSER_UNUSED_VERSION=^0.8 26 | ARG JSONLINT_VERSION=^1 27 | ARG PARALLEL_LINT_VERSION=^1 28 | ARG PDEPEND_VERSION=^2 29 | ARG PHAN_VERSION=^5 30 | ARG PHP_CS_FIXER_VERSION=^3 31 | ARG PHP_CODESNIFFER_VERSION=^3 32 | ARG PHP_DEPRECATION_DETECTOR_VERSION=^2 33 | ARG PHP_INSIGHTS_VERSION=^2 34 | ARG PHP_LOC_VERSION=^7 35 | ARG PHP_MD_VERSION=^2 36 | ARG PHP_METRICS_VERSION=^2 37 | ARG PHP_MND_VERSION=^3 38 | ARG PHPSTAN_VERSION=^1 39 | ARG TWIG_CS_VERSION=^6 40 | ARG YAML_LINTER_VERSION=^6 41 | 42 | # Allow custom extensions 43 | ARG PHP_CS_FIXER_EXTENSIONS="" 44 | ARG PHP_CODESNIFFER_EXTENSIONS="" 45 | ARG PHPSTAN_EXTENSIONS="" 46 | 47 | RUN set -xe; \ 48 | mkdir -p ${QA_DEPS_DIR}; \ 49 | cd ${QA_DEPS_DIR}; \ 50 | composer init --name=${COMPOSE_PROJECT_NAME:-alximy}/php-qa-tools --no-interaction; \ 51 | composer config allow-plugins.bamarni/composer-bin-plugin true; \ 52 | composer config extra.bamarni-bin --json '{"bin-links":true, "forward-command":false}'; \ 53 | composer config --global allow-plugins.dealerdirect/phpcodesniffer-composer-installer true; \ 54 | composer config --global allow-plugins.phpstan/extension-installer true 55 | 56 | WORKDIR $QA_DEPS_DIR 57 | 58 | RUN composer require --optimize-autoloader \ 59 | bamarni/composer-bin-plugin 60 | 61 | RUN composer bin composer-unused require --dev --optimize-autoloader \ 62 | icanhazstring/composer-unused:$COMPOSER_UNUSED_VERSION 63 | 64 | RUN composer bin jsonlint require --dev --optimize-autoloader \ 65 | seld/jsonlint:$JSONLINT_VERSION 66 | 67 | RUN composer bin parallel-lint require --dev --optimize-autoloader \ 68 | php-parallel-lint/php-parallel-lint:$PARALLEL_LINT_VERSION 69 | 70 | RUN composer bin pdepend require --dev --optimize-autoloader \ 71 | pdepend/pdepend:$PDEPEND_VERSION 72 | 73 | RUN composer bin phan require --dev --optimize-autoloader \ 74 | phan/phan:$PHAN_VERSION 75 | 76 | RUN composer bin php-cs-fixer require --dev --optimize-autoloader \ 77 | friendsofphp/php-cs-fixer:$PHP_CS_FIXER_VERSION \ 78 | kubawerlos/php-cs-fixer-custom-fixers:* \ 79 | $PHP_CS_FIXER_EXTENSIONS 80 | 81 | RUN composer bin phpcs require --dev --optimize-autoloader \ 82 | squizlabs/php_codesniffer:$PHP_CODESNIFFER_VERSION \ 83 | $PHP_CODESNIFFER_EXTENSIONS 84 | 85 | RUN composer bin phpdd require --dev --optimize-autoloader \ 86 | wapmorgan/php-deprecation-detector:$PHP_DEPRECATION_DETECTOR_VERSION 87 | 88 | RUN composer bin phpinsights require --dev --optimize-autoloader \ 89 | nunomaduro/phpinsights:$PHP_INSIGHTS_VERSION 90 | 91 | RUN composer bin phploc require --dev --optimize-autoloader \ 92 | phploc/phploc:$PHP_LOC_VERSION 93 | 94 | RUN composer bin phpmd require --dev --optimize-autoloader \ 95 | phpmd/phpmd:$PHP_MD_VERSION 96 | 97 | RUN composer bin phpmetrics require --dev --optimize-autoloader \ 98 | phpmetrics/phpmetrics:$PHP_METRICS_VERSION 99 | 100 | RUN composer bin phpmnd require --dev --optimize-autoloader \ 101 | povils/phpmnd:$PHP_MND_VERSION 102 | 103 | RUN composer bin phpstan require --dev --optimize-autoloader \ 104 | phpstan/phpstan:$PHPSTAN_VERSION \ 105 | phpstan/extension-installer:* \ 106 | phpstan/phpstan-deprecation-rules:* \ 107 | phpstan/phpstan-dibi:* \ 108 | phpstan/phpstan-doctrine:* \ 109 | phpstan/phpstan-phpunit:* \ 110 | phpstan/phpstan-beberlei-assert:* \ 111 | phpstan/phpstan-strict-rules:* \ 112 | phpstan/phpstan-symfony:* \ 113 | $PHPSTAN_EXTENSIONS 114 | 115 | RUN composer bin twigcs require --dev --optimize-autoloader \ 116 | friendsoftwig/twigcs:$TWIG_CS_VERSION 117 | 118 | RUN composer bin yaml-lint require --dev --optimize-autoloader \ 119 | symfony/console:$YAML_LINTER_VERSION \ 120 | symfony/yaml:$YAML_LINTER_VERSION 121 | 122 | FROM ${FROM_IMAGE} as build-su-exec 123 | 124 | RUN set -ex; \ 125 | curl -o /usr/local/bin/su-exec.c https://raw.githubusercontent.com/ncopa/su-exec/master/su-exec.c; \ 126 | apk add gcc libc-dev; \ 127 | gcc -Wall \ 128 | /usr/local/bin/su-exec.c -o/usr/local/bin/su-exec; \ 129 | chown root:root /usr/local/bin/su-exec; \ 130 | chmod 0755 /usr/local/bin/su-exec 131 | 132 | FROM ${FROM_IMAGE} as wrap-php 133 | 134 | ARG ENABLE_XDEBUG="" 135 | ARG WITH_XDEBUG="" 136 | ARG WITH_AST="" 137 | 138 | RUN if [ -n "${WITH_XDEBUG}" ]; then \ 139 | pecl install xdebug \ 140 | && echo "xdebug.mode=debug" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \ 141 | && echo "xdebug.client_host = host.docker.internal" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \ 142 | if [ -n "${ENABLE_XDEBUG}" ]; then \ 143 | docker-php-ext-enable xdebug; \ 144 | fi \ 145 | fi 146 | 147 | RUN if [ -n "${WITH_AST}" ]; then \ 148 | pecl install ast \ 149 | && docker-php-ext-enable ast; \ 150 | fi 151 | 152 | RUN set -xe; \ 153 | apk add \ 154 | bash \ 155 | bash-completion \ 156 | graphviz 157 | 158 | COPY --from=build-qa-tools /usr/local/bin/composer /usr/local/bin/composer 159 | COPY --from=build-qa-tools /usr/local/src /usr/local/src 160 | COPY --from=build-su-exec /usr/local/bin/su-exec /usr/local/bin/ 161 | 162 | ENV PATH /usr/local/src/vendor/bin:$PATH 163 | ENV QA_VENDOR_PATH /usr/local/src/vendor-bin 164 | 165 | RUN addgroup php-qa-tools; \ 166 | adduser php-qa-tools --ingroup php-qa-tools --no-create-home; \ 167 | chown -R php-qa-tools:php-qa-tools /usr/local/bin/composer; \ 168 | chown -R php-qa-tools:php-qa-tools /usr/local/src/vendor/bin 169 | 170 | COPY entrypoint.sh /usr/local/bin/ 171 | ENTRYPOINT ["entrypoint.sh"] 172 | 173 | LABEL com.alximy.version=1.0 174 | LABEL com.alximy.release-date="2023-08-25" 175 | LABEL com.alximy.author="jules.pietri@alximy.io" 176 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Docker PHP QA Tools 2 | 3 | ## About 4 | 5 | A docker image to run PHP common QA tools: 6 | 7 | - [composer-unused](https://github.com/composer-unused/composer-unused) 8 | - [jsonlint](https://github.com/Seldaek/jsonlint) 9 | - [parallel-lint](https://github.com/php-parallel-lint/PHP-Parallel-Lint) 10 | - [pdepend](http://pdepend.org/documentation/getting-started.html) 11 | - [phan](https://github.com/phan/phan) 12 | - [php-cs-fixer](https://github.com/FriendsOfPHP/PHP-CS-Fixer) (with `kubawerlos/php-cs-fixer-custom-fixers`) 13 | - [phpcs](https://github.com/squizlabs/PHP_CodeSniffer/wiki) 14 | - [phpdd](https://github.com/wapmorgan/PhpDeprecationDetector) 15 | - [phpinsights](https://phpinsights.com) 16 | - [phploc](https://github.com/sebastianbergmann/phploc) 17 | - [phpmd](https://github.com/phpmd/phpmd) 18 | - [phpmetrics](https://www.phpmetrics.org/index.html) 19 | - [phpmnd](https://github.com/povils/phpmnd) 20 | - [phpstan](https://phpstan.org/user-guide/getting-started) (with deprecation, dibi, doctrine, phpunit, beberlei-assert, 21 | strict-rules and symfony) 22 | - [twigcs](https://github.com/friendsoftwig/twigcs) 23 | - [yaml-lint](https://github.com/symfony/symfony/blob/6.0/src/Symfony/Component/Yaml/Command/LintCommand.php) 24 | 25 | You can also install XDebug (not enabled) and AST PHP extensions. 26 | 27 | ## Usage 28 | 29 | ### Tags 30 | 31 | Each major version of the build can change the default version of PHP, and 32 | major versions of the tools, see the [build args section](#build-args) while 33 | selecting the corresponding tag in this repository to know which ones are used. 34 | 35 | | Tag | Based image | 36 | |:--------:|:------------------:| 37 | | 1-alpine | php:8.2-cli-alpine | 38 | | 1 | php:8.2-cli | 39 | 40 | Use the `latest` tag to target the most recent non-alpine release. 41 | 42 | ### With Docker 43 | 44 | It uses the `PHP CLI` official image. 45 | 46 | The first optional ARG is `PHP_VERSION` (default to 8.2): 47 | 48 | ```bash 49 | docker build alximy/php-qa-tools:latest --tag my-qa-tools --build-arg WITH_COMPOSER_DEPS=1 \ 50 | --build-arg PHP_VERSION=8.0 \ 51 | --build-arg PHP_CS_FIXER_VERSION=^2 \ 52 | --build-arg PHPSTAN_VERSION=^0 53 | ``` 54 | 55 | Then run inside your project: 56 | 57 | ```bash 58 | docker run --rm --volume=`pwd`:/var/qa/ --workdir=/var/qa/ -- my-qa-tools CMD 59 | ``` 60 | 61 | where `CMD` can be any binary from the list above. 62 | Use `--it -- my-qa-tools bash` if you need interaction. 63 | 64 | To inherit from your custom PHP image, use the build arg `FROM_IMAGE`. 65 | If the image does not have Composer you must use `WITH_COMPOSER_DEPS=1` as build 66 | arg. 67 | 68 | ### With Docker Compose 69 | 70 | Alternatively you can use `compose.yaml` or `compose-override.yaml`. 71 | First, copy the [`Dockerfile`](/Dockerfile) or 72 | [`Dockerfile.alpine`](/Dockerfile.alpine) and [`entrypoint.sh`](/entrypoint.sh) 73 | from this repository in your project, let's say in `devops/qa/`, then add the 74 | following to your configuration: 75 | 76 | ```yaml 77 | services: 78 | # ... 79 | 80 | qa: 81 | container_name: ${COMPOSE_PROJECT_NAME}_qa 82 | build: 83 | dockerfile: ./devops/qa/Dockerfile 84 | args: 85 | PHP_VERSION: 8.0 86 | # Optionally inherit from the project PHP image 87 | #FROM_IMAGE: ${COMPOSE_PROJECT_NAME}_php 88 | #WITH_XDEBUG: 1 89 | #WITH_AST: 1 90 | #PHP_CS_FIXER_VERSION: ^2 91 | #PHPSTAN_VERSION: ^0 92 | 93 | # Add volumes and working dir according to your project: 94 | #volumes: 95 | # - ./:/var/qa:rw,cached 96 | #working_dir: /var/qa 97 | ``` 98 | 99 | Then use it as: 100 | 101 | ```bash 102 | docker compose run --rm qa CMD 103 | ``` 104 | 105 | or: 106 | 107 | ```bash 108 | docker compose run --rm -it qa bash 109 | ``` 110 | 111 | ### Build args 112 | 113 | #### Customized `FROM` 114 | - `PHP_VERSION=8.2` 115 | - `FROM_IMAGE=php:${PHP_VERSION}-cli` 116 | 117 | #### Installing Composer deps 118 | Required if you don't inherit a PHP image with composer installed. They are not 119 | installed by default. 120 | 121 | - `WITH_COMPOSER_DEPS=1` 122 | 123 | #### Custom tools versions 124 | Following versions are the defaults: 125 | - `COMPOSER_UNUSED_VERSION=^0.8` 126 | - `JSONLINT_VERSION=^1` 127 | - `PARALLEL_LINT_VERSION=^1` 128 | - `PDEPEND_VERSION=^2` 129 | - `PHAN_VERSION=^5` 130 | - `PHP_CS_FIXER_VERSION=^3` 131 | - `PHP_CODESNIFFER_VERSION=^3` 132 | - `PHP_DEPRECATION_DETECTOR_VERSION=^2` 133 | - `PHP_INSIGHTS_VERSION=^2` 134 | - `PHP_LOC_VERSION=^7` 135 | - `PHP_MD_VERSION=^2` 136 | - `PHP_METRICS_VERSION=^2` 137 | - `PHP_MND_VERSION=^3` 138 | - `PHPSTAN_VERSION=^1` 139 | - `TWIG_CS_VERSION=^6` 140 | - `YAML_LINTER_VERSION=^6` 141 | 142 | #### Custom tools extensions: 143 | - `PHP_CS_FIXER_EXTENSIONS=""` 144 | - `PHP_CODESNIFFER_EXTENSIONS=""` 145 | - `PHPSTAN_EXTENSIONS=""` 146 | 147 | Example: `--build-arg PHPSTAN_EXTENSIONS="my/phpstan-extension:*"`. 148 | 149 | You can add many extensions separated by a space. 150 | 151 | #### Installing PHP extensions 152 | They are not installed by default: 153 | - `WITH_XDEBUG=1` 154 | - `WITH_AST=1` 155 | 156 | XDebug is disabled by default when installed, to enable it use: 157 | `ENABLE_XDEBUG=1` as build arg. 158 | 159 | ### Bonus 160 | 161 | This image comes with `graphviz`, it will allow you to dump Symfony Workflows 162 | using the `dot` command: 163 | 164 | ```bash 165 | docker run --rm -it --volume=`pwd`:/var/qa/ --workdir=/var/qa/ -- \ 166 | my-qa-tools \ 167 | bash 168 | ``` 169 | 170 | Then, in the prompt: 171 | 172 | ```bash 173 | bin/console workflow:dump my_workflow | dot -Tpng > var/my_workflow.png 174 | ``` 175 | -------------------------------------------------------------------------------- /entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | usage() 5 | { 6 | echo "Usage: 7 | composer-unused ... 8 | jsonlint ... 9 | parallel-lint ... 10 | pdepend ... 11 | phan ... 12 | php-cs-fixer ... 13 | phpcs ... 14 | phpdd ... 15 | phpinsights ... 16 | phploc ... 17 | phpmd ... 18 | phpmetrics ... 19 | phpmnd ... 20 | phpstan ... 21 | twigcs ... 22 | yaml-lint ..." 23 | 24 | exit 25 | } 26 | 27 | uid=$(stat -c %u .) 28 | gid=$(stat -c %g .) 29 | 30 | if [ $uid == 0 ] && [ $gid == 0 ]; then 31 | if [ $# -eq 0 ]; then 32 | usage 33 | else 34 | if [ -d "${QA_VENDOR_PATH}/$1" ]; then 35 | export QA_TOOL="$1" 36 | else 37 | export QA_TOOL="all" 38 | fi 39 | 40 | # always update dependencies 41 | composer --working-dir=/usr/local/src bin "$QA_TOOL" update 42 | 43 | exec "$@" 44 | fi 45 | fi 46 | 47 | if [ $# -eq 0 ]; then 48 | usage 49 | else 50 | if [ -d "${QA_VENDOR_PATH}/$1" ]; then 51 | export QA_TOOL="$1" 52 | else 53 | export QA_TOOL="all" 54 | fi 55 | 56 | # always update dependencies 57 | composer --working-dir=/usr/local/src bin "$QA_TOOL" update 58 | 59 | exec su-exec php-qa-tools "$@" 60 | fi 61 | --------------------------------------------------------------------------------