givanov95 / laravel-git-hooks
Composer plugin that installs a pre-commit git hook into Laravel + Vite projects — runs php-cs-fixer, a debug-statement guard, the Vite build (on frontend changes) and the test suite before each commit. Bypass with --no-verify.
Package info
github.com/givanov95/laravel-git-hooks
Type:composer-plugin
pkg:composer/givanov95/laravel-git-hooks
Requires
- php: ^8.3
- composer-plugin-api: ^2.0
Requires (Dev)
- composer/composer: ^2.5
- phpunit/phpunit: ^11.0|^12.0
README
A tiny Composer plugin that wires a pre-commit git hook into your Laravel + Vite
projects. On every commit it runs your quality gate; if any step fails, the commit is
aborted.
It is intentionally small and self-contained — one bash hook plus a few lines of PHP to install it. The hook is the authoritative source of truth, versioned in this package, so every project that requires it stays in sync.
Heads-up: a local git hook is a fast-feedback gate, not a security boundary — it is trivially bypassed (
--no-verify) and only runs for people who have it installed. Pair it with CI (GitHub Actions) for the real, enforced gate.
What the hook runs
Each step is skipped gracefully when its tooling isn't present, so the same hook works across projects with different setups:
- php-cs-fixer — formats staged
*.phpfiles (needsvendor/bin/php-cs-fixer+ a.php-cs-fixer.php/.php-cs-fixer.dist.phpconfig), then re-stages them. - Debug-statement guard — blocks the commit if staged
*.php/*.vue/*.js/*.tsfiles containconsole.log(,dd(ordump(. - Vite build — runs
npm run buildonly when frontend files are staged and abuildscript exists inpackage.json. - Tests — runs
php artisan test(orvendor/bin/phpunit).
Installation
composer require --dev givanov95/laravel-git-hooks
That's it. The plugin installs the hook into .git/hooks/pre-commit after install/update.
Because it's a plugin, Composer will ask you to trust it the first time (or add it to
allow-plugins in your project's composer.json):
{
"config": {
"allow-plugins": {
"givanov95/laravel-git-hooks": true
}
}
}
If a hand-written pre-commit already exists, it is backed up to pre-commit.local.bak.
Manual install (plugins disabled)
vendor/bin/laravel-git-hooks
Bypassing & skipping
| Goal | How |
|---|---|
| Skip everything for one commit | git commit --no-verify |
| Skip every step (keep the hook) | SKIP_HOOK=1 git commit ... |
| Skip just the build | SKIP_BUILD=1 git commit ... |
| Skip just the tests | SKIP_TESTS=1 git commit ... |
| Skip php-cs-fixer | SKIP_CSFIXER=1 git commit ... |
Requirements
- PHP
^8.3 - Composer
^2.0 - Git, and (per step)
bash,npm, your project'sphp artisan/phpunit
License
MIT © Georgi Ivanov