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; } }