jeffersongoncalves/laravel-zero-self-update
Composer 安装命令:
composer require jeffersongoncalves/laravel-zero-self-update
包简介
Reusable self-update service and base command for Laravel Zero CLIs distributed as a PHAR via GitHub Releases.
README 文档
README
laravel-zero-self-update
Reusable self-update service and base command for Laravel Zero CLIs that are distributed as a single-file PHAR via GitHub Releases.
Most Laravel Zero PHAR tools end up shipping the exact same self-update logic: read the current version, hit the GitHub "latest release" API, compare versions, download the .phar asset, back up the running PHAR and atomically swap it in. This package extracts that logic into one well-tested service (PharUpdater) plus an abstract self-update command base, so each CLI only has to declare its repository, asset name and version.
Installation
composer require jeffersongoncalves/laravel-zero-self-update
Requires PHP ^8.2, guzzlehttp/guzzle ^7.10 and illuminate/console ^11|^12.
Usage
Base command
In your Laravel Zero app, create a command that extends the base and implements the three abstract methods. Override currentVersion() to read your app version from config.
<?php namespace App\Commands; use JeffersonGoncalves\LaravelZero\SelfUpdate\SelfUpdateCommand as BaseSelfUpdateCommand; class SelfUpdateCommand extends BaseSelfUpdateCommand { protected function githubRepo(): string { return 'jeffersongoncalves/git-worktree-cli'; } protected function assetName(): string { return 'git-worktree.phar'; } protected function tempPrefix(): string { return 'git_worktree_'; } protected function currentVersion(): string { return config('app.version', 'unreleased'); } }
That gives you a self-update command:
my-cli self-update # download and install the latest release my-cli self-update --check # only report whether an update is available
Self-update only runs when the app is executed as a PHAR; otherwise it tells the user to update via Git or Composer.
Service directly
You can also use PharUpdater on its own:
use JeffersonGoncalves\LaravelZero\SelfUpdate\PharUpdater; $updater = new PharUpdater( githubRepo: 'jeffersongoncalves/git-worktree-cli', assetName: 'git-worktree.phar', tempPrefix: 'git_worktree_', currentVersion: config('app.version', 'unreleased'), ); $release = $updater->getLatestRelease(); // ['tag' => 'v1.2.0', 'url' => '...'] if ($updater->isUpdateAvailable($updater->getCurrentVersion(), $release['tag'])) { $tempFile = $updater->download($release['url']); $updater->replacePhar($tempFile); }
A custom Guzzle Client can be injected as the last constructor argument (handy for testing or proxies).
Public classes
| Class | Description |
|---|---|
JeffersonGoncalves\LaravelZero\SelfUpdate\PharUpdater |
Service that talks to GitHub Releases, compares versions, downloads and swaps the PHAR. |
JeffersonGoncalves\LaravelZero\SelfUpdate\SelfUpdateCommand |
Abstract self-update {--check} command wiring the service into a Laravel/Laravel Zero command. |
PharUpdater methods
getCurrentVersion(): stringisRunningAsPhar(): boolgetLatestRelease(): array{tag: string, url: string}isUpdateAvailable(string $current, string $latest): booldownload(string $url): stringreplacePhar(string $tempFile): voidisValidPhar(string $path): bool
Testing
composer test
License
MIT. See LICENSE.
统计信息
- 总下载量: 0
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 1
- 依赖项目数: 4
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2026-06-23
