andrew-a / laravel-selfupdater

为您的自托管Laravel应用程序提供自动更新功能。

dev-master 2018-07-05 22:41 UTC

This package is auto-updated.

Last update: 2024-09-08 07:28:13 UTC


README

Latest Stable Version Total Downloads Build Status StyleCI codecov

本软件包为Laravel 5应用程序提供了一些基本方法,以实现自我更新功能。已经内置了一些通过GitHub提供自我更新机制的方法。

通常,当您分发需要更新机制的自托管Laravel应用程序时,您需要这个软件包,因为您不想让您的用户烦恼于Git和/或Composer命令;

使用Composer安装

目前有两个分支

  • master:兼容PHP 7.x
  • 5.x:兼容PHP 5.5 + 5.6

请根据您的PHP版本选择正确的分支。

使用Composer从master分支安装最新版本

$ composer require codedge/laravel-selfupdater

这将把codedge/laravel-selfupdater软件包添加到您的composer.json文件,并下载项目。

您需要将服务提供者在您的config/app.php文件中包含进去,并且可选地包含facade [2]

// config/app.php

return [

    //...
    
    'providers' => [
        // ...
        
        Codedge\Updater\UpdaterServiceProvider::class, // [1]
    ],
    
    // ...
    
    'aliases' => [
        // ...
        
        'Updater' => Codedge\Updater\UpdaterManager::class, // [2]

]

此外,将监听器添加到您的app/Providers/EventServiceProvider.php

// app/Providers/EventServiceProvider.php

/**
 * The event handler mappings for the application.
 *
 * @var array
 */
protected $listen = [
    // ...
    
    \Codedge\Updater\Events\UpdateAvailable::class => [
        \Codedge\Updater\Listeners\SendUpdateAvailableNotification::class
    ],
    \Codedge\Updater\Events\UpdateSucceeded::class => [
        \Codedge\Updater\Listeners\SendUpdateSucceededNotification::class
    ],

];

配置

安装软件包后,您需要通过以下方式发布配置文件

$ php artisan vendor:publish --provider="Codedge\Updater\UpdaterServiceProvider"

注意:如果您想使用GitHub作为更新源,请确保在您的config/self-updater.php文件中输入正确的vendor和repository名称。

运行Artisan命令

可以在更新过程前后运行Artisan命令,并可以在config/self-updater.php中配置。

示例

'artisan_commands' => [
    'pre_update' => [
        'updater:prepare' => [
            'class' => \App\Console\Commands\PreUpdateTasks::class,
            'params' => []
        ],
    ],
    'post_update' => [
        'postupdate:cleanup' => [
            'class' => \App\Console\Commands\PostUpdateCleanup::class,
            'params' => [
                'log' => 1,
                'reset' => false,
                // etc.
            ]
        ]
    ]
]

通过电子邮件发送通知

您需要指定一个收件人电子邮件地址和一个收件人姓名,以接收更新可用通知。您可以通过将SELF_UPDATER_MAILTO_NAMESELF_UPDATER_MAILTO_ADDRESS添加到您的.env文件中来指定这些值。

使用方法

要启动更新过程,例如在一个控制器中,只需使用

public function update()
{
    // This downloads and install the latest version of your repo
    Updater::update();
    
    // Just download the source and do the actual update elsewhere
    Updater::fetch();
    
    // Check if a new version is available and pass current version
    Updater::isNewVersionAvailable('1.2');
}

当然,您可以通过方法注入来注入updater

public function update(UpdaterManager $updater)
{

    $updater->update(); // Same as above
    
    // .. and shorthand for this:
    $updater->source()->update;
    
    $updater->fetch() // Same as above...
}

注意:目前,源获取是一个同步过程。它不在后台运行。

使用GitHub

该软件包附带一个Github源存储库类型,用于从GitHub获取发布内容 - 实际上是通过GitHub拉取您的软件的最新版本。

只需确保在您的config/self-updater.php文件中设置了正确的存储库。

扩展和添加新的源存储库类型

如果您想从其他地方拉取新版本,请随时创建自己的源存储库类型,但请注意,对于新的源存储库类型

  • 它必须扩展AbstractRepositoryType
  • 它必须实现SourceRepositoryTypeContract

因此,完美的类头看起来像这样

class BitbucketRepositoryType extends AbstractRepositoryType implements SourceRepositoryTypeContract

之后,您可以创建自己的服务提供者,例如BitbucketUpdaterServiceProvider,其boot方法如下

public function boot()
{
    Updater::extend('bitbucket', function($app) {
        return Updater::sourceRepository(new BitbucketRepositoryType);
    });
}

现在您可以通过以下方式调用您自己的更新源

public function update(UpdaterManager $updater)
{
    $updater->source('bitbucket')->update();
}

贡献

请参阅贡献指南

路线图

这是一份快速绘制的路线图,其中列出了还需要实现的内容。

许可

MIT 许可证 (MIT)。更多信息请参阅 许可证文件