causefx/laravel-selfupdater

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

资助包维护!
codedge

dev-master 2022-10-04 21:28 UTC

This package is not auto-updated.

Last update: 2024-10-03 05:54:28 UTC


README

Latest Stable Version Total Downloads StyleCI Codacy Badge codecov

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

支持的更新提供者

  • GitHub
  • Gitlab
  • Gitea
  • 基于 HTTP 的存档

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

安装

使用 Composer 从 master 安装最新版本

$ composer require codedge/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.
            ]
        ]
    ]
]

配置下载路径

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

通过电子邮件通知

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

私有仓库

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

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

用法

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

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

    // 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);

    } else {
        echo "No new version available.";
    }

});

目前,源代码的获取是一个 同步 过程。它不会在后台运行。

使用 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存档,并且应包含所有根目录下的文件,而不是在名为存档本身的额外文件夹中。

使用Gitea

使用Gitea,您可以使用带有tag发布的自己的Gitea实例。

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

贡献

请参阅贡献指南

许可

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