Toolbox
Helps to discover and install tools.
Use cases
Toolbox started its life as a simple script in the phpqa docker image. Its purpose was to install set of tools while building the docker image and it's still its main goal. It has been extracted as a separate project to make maintenance easier and enable new use cases.
Available tools
- composer - Dependency Manager for PHP
- composer-bin-plugin - Composer plugin to install bin vendors in isolated locations
- box - Fast, zero config application bundler with PHARs
- box-legacy - Legacy version of box
- analyze - Visualizes metrics and source code
- behat - Helps to test business expectations
- churn - Discovers good candidates for refactoring
- composer-normalize - Composer plugin to normalize composer.json files
- composer-unused - Show unused packages by scanning your code
- dephpend - Detect flaws in your architecture
- deprecation-detector - Finds usages of deprecated code
- deptrac - Enforces dependency rules between software layers
- diffFilter - Applies QA tools to run on a single pull request
- ecs - Sets up and runs coding standard checks
- infection - AST based PHP Mutation Testing Framework
- parallel-lint - Checks PHP file syntax
- paratest - Parallel testing for PHPUnit
- pdepend - Static Analysis Tool
- phan - Static Analysis Tool
- php-coupling-detector - Detects code coupling issues
- php-cs-fixer - PHP Coding Standards Fixer
- php-formatter - Custom coding standards fixer
- php-semver-checker - Suggests a next version according to semantic versioning
- phpDocumentor - Documentation generator
- phpbench - PHP Benchmarking framework
- phpa - Checks for weak assumptions
- phpat - Easy to use architecture testing tool
- phpca - Finds usage of non-built-in extensions
- phpcb - PHP Code Browser
- phpcbf - Automatically corrects coding standard violations
- phpcf - Finds usage of deprecated features
- phpcov - a command-line frontend for the PHP_CodeCoverage library
- phpcpd - Copy/Paste Detector
- phpcs - Detects coding standard violations
- phpda - Generates dependency graphs
- phpdoc-to-typehint - Automatically adds type hints and return types based on PHPDocs
- phpinsights - Analyses code quality, style, architecture and complexity
- phplint - Lints php files in parallel
- phploc - A tool for quickly measuring the size of a PHP project
- phpmd - A tool for finding problems in PHP code
- phpmetrics - Static Analysis Tool
- phpmnd - Helps to detect magic numbers
- phpspec - SpecBDD Framework
- phpstan - Static Analysis Tool
- phpstan-deprecation-rules - PHPStan rules for detecting deprecated code
- phpstan-ergebnis-rules - Additional rules for PHPstan
- phpstan-strict-rules - Extra strict and opinionated rules for PHPStan
- phpstan-doctrine - Doctrine extensions for PHPStan
- phpstan-phpunit - PHPUnit extensions and rules for PHPStan
- phpstan-symfony - Symfony extension for PHPStan
- phpstan-beberlei-assert - PHPStan extension for beberlei/assert
- phpstan-webmozart-assert - PHPStan extension for webmozart/assert
- phpstan-exception-rules - PHPStan rules for checked and unchecked exceptions
- phpunit - The PHP testing framework
- phpunit-7 - The PHP testing framework (7.x version)
- psalm - Finds errors in PHP applications
- psecio-parse - Scans code for potential security-related issues
- rector - Tool for instant code upgrades and refactoring
- roave-backward-compatibility-check - Tool to compare two revisions of a class API to check for BC breaks
- security-checker - Checks composer dependencies for known security vulnerabilities
- simple-phpunit - Provides utilities to report legacy tests and usage of deprecated code
Removed tools
- composer-normalize - Composer plugin to normalize composer.json files
- design-pattern - Detects design patterns
- testability - Analyses and reports testability issues of a php codebase
- phpstan-localheinz-rules - Additional rules for PHPstan
Installation
Get the toolbox.phar
from the latest release.
The command below should do the job:
curl -s https://api.github.com/repos/jakzal/toolbox/releases/latest \
| grep "browser_download_url.*toolbox.phar" \
| cut -d '"' -f 4 \
| xargs curl -Ls -o toolbox \
&& chmod +x toolbox
Usage
List available tools
./toolbox list-tools
Filter tools by tags
To exclude some tools from the listing multiple --exclude-tag
options can be added.
The --tag
option can be used to filter tools by tags.
./toolbox list-tools --exclude-tag exclude-php:7.3 --exclude-tag foo --tag bar
Install tools
./toolbox install
Install tools in a custom directory
By default tools are installed in the /usr/local/bin
directory. To perform an installation in another location,
pass the --target-dir
option to the install
command. Also, to change the location composer packages are installed in,
export the COMPOSER_HOME
environment variable.
mkdir /tools
export COMPOSER_HOME=/tools/.composer
export PATH="/tools:$COMPOSER_HOME/vendor/bin:$PATH"
./toolbox install --target-dir /tools
The target dir can also be configured with the TOOLBOX_TARGET_DIR
environment variable.
Dry run
To only see what commands would be executed, use the dry run mode:
./toolbox install --dry-run
Filter tools by tags
To exclude some tools from the installation multiple --exclude-tag
options can be added.
The --tag
option can be used to filter tools by tags.
./toolbox install --exclude-tag exclude-php:7.3 --exclude-tag foo --tag bar
Test if installed tools are usable
./toolbox test
Dry run
To only see what commands would be executed, use the dry run mode:
./toolbox test --dry-run
Filter tools by tags
To exclude some tools from the generated test command multiple --exclude-tag
options can be added.
The --tag
option can be used to filter tools by tags.
./toolbox test --exclude-tag exclude-php:7.3 --exclude-tag foo --tag bar
Tools definitions
By default resources/pre-installation.json
and resources/tools.json
are used to load tool definitions.
Definitions can be loaded from customised files by passing the --tools
option(s):
./toolbox list-tools --tools path/to/file1.json --tools path/to/file2.json
Tool definition location(s) can be also specified with the TOOLBOX_JSON
environment variable:
TOOLBOX_JSON='path/to/file1.json,path/to/file2.json' ./toolbox list-tools
Tool tags
Tools can be tagged in order to enable grouping and filtering them.
The tags below have a special meaning:
pre-installation
- these tools will be installed before any other tools.exclude-php:7.3
,exclude-php:7.1
etc - used to exclude installation on the specified php version.
Contributing
Please read the Contributing guide to learn about contributing to this project. Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.