- dev/betrieb/deploy.sh: Deploy nur per Tag, mit --seed (Seeder im Wartungsmodus) und --initial (Vorschau/Live einmalig an Ort und Stelle auf Git umstellen) - dev/betrieb/vorschau-auffrischen.sh: Live-DB und Live-Medien in die Vorschau (Generalprobe) - InteriorReleaseSeeder: alle Inhaltsschritte des Relaunchs in einem Lauf, idempotent; Displays, Playlists und Mediathek bleiben unberührt - DisplayInteriorBrandingSeeder überschreibt keinen inzwischen gepflegten Claim mehr - Monitoring: GlitchTip (Server + Browser), /health mit Token, Scheduler-Herzschlag, Alarme per Mail und ntfy, Version in about und /health - public/build versioniert; .gitignore: macOS-Muster Icon traf resources/views/flux/icon/ - Runbook: dev/betrieb/README.md Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
36 lines
1.2 KiB
PHP
36 lines
1.2 KiB
PHP
<?php
|
|
|
|
namespace App\Support\Monitoring;
|
|
|
|
/**
|
|
* Versionskennung des ausgelieferten Stands — `config('app.version')` und
|
|
* Release in GlitchTip. Vorrang hat der konfigurierte Wert (APP_VERSION bzw.
|
|
* SENTRY_RELEASE); sonst die Datei `RELEASE` im Projektwurzelverzeichnis, die
|
|
* beim Deploy entsteht (`git describe --tags --always --dirty > RELEASE`) —
|
|
* der Live-Server hat kein Git, solange per SFTP deployt wird.
|
|
*
|
|
* Versionen sind Git-Tags nach SemVer: Feature-Deploy erhöht die mittlere,
|
|
* Hotfix die letzte Stelle. Auf dem Tag ergibt das „v1.1.0“, mit späteren
|
|
* Commits „v1.1.0-2-gabc1234“, mit uncommitteten Änderungen „…-dirty“.
|
|
*/
|
|
class Release
|
|
{
|
|
public static function current(?string $configured, ?string $basePath = null): ?string
|
|
{
|
|
$configured = trim((string) $configured);
|
|
|
|
if ($configured !== '') {
|
|
return $configured;
|
|
}
|
|
|
|
$file = rtrim($basePath ?? base_path(), '/').'/RELEASE';
|
|
|
|
if (! is_file($file)) {
|
|
return null;
|
|
}
|
|
|
|
$release = trim((string) file_get_contents($file));
|
|
|
|
return preg_match('/^[A-Za-z0-9._\-]{1,64}$/', $release) === 1 ? $release : null;
|
|
}
|
|
}
|