Skip to content

Latest commit

 

History

History
237 lines (167 loc) · 6.17 KB

README.md

File metadata and controls

237 lines (167 loc) · 6.17 KB

Laravel Self Updater

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

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

  1. Install the package via Composer:

    composer require anisaronno/laravel-self-updater
  2. Publish the configuration file:

    php artisan vendor:publish --tag=self-updater-config

    This creates self-updater.php in your config directory.

  3. (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 URL
  • LICENSE_KEY: (Optional) For authenticated APIs or private repos

Config File

The config/self-updater.php file contains important settings:

  1. Repository Configuration: Uses VCSProviderFactory to create an appropriate adapter based on your RELEASE_URL.
  2. Excluded Items: Define files and folders to exclude from updates.
  3. Middleware: Specify which middleware to apply to the self-updater's API endpoints.
  4. 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.