Git-Deploy per Tag, Betriebsüberwachung und Release-Seeder für den Livegang
- 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>
This commit is contained in:
parent
fcb10be120
commit
b5ed756d67
98 changed files with 3947 additions and 82 deletions
|
|
@ -17,6 +17,10 @@ use Illuminate\Database\Seeder;
|
|||
* Gesetzt wird das Logo passend zum Theme des Moduls (dunkel = negativ/weiss, hell = positiv)
|
||||
* sowie der neue Claim. Alle anderen Einstellungen bleiben unangetastet.
|
||||
*
|
||||
* Module, die schon eines der beiden Interior-Logos tragen, bleiben ganz unberührt (08.10.2026):
|
||||
* Sie sind entweder neu angelegt (Standardwerte) oder bereits umgestellt, und ein inzwischen im
|
||||
* Display-CMS gepflegter Claim soll beim Livegang nicht zurückgesetzt werden.
|
||||
*
|
||||
* php artisan db:seed --class=DisplayInteriorBrandingSeeder
|
||||
*/
|
||||
class DisplayInteriorBrandingSeeder extends Seeder
|
||||
|
|
@ -34,6 +38,10 @@ class DisplayInteriorBrandingSeeder extends Seeder
|
|||
foreach (DisplayVersion::query()->where('type', DisplayVersionType::B2in)->get() as $module) {
|
||||
$settings = $module->settings ?? [];
|
||||
|
||||
if (in_array($settings['header_logo_url'] ?? null, [self::LOGO_DARK, self::LOGO_LIGHT], true)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$settings['header_logo_url'] = ($settings['theme'] ?? 'dark') === 'light'
|
||||
? self::LOGO_LIGHT
|
||||
: self::LOGO_DARK;
|
||||
|
|
|
|||
69
database/seeders/InteriorReleaseSeeder.php
Normal file
69
database/seeders/InteriorReleaseSeeder.php
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
/**
|
||||
* Alle Inhaltsschritte des Interior-Relaunchs in einem Lauf (08.10.2026).
|
||||
*
|
||||
* Bringt eine Datenbank mit dem alten Website-Stand auf den Stand der Vorschau: zuerst auf der
|
||||
* Vorschau mit frischer Kopie der Live-Datenbank (Generalprobe), nach der Freigabe identisch auf
|
||||
* Live. Displays, Playlists, Display-Mediathek und hochgeladene Medien bleiben, wie sie sind –
|
||||
* angefasst werden nur das Display-Branding (nur Module ohne Interior-Logo) und absolute
|
||||
* Medien-URLs (werden host-unabhängig).
|
||||
*
|
||||
* Reihenfolge wie Abschnitt 8.2 und „Seeder für das nächste Deployment“ im Entwicklungsplan.
|
||||
* Jeder Schritt ist idempotent, ein zweiter Lauf ändert nichts mehr. Ausgeführt von
|
||||
* `dev/betrieb/deploy.sh vX.Y.Z --migrations --seed=InteriorReleaseSeeder` im Wartungsmodus.
|
||||
*
|
||||
* php artisan db:seed --class=InteriorReleaseSeeder --force
|
||||
*/
|
||||
class InteriorReleaseSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* @var list<class-string<Seeder>>
|
||||
*/
|
||||
public const STEPS = [
|
||||
// Fehlende CMS-Einträge aus den Lang-Dateien anlegen – vorhandene bleiben unberührt.
|
||||
CmsContentSeeder::class,
|
||||
CmsBrandSeeder::class,
|
||||
// Die in AP1 neu getexteten Sektionen überschreiben (alter Website-Stand).
|
||||
InteriorRelaunchCmsSeeder::class,
|
||||
CmsArticleSeeder::class,
|
||||
// Displays: nur Branding und Medien-URLs.
|
||||
DisplayInteriorBrandingSeeder::class,
|
||||
DisplayMediaUrlNormalizerSeeder::class,
|
||||
// Marken
|
||||
BrandPageTextSeeder::class,
|
||||
BrandGalleryCaptionNormalizerSeeder::class,
|
||||
WorldSplitCmsSeeder::class,
|
||||
OriginSectionCmsSeeder::class,
|
||||
BrandOriginSeeder::class,
|
||||
OtterpohlBrandSeeder::class,
|
||||
BrandImageSeeder::class,
|
||||
DemoBrandGalleryCleanupSeeder::class,
|
||||
// Texte und Korrekturen
|
||||
WhatsappNumberSeeder::class,
|
||||
AudienceSwitchProjectTextSeeder::class,
|
||||
HomeHeroTextSeeder::class,
|
||||
UnusedCmsContentCleanupSeeder::class,
|
||||
AboutPageTextSeeder::class,
|
||||
ProofreadingCorrectionsSeeder::class,
|
||||
LegalTextUpdateSeeder::class,
|
||||
ReferencesPageSwitchSeeder::class,
|
||||
HomeHeroSlidesSeeder::class,
|
||||
PageHeroEyebrowSeeder::class,
|
||||
HeroTrustItemsSeeder::class,
|
||||
HomeVisionTitleSeeder::class,
|
||||
ContentCorrections20261008Seeder::class,
|
||||
// Zuletzt: fehlende Felder ergänzen, verwendete Bilder in die Mediathek.
|
||||
CmsSectionFieldsSeeder::class,
|
||||
AssetMediaImportSeeder::class,
|
||||
];
|
||||
|
||||
public function run(): void
|
||||
{
|
||||
$this->call(self::STEPS);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue