anisaronno / laravel-self-updater
Laravel Self Updater is a package that helps you to update your Laravel application automatically.
Fund package maintenance!
Buy Me A Coffee
Requires
- php: ^8.1
- ext-json: *
- ext-zip: *
- illuminate/support: ^10.0|^11.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.64
- mockery/mockery: ^1.6
- orchestra/testbench: ^8.0.0
- phpunit/phpunit: ^10.4
README
A robust Laravel package facilitating automatic updates from GitHub, GitLab, Bitbucket, or custom repositories for your Laravel applications.
Supports Laravel version 10 and above.
Table of Contents
- Laravel Self Updater
Features
- 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
Installation
-
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
Configuration
Environment Variables
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
Config File
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.
Excluding Items from Updates
Edit the exclude_items
array in config/self-updater.php
:
"exclude_items" => [ '.env', '.git', 'storage', 'node_modules', 'vendor', // Add your custom exclusions here ],
Setting Middleware
Configure the middleware in config/self-updater.php
:
"middleware" => ['web'],
Application Version
Specify your app's version in composer.json
:
{ "version": "1.0.0" }
Composer Dependencies
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.
Custom VCS Providers
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
Usage
Checking for Updates
Run the following command to check for available updates:
php artisan update:check
Initiating Updates
To start the update process, use:
php artisan update:initiate
Scheduling Automatic Updates
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');
Handling Modified Files
The updater will warn about modified project files, excluding .env
and storage/
.
Custom Update Sources
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" }
API Integration
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.
Blade Component
Use the global component in your views:
<x-self-updater />
Contributing
We welcome contributions! Please see our Contribution Guide for details.
License
This package is open-source software licensed under the MIT License.