Files
Network-MGMT/app/Console/Commands/AppCheckUpdateCommand.php
T

69 lines
2.4 KiB
PHP

<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Http;
class AppCheckUpdateCommand extends Command
{
protected $signature = 'app:check-update {--json : Ausgabe als JSON}';
protected $description = 'Prüft ob ein Update auf Gitea verfügbar ist und speichert das Ergebnis im Cache';
public function handle(): int
{
$current = config('version.current');
$giteaUrl = rtrim(config('version.gitea_url'), '/');
$repo = config('version.gitea_repo');
if (empty($giteaUrl)) {
$this->warn('GITEA_URL ist nicht konfiguriert.');
Cache::put('app_update_available', null, now()->addHours(1));
return Command::SUCCESS;
}
try {
$response = Http::timeout(8)
->get("{$giteaUrl}/api/v1/repos/{$repo}/releases/latest");
if (!$response->successful()) {
$this->warn("Gitea nicht erreichbar (HTTP {$response->status()}).");
Cache::put('app_update_check_error', "HTTP {$response->status()}", now()->addHours(1));
return Command::SUCCESS;
}
$latest = $response->json('tag_name', '');
$available = !empty($latest) && version_compare(
ltrim($latest, 'v'),
ltrim($current, 'v'),
'>'
);
// Ergebnis 6 Stunden cachen
Cache::put('app_update_available', $available ? $latest : false, now()->addHours(6));
Cache::put('app_update_checked_at', now()->toDateTimeString(), now()->addHours(6));
Cache::forget('app_update_check_error');
if ($this->option('json')) {
$this->line(json_encode([
'current' => $current,
'latest' => $latest,
'available' => $available,
]));
} else {
if ($available) {
$this->info("✓ Update verfügbar: {$current}{$latest}");
} else {
$this->info("✓ Kein Update — aktuelle Version: {$current}");
}
}
} catch (\Exception $e) {
$this->error('Verbindungsfehler: ' . $e->getMessage());
Cache::put('app_update_check_error', $e->getMessage(), now()->addHours(1));
}
return Command::SUCCESS;
}
}