v0.10.0: Docker + Update-Funktion + deploy.sh
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Artisan;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use Illuminate\View\View;
|
||||
|
||||
class UpdateController extends Controller
|
||||
{
|
||||
public function index(): View
|
||||
{
|
||||
$currentVersion = config('version.current');
|
||||
$giteaUrl = rtrim(config('version.gitea_url'), '/');
|
||||
$giteaRepo = config('version.gitea_repo');
|
||||
|
||||
$latestVersion = null;
|
||||
$updateAvailable = false;
|
||||
$releaseNotes = null;
|
||||
$error = null;
|
||||
$checkedAt = Cache::get('app_update_checked_at');
|
||||
|
||||
if (empty($giteaUrl)) {
|
||||
$error = 'GITEA_URL ist nicht in der .env konfiguriert. Bitte eintragen und Container neu starten.';
|
||||
} else {
|
||||
// Frisch prüfen (Cache überschreiben bei manuellem Aufruf)
|
||||
try {
|
||||
$response = Http::timeout(8)
|
||||
->get("{$giteaUrl}/api/v1/repos/{$giteaRepo}/releases/latest");
|
||||
|
||||
if ($response->successful()) {
|
||||
$latestVersion = $response->json('tag_name', '');
|
||||
$releaseNotes = $response->json('body', '');
|
||||
$updateAvailable = !empty($latestVersion) && version_compare(
|
||||
ltrim($latestVersion, 'v'),
|
||||
ltrim($currentVersion, 'v'),
|
||||
'>'
|
||||
);
|
||||
|
||||
Cache::put('app_update_available', $updateAvailable ? $latestVersion : false, now()->addHours(6));
|
||||
Cache::put('app_update_checked_at', now()->toDateTimeString(), now()->addHours(6));
|
||||
$checkedAt = now()->toDateTimeString();
|
||||
} else {
|
||||
$error = "Gitea nicht erreichbar (HTTP {$response->status()}).";
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
$error = 'Verbindungsfehler: ' . $e->getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
return view('admin.update', compact(
|
||||
'currentVersion', 'latestVersion', 'updateAvailable',
|
||||
'releaseNotes', 'error', 'checkedAt', 'giteaUrl', 'giteaRepo'
|
||||
));
|
||||
}
|
||||
|
||||
public function install(Request $request): RedirectResponse
|
||||
{
|
||||
$tag = $request->input('tag');
|
||||
|
||||
// Update-Command synchron ausführen und Ausgabe erfassen
|
||||
Artisan::call('app:install-update', array_filter(['--tag' => $tag]));
|
||||
$log = Artisan::output();
|
||||
|
||||
$success = !str_contains($log, 'fehlgeschlagen') && !str_contains($log, 'FAILURE');
|
||||
|
||||
return redirect()->route('admin.update.index')->with([
|
||||
'update_result' => $success ? 'success' : 'error',
|
||||
'update_log' => $log,
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user