Automatic configuration for Laravel apps to apply Tighten's standard linting & code standards.
Automatically apply Tighten’s default code style for Laravel apps.
Duster is built on top of the following tools:
Tighten
presetTighten
preset which is mostly PSR1 with some Tighten-specific rulesCustomOrderedClassElementsFixer
Tighten-specific order of class elementsLaravel
preset with some Tighten-specific rulesYou can view a list of the compiled rules and examples of what they do in the style guide.
You can install the package via composer:
composer require tightenco/duster --dev
Optionally you can publish a GitHub Actions config:
./vendor/bin/duster github-actions
Or you can publish Husky Hooks:
./vendor/bin/duster husky-hooks
If you are using a containerized environment and do not have PHP installed locally, you can use the --env
option to specify it:
./vendor/bin/duster husky-hooks --env=ddev
Supported environments are ddev
, warden
lando
, and sail
.
To lint everything at once:
./vendor/bin/duster lint
To fix everything at once:
./vendor/bin/duster fix
To dust only files that have uncommitted changes according to Git, you may use the --dirty
option:
./vendor/bin/duster lint --dirty
#or
./vendor/bin/duster fix --dirty
To view all available commands:
./vendor/bin/duster
#or
./vendor/bin/duster commands
./vendor/bin/sail php ./vendor/bin/duster
Alternatively, Sail has a bin script that eases the execution of package binaries, so you do the same thing like this:
./vendor/bin/sail bin duster
If you need to include or exclude files or directories for each tool you can create a duster.json
config file in your project root:
{
"include": [
"bin",
"scripts",
"src",
"tests"
],
"exclude": [
"tests/fixtures"
"**/folderToExclude/**"
]
}
To run additional scripts as part of Duster first add them to duster.json
as part of scripts
separated into lint
and fix
.
The key is the name of the command (used with the --using
flag), and the value is an array of arguments passed to Symfony\Component\Process\Process
.
{
"scripts": {
"lint": {
"phpstan": ["./vendor/bin/phpstan", "analyse"]
}
},
"processTimeout": 120
}
Duster will pick these up automatically when running either lint
or fix
.
By default, additional scripts timeout after 60 seconds. You can overwrite this setting using the processTimeout
key.
To customize which tools Duster runs, or the order in which they are executed you can use the --using
flag and supply a comma-separated list of commands:
./vendor/bin/duster lint --using="phpstan,tlint,pint"
Create a tlint.json
file in your project root. Learn more in the TLint documentation.
Create a .phpcs.xml.dist
file in your project root with the following:
<?xml version="1.0"?>
<ruleset>
<file>app</file>
<file>config</file>
<file>database</file>
<file>public</file>
<file>resources</file>
<file>routes</file>
<file>tests</file>
<rule ref="Tighten"/>
</ruleset>
Now you can add customizations below the <rule ref="Tighten"/>
line or even disable the Tighten rule to use your own ruleset. Learn more in this introductory article.
Create a .php-cs-fixer.dist.php
file in your project root with the contents from Duster’s .php-cs-fixer.dist.php
file. Learn more in the PHP CS Fixer documentation.
Create a pint.json
file in your project root, you can use Duster’s pint.json
file as a starting point. Learn more in the Pint documentation.
There’s a GitHub Action you use to clean-up your workflows.
Warning Heads Up! Workflows that commit to your repo will stop any currently running workflows and not trigger another workflow run.
One solution is to run your other workflows after Duster has completed by updating the trigger on those workflows:
on:
# Commits made in Duster Fix will not trigger any workflows
# This workflow is configured to run after Duster finishes
workflow_run:
workflows: ["Duster Fix"]
types:
- completed
Please see CONTRIBUTING for details.
If you discover any security-related issues, please email [email protected] instead of using the issue tracker.
elbgoods/ci-test-tools
packageThe MIT License (MIT). Please see License File for more information.