ikechukwukalu/makeservice
Laravel package that adds a make:service Artisan command to scaffold dedicated service classes, helping keep controllers and models lean by moving business logic into reusable, testable services. A lightweight way to organize application code and speed up development.
php constraint, your Docker/CI base image, and your laravel/framework version. Run php -v and php artisan about to see what you're actually on.4.0.0 major bump implies a breaking-change document. Check the repo for UPGRADE.md / CHANGELOG.md and the README's "Upgrading" section before running composer update. The release notes shown here only describe platform/tooling changes — verify there is nothing else in the tag diff (composer diff or the GitHub compare view between v3.x and v4.0.0).composer require <vendor>/<package>:^4.0
php artisan vendor:publish --provider="Vendor\Package\PackageServiceProvider"
php artisan migrate # only if the package ships migrations
Package discovery should register the service provider automatically; if not, add it to bootstrap/providers.php (Laravel 11/12 style) rather than the legacy config/app.php array.config/<package>.php (all tunables and their env var names), then the package's facade/contract — that's the contract you'll be coding against.php artisan tinker, using a throwaway record. This validates credentials, migrations, and config in about two minutes before you build anything on top of it.App\Services\... adapter that delegates to the package's facade/contract and resolve that from the container. When v5 lands you change one file, and your tests can swap in a fake without touching package internals.
// AppServiceProvider::register()
$this->app->bind(InvoiceGateway::class, fn ($app) => new PackageInvoiceGateway(
$app->make(\Vendor\Package\Contracts\Client::class)
));
config/<package>.php reading from env(), and add the keys to .env.example. Never call env() from application code — it returns null once config:cache runs.$tries, $backoff, and failed() handling. Use the package's events/webhooks as triggers rather than polling.getPackageProviders() / defineEnvironment() in your base TestCase if you maintain the package or a fork.#[Test], #[DataProvider('method')], #[Depends], #[Group]. Also confirm phpunit.xml uses the current schema (<source> instead of <coverage><include>).8.2, 8.3, 8.4 × Laravel 12 (plus your lowest supported Laravel if the constraint allows it). Pin orchestra/testbench to ^10.0 and phpunit/phpunit to ^11.0 so CI fails loudly on drift rather than silently resolving something unexpected.composer why-not <vendor>/<package> ^4.0 # who's blocking the upgrade
composer update <vendor>/<package> --with-all-dependencies
php:8.2-cli), platform.php in composer.json, CI runners, Laravel Forge/Envoyer/Vapor build images, and any shared-hosting PHP selector all need bumping. This is the single most common cause of "works locally, fails in CI" after this release.@test, @dataProvider, and @covers annotations to be ignored or error. Grep for @test and @dataProvider before upgrading:
grep -rn --include=*.php -E '@(test|dataProvider|depends|covers)\b' tests/
TestCase from v3-era Testbench is not the v10 one — regenerate it from the Testbench skeleton rather than patching.app/Http/Kernel.php; middleware, exception handling, and scheduling live in bootstrap/app.php. If the package's install docs tell you to edit Kernel.php, those instructions are stale — translate them to ->withMiddleware() / ->withExceptions().vendor:publish --force silently overwrites your edited config, and in a major bump the config file's shape may have changed. Diff the package's config/ against your published copy before re-publishing:
diff vendor/<vendor>/<package>/config/<package>.php config/<package>.php
config:cache / route:cache produces bugs that look like package regressions but aren't:
php artisan optimize:clear
^4.0 is right for the constraint, but for the initial upgrade window a lock file plus a green test run matters more than the constraint. The release notes describe tooling, not API — so the risk is concentrated in transitive dependency resolution, which composer why-not surfaces immediately.php artisan about for versions, (2) composer show <vendor>/<package> to confirm 4.x actually installed, (3) optimize:clear, (4) re-run the package's own test suite or a tinker smoke test to isolate package vs. your integration.How can I help you explore Laravel packages today?