xcremant/laravel-selfupdater

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

dev-master 2023-02-26 17:01 UTC

This package is auto-updated.

Last update: 2024-09-26 20:46:40 UTC


README

Latest Stable Version Total Downloads StyleCI Codacy Badge codecov

本包为您的 Laravel 应用程序提供了一些实现自更新功能的基本方法。

支持的更新提供者

  • GitHub
  • Gitlab
  • Gitea
  • 本地存储
  • 基于 Http 的存档

通常您需要在分发需要一些更新机制但不使用 Composer 的自托管 Laravel 应用程序时使用此功能。

安装

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

$ composer require xcremant/laravel-selfupdater

配置

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

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

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

设置当前安装版本

在开始更新之前,请确保正确设置已安装的版本。您负责在配置文件中设置当前版本,或者更好的是通过环境变量 SELF_UPDATER_VERSION_INSTALLED 来设置。

tag 基于的更新

将安装版本设置为发布中设置的一个标签。

branch 基于的更新

将安装版本设置为最新提交中的一个日期时间。
有效的版本可以是: 2020-04-19T22:35:48Z

运行 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.
            ]
        ]
    ]
]

升级脚本(可选)

您可以创建一个名为 upgrade.php 的 PHP 文件来执行自定义操作(例如,在数据库中创建新表或从目标应用程序中删除目录/文件)。此文件必须包含一个名为 before()after() 的函数,它们返回布尔值(以将执行状态传递给 LaraUpdater),请参阅此示例

配置下载路径

有时您的网络主机不允许将文件保存到服务器的 /tmp 目录。您可以通过将环境变量 SELF_UPDATER_DOWNLOAD_PATH 设置为不同的值来更改应用程序下载到的文件夹。只需记住,该文件夹不在您的应用程序所在的文件夹内,因为它可能在更新期间被覆盖。

通过电子邮件发送通知

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

私有仓库

私有仓库可以通过(Bearer)令牌访问。配置文件中的每个仓库都应该有一个 private_access_token 字段,您可以在此处设置令牌。

ℹ 不要在令牌前添加 Bearer 前缀。这会自动完成。

使用方法

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

Route::get('/', function (\Codedge\Updater\UpdaterManager $updater) {

    $updater->source()->preUpdateArtisanCommands();

    // Check if new version is available
    if($updater->source()->isNewVersionAvailable()) {

        // Get the current installed version
        echo $updater->source()->getVersionInstalled();

        // Get the new version available
        $versionAvailable = $updater->source()->getVersionAvailable();

        // Create a release
        $release = $updater->source()->fetch($versionAvailable);

        // Run the update process
        $updater->source()->update($release);
        
        // Set new version in .env
        $updater->source()->setNewVersion($versionAvailable);

    } else {
        echo "No new version available.";
    }
    
    $updater->source()->postUpdateArtisanCommands();

});

Route::get('/', function (\Codedge\Updater\UpdaterManager $updater) {

    dispatch(new UpdateJob());

});

使用 GitHub

本包包含一个 GitHub 源代码仓库类型,用于从 GitHub 获取发布版本 -基本上使用 GitHub 来拉取您软件的最新版本。

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

标签更新

这是默认设置。更新将通过使用带有标签的提交,即发布来获取。

分支更新

通过配置文件中的use_branch设置选择应使用的分支(配置文件内链接)

// ...
'repository_types' => [
    'github' => [
        'type' => 'github',
        'repository_vendor' => env('SELF_UPDATER_REPO_VENDOR', ''),
        'repository_name' => env('SELF_UPDATER_REPO_NAME', ''),
        // ...
        'use_branch' => 'v2',
   ],
   // ...
];

使用Gitlab

可以通过config/self-updater.php配置Gitlab或使用适当的环境变量。

// ...
'repository_types' => [
    'gitlab' => [
            'type'                 => 'gitlab',
            'repository_id'        => env('SELF_UPDATER_REPO_URL', ''),
            'download_path'        => env('SELF_UPDATER_DOWNLOAD_PATH', '/tmp'),
            'private_access_token' => env('SELF_UPDATER_GITLAB_PRIVATE_ACCESS_TOKEN', ''),
   ],
   // ...
];

ℹ 虽然环境变量的名称为SELF_UPDATER_REPO_URL,但只需指定您的仓库ID。

使用HTTP存档

该软件包包含一个HTTP源代码库类型,可以从包含zip存档的HTTP目录列表中获取版本。

要使用HTTP存档运行,请在您的.env文件中使用以下设置

存档URL应只包含一个简单的目录列表,对应相应的zip存档。

SELF_UPDATER_PKG_FILENAME_FORMAT包含所有webapp更新包的文件名格式。例如,当存档URL上列出的更新包名称如webapp-v1.2.0.zipwebapp-v1.3.5.zip等时,格式应为webapp-v_VERSION_。其中_VERSION_部分用于表示MAJOR.MINOR.PATCH版本号的语义版本化变量。zip扩展名将自动添加。

目标存档文件必须是zip存档,并且应包含所有位于根级别的文件,而不是在名为存档本身的额外文件夹中。

使用LOCAL存档

要使用LOCAL存档运行,请在您的.env文件中使用以下设置

SELF_UPDATER_PKG_FILENAME_FORMAT包含所有webapp更新包的文件名格式。例如,当存档URL上列出的更新包名称如webapp-v1.2.0.zipwebapp-v1.3.5.zip等时,格式应为webapp-v_VERSION_。其中_VERSION_部分用于表示MAJOR.MINOR.PATCH版本号的语义版本化变量。zip扩展名将自动添加。

目标存档文件必须是zip存档,并且应包含所有位于根级别的文件,而不是在名为存档本身的额外文件夹中。

使用Gitea

使用Gitea,您可以使用带有tag-releases的自定义Gitea实例。

要使用它,请在您的.env文件中使用以下设置

贡献

请参阅贡献指南

许可协议

MIT许可协议(MIT)。有关更多信息,请参阅许可文件