
A comprehensive pre-deployment checklist that walks through environment validation, linting with Pint, static analysis with PHPStan, tests with coverage, security audits, and migration reviews before you ship. It's structured as seven sequential phases because environment checks need to pass before you bother running tests, and tests should be green before you verify deployment readiness. The migration phase is especially thorough, reminding you to check rollback paths and avoid irreversible data loss. If you're the type who's been bitten by a bad deploy because you forgot to verify queue configuration or cache warming, this gives you a repeatable pipeline. Works locally or in CI, with examples for both minimal flows and full coverage runs.
$ npx -y skills add affaan-m/everything-claude-code --skill laravel-verification --agent claude-codeInstalls into .claude/skills of the current project.
Run before PRs, after major changes, and pre-deploy.
php -v
composer --version
php artisan --version
.env is present and required keys existAPP_DEBUG=false for production environmentsAPP_ENV matches the target deployment (production, staging)If using Laravel Sail locally:
./vendor/bin/sail php -v
./vendor/bin/sail artisan --version
composer validate
composer dump-autoload -o
vendor/bin/pint --test
vendor/bin/phpstan analyse
If your project uses Psalm instead of PHPStan:
vendor/bin/psalm
php artisan test
Coverage (CI):
XDEBUG_MODE=coverage php artisan test --coverage
CI example (format -> static analysis -> tests):
vendor/bin/pint --test
vendor/bin/phpstan analyse
XDEBUG_MODE=coverage php artisan test --coverage
composer audit
php artisan migrate --pretend
php artisan migrate:status
Y_m_d_His_* (e.g., 2025_03_14_154210_create_orders_table.php) and describe the change clearlydown() methods and avoid irreversible data loss without explicit backupsphp artisan optimize:clear
php artisan config:cache
php artisan route:cache
php artisan view:cache
storage/ and bootstrap/cache/ are writable in the target environmentphp artisan schedule:list
php artisan queue:failed
If Horizon is used:
php artisan horizon:status
If queue:monitor is available, use it to check backlog without processing jobs:
php artisan queue:monitor default --max=100
Active verification (staging only): dispatch a no-op job to a dedicated queue and run a single worker to process it (ensure a non-sync queue connection is configured).
php artisan tinker --execute="dispatch((new App\\Jobs\\QueueHealthcheck())->onQueue('healthcheck'))"
php artisan queue:work --once --queue=healthcheck
Verify the job produced the expected side effect (log entry, healthcheck table row, or metric).
Only run this on non-production environments where processing a test job is safe.
Minimal flow:
php -v
composer --version
php artisan --version
composer validate
vendor/bin/pint --test
vendor/bin/phpstan analyse
php artisan test
composer audit
php artisan migrate --pretend
php artisan config:cache
php artisan queue:failed
CI-style pipeline:
composer validate
composer dump-autoload -o
vendor/bin/pint --test
vendor/bin/phpstan analyse
XDEBUG_MODE=coverage php artisan test --coverage
composer audit
php artisan migrate --pretend
php artisan optimize:clear
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan schedule:list
Sponsors