mirror of
https://github.com/coollabsio/coolify.git
synced 2026-11-04 10:42:23 +00:00
- Adds the channels stable, preview, nightly and custom - Preview and nightly read /coolify/release.json on the CDN and take the newest version of their channel and the more stable ones, nightly gets a new build of next or the release branch twice a day - Custom installs any image tag of ghcr.io by hand, such as pr-1234 for the build of pull request 1234 - After a switch to a more stable channel, the instance keeps the updates of the channel it left until the stable release of its version is out - The local versions.json moves to storage/app and is replaced in one step, a channel change replaces it without the version of the old channel
133 lines
3.7 KiB
PHP
133 lines
3.7 KiB
PHP
<?php
|
|
|
|
namespace App\Livewire;
|
|
|
|
use App\Actions\Server\UpdateCoolify;
|
|
use App\Models\InstanceSettings;
|
|
use App\Models\Server;
|
|
use App\Services\CoolifyUpgradeStatus;
|
|
use Livewire\Component;
|
|
|
|
class Upgrade extends Component
|
|
{
|
|
public bool $updateInProgress = false;
|
|
|
|
public bool $isUpgradeAvailable = false;
|
|
|
|
public string $latestVersion = '';
|
|
|
|
public string $currentVersion = '';
|
|
|
|
public bool $devMode = false;
|
|
|
|
public bool $fullButton = false;
|
|
|
|
protected $listeners = ['updateAvailable' => 'checkUpdate'];
|
|
|
|
public function mount()
|
|
{
|
|
$this->refreshUpgradeState();
|
|
}
|
|
|
|
public function checkUpdate()
|
|
{
|
|
try {
|
|
$this->refreshUpgradeState();
|
|
} catch (\Throwable $e) {
|
|
return handleError($e, $this);
|
|
}
|
|
}
|
|
|
|
protected function refreshUpgradeState(): void
|
|
{
|
|
$this->currentVersion = config('constants.coolify.version');
|
|
$this->latestVersion = get_latest_version_of_coolify();
|
|
$this->devMode = isDev();
|
|
|
|
if ($this->devMode) {
|
|
$this->isUpgradeAvailable = true;
|
|
|
|
return;
|
|
}
|
|
|
|
$settings = InstanceSettings::find(0);
|
|
if (data_get($settings, 'update_channel') === 'custom') {
|
|
$this->latestVersion = (string) $settings->update_custom_tag;
|
|
$this->isUpgradeAvailable = $this->fullButton && $this->latestVersion !== '';
|
|
|
|
return;
|
|
}
|
|
|
|
$hasNewerVersion = version_compare($this->latestVersion, $this->currentVersion, '>');
|
|
$newVersionAvailable = (bool) data_get($settings, 'new_version_available', false);
|
|
|
|
if ($settings && $newVersionAvailable && ! $hasNewerVersion) {
|
|
$settings->update(['new_version_available' => false]);
|
|
$newVersionAvailable = false;
|
|
}
|
|
|
|
$this->isUpgradeAvailable = $hasNewerVersion && $newVersionAvailable;
|
|
}
|
|
|
|
public function upgrade()
|
|
{
|
|
try {
|
|
if (! isInstanceAdmin()) {
|
|
abort(403);
|
|
}
|
|
if ($this->updateInProgress) {
|
|
return;
|
|
}
|
|
$this->updateInProgress = true;
|
|
dispatch(function () {
|
|
try {
|
|
UpdateCoolify::run(manual_update: true);
|
|
} catch (\Throwable $e) {
|
|
report($e);
|
|
}
|
|
})->afterResponse();
|
|
|
|
auditLog('ui.instance.upgrade_started', [
|
|
'team_id' => null,
|
|
'resource' => 'instance',
|
|
'from_version' => config('constants.coolify.version'),
|
|
'to_version' => $this->latestVersion,
|
|
]);
|
|
} catch (\Throwable $e) {
|
|
return handleError($e, $this);
|
|
}
|
|
}
|
|
|
|
public function getUpgradeStatus(): array
|
|
{
|
|
// Only root team members can view upgrade status
|
|
if (auth()->user()?->currentTeam()?->id !== 0) {
|
|
return ['status' => 'none'];
|
|
}
|
|
|
|
$server = Server::find(0);
|
|
if (! $server) {
|
|
return ['status' => 'none'];
|
|
}
|
|
|
|
$statusFile = CoolifyUpgradeStatus::FILE;
|
|
|
|
try {
|
|
$content = instant_remote_process(
|
|
["cat {$statusFile} 2>/dev/null || echo ''"],
|
|
$server,
|
|
false
|
|
);
|
|
$content = trim($content ?? '');
|
|
} catch (\Throwable $e) {
|
|
return ['status' => 'none'];
|
|
}
|
|
|
|
return CoolifyUpgradeStatus::fromFile(
|
|
content: $content,
|
|
runningVersion: $this->currentVersion !== '' ? $this->currentVersion : (string) config('constants.coolify.version'),
|
|
targetVersion: $this->latestVersion !== '' ? $this->latestVersion : get_latest_version_of_coolify(),
|
|
);
|
|
}
|
|
}
|