Pint is a PHP code-style fixer that's specifically created to work with Laravel. In this tutorial, I will show you how it works and how to automate its launch before or after you commit code to the repository.
Installation
To install Pint, there's only one step - installing via Composer:
composer require laravel/pint --dev
And that's it! You're ready to use Pint.
Using Pint Locally with Git Hooks
One of the options to use Pint is pre-commit hooks. This is great for those, who want to push their code to the repository only when it's properly formatted. Here's what you need to do:
Create a file .git/hooks/pre-commit
with the following content:
.git/hooks/pre-commit
#!/bin/shfiles=$(git diff --cached --name-only --diff-filter=ACM -- '*.php');vendor/bin/pint $files -q git add $files
Here's what this script does:
- Gets a list of
.php
files that were changed - Runs Pint on those files
- Adds those files to the commit
This allows seamless integration with Git. Once you attempt to commit something - it will reformat the code and push it to the repository.
Using Pint with GitHub Actions
Another option for Pint usage is GitHub Actions. For those unfamiliar, I have a separate video Advanced Laravel Testing: CI/CD with GitHub Actions.
It will run a check on GitHub automatically which will format all the files and make a new commit. To get this working, you need to do the following:
Create a file .github/workflows/pint.yml
with the following content:
.github/workflows/pint.yml
name: PHP Linting (Pint)on: workflow_dispatch: push: branches-ignore: - 'dependabot/npm_and_yarn/*'jobs: Pint: runs-on: ubuntu-latest permissions: contents: write steps: - uses: shivammathur/setup-php@15c43e89cdef867065b0213be354c2841860869e with: php-version: '8.1' - uses: actions/checkout@v3 - name: Copy .env run: php -r "file_exists('.env') || copy('.env.example', '.env');" - name: Install Dependencies run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist - name: Launch Pint inspection run: vendor/bin/pint - name: Commit changes uses: stefanzweifel/git-auto-commit-action@v4 with: commit_message: PHP Linting (Pint) skip_fetch: true
Here's what we are doing here:
- We are using the
shivammathur/setup-php
action to install the PHP - We are using the
actions/checkout
action to checkout the code - Copying .env file if it doesn't exist (just in case you want to do more than just Pint with this job)
- Installing dependencies with Composer
- Running Pint
- Committing changes with commit message
PHP Linting (Pint)
Once you commit this file, you should see that there's a new job in your Actions tab:
Clicking on it will give you all the information about the job:
And finally, you should see a new commit in your repository:
That's it! Now all your commits will be properly formatted after a push. Just don't forget to pull them!
for .gitlab-ci.yml