A robust Laravel package facilitating automatic updates from GitHub, GitLab, Bitbucket, or custom repositories for your Laravel applications.
Supports Laravel version 10 and above.
- Laravel Self Updater
- Multi-source Support: Update from GitHub, GitLab, Bitbucket, or custom repositories
- Simple Configuration: Easy setup via environment variables and config file
- Built-in Commands: Convenient commands for update checks and initiation
- File Exclusion: Protect sensitive files/folders during updates
- Error Handling: Comprehensive logging and error management
- Version Tracking: Utilizes
composer.json
for version management - UI Integration: Global Blade component for easy frontend implementation
- API Endpoints: Programmatic update management
- Security: Configurable middleware for API protection
- Composer Integration: Optional management of Composer dependencies during updates
- Extensibility: Support for custom VCS providers
-
Install the package via Composer:
composer require anisaronno/laravel-self-updater
-
Publish the configuration file:
php artisan vendor:publish --tag=self-updater-config
This creates
self-updater.php
in yourconfig
directory. -
(Optional) Publish assets and views:
php artisan vendor:publish --tag=self-updater-assets php artisan vendor:publish --tag=self-updater-views
Add these to your .env
file:
RELEASE_URL=https://github.com/anisAronno/laravel-starter
LICENSE_KEY=your_optional_purchase_key
RELEASE_URL
: Your repository's release URLLICENSE_KEY
: (Optional) For authenticated APIs or private repos
The config/self-updater.php
file contains important settings:
- Repository Configuration: Uses
VCSProviderFactory
to create an appropriate adapter based on yourRELEASE_URL
. - Excluded Items: Define files and folders to exclude from updates.
- Middleware: Specify which middleware to apply to the self-updater's API endpoints.
- Composer Dependencies: Configure whether to run Composer install or update during the update process.
Edit the exclude_items
array in config/self-updater.php
:
"exclude_items" => [
'.env',
'.git',
'storage',
'node_modules',
'vendor',
// Add your custom exclusions here
],
Configure the middleware in config/self-updater.php
:
"middleware" => ['web'],
Specify your app's version in composer.json
:
{
"version": "1.0.0"
}
Configure Composer behavior during updates in config/self-updater.php
:
'require_composer_install' => false,
'require_composer_update' => false,
Set these to true
to run Composer install or update respectively during the update process.
Extend functionality with custom VCS providers:
use AnisAronno\LaravelSelfUpdater\Services\VCSProvider\VCSProviderFactory;
// Register a new provider
VCSProviderFactory::registerProvider('custom-vcs.com', YourCustomVCSProvider::class);
// Remove a provider
VCSProviderFactory::removeProvider('custom-vcs.com');
// Check if a provider is registered
$isRegistered = VCSProviderFactory::hasProvider('custom-vcs.com');
// Get all registered providers
$providers = VCSProviderFactory::getProviders();
Ensure your custom provider implements VCSProviderInterface
.
After configuration changes, refresh the config cache:
php artisan config:cache
Run the following command to check for available updates:
php artisan update:check
To start the update process, use:
php artisan update:initiate
For Laravel 10, add to app/Console/Kernel.php
:
protected function schedule(Schedule $schedule)
{
$schedule->command('update:initiate')->dailyAt('01:00');
}
For Laravel 11+, add to routes/console.php
:
use Illuminate\Support\Facades\Schedule;
Schedule::command('update:initiate')->dailyAt('01:00');
The updater will warn about modified project files, excluding .env
and storage/
.
For custom update sources, ensure your API returns:
{
"version": "1.0.0",
"download_url": "https://example.com/api/v1/release",
"release_date": "01-02-2024",
"changelog": "Your changelog text"
}
Access these endpoints for programmatic updates:
- Check for updates:
GET /api/self-updater/check
- Initiate update:
POST /api/self-updater/update
These endpoints are protected by the middleware specified in the config file.
Use the global component in your views:
<x-self-updater />
We welcome contributions! Please see our Contribution Guide for details.
This package is open-source software licensed under the MIT License.