• Reading time ~ 2 min
  • 24.05.2023

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/sh
files=$(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!

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

ABOUT

Professional Fullstack Developer with extensive experience in website and desktop application development. Proficient in a wide range of tools and technologies, including Bootstrap, Tailwind, HTML5, CSS3, PUG, JavaScript, Alpine.js, jQuery, PHP, MODX, and Node.js. Skilled in website development using Symfony, MODX, and Laravel. Experience: Contributed to the development and translation of MODX3 i...

About author CrazyBoy49z
WORK EXPERIENCE
Contact
Ukraine, Lutsk
+380979856297