presseportale/app/Console/Commands/CollectChangelog.php
Kevin Adametz 2c590fa9df changelog: Entwürfe aus den Commits, Freigabe im Admin, öffentliche Seite mit RSS
Decision-Update Changelog, Stufen 1 bis 3:
- changelog:collect liest die Commits zwischen zwei Tags und legt aus den
  Zeilen Changelog:/Public: Entwürfe an (ganze Nachricht, nicht nur der
  Trailer-Block); ohne Changelog-Zeile intern, Sicherheit als eine
  Sammelzeile je Release, Sicherheitsbegriffe im Titel stufen hoch, ohne
  Public-Satz ein markierter Vorschlag aus dem Titel; idempotent.
- changelog:backfill trägt die Neuerungen seit dem Relaunch als Entwurf nach.
- Admin ▸ Changelog (settings:manage): gegenlesen, bearbeiten, Rubrik,
  artikelwürdig, freigeben/verwerfen, Tag gesammelt freigeben, Eintrag von Hand.
- pressekonto.com/changelog und /changelog/feed (RSS), auf den Portalen
  301 zum Hub; Kundenmenü „Was ist neu“ mit Neu-Kennzeichen (14 Tage).

Changelog: Neu
Public: Unter pressekonto.com/changelog steht, was sich auf pressekonto, presseecho und businessportal24 ändert – auch als RSS-Feed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 08:30:46 +00:00

61 lines
2.1 KiB
PHP

<?php
namespace App\Console\Commands;
use App\Services\Changelog\ChangelogCollector;
use Illuminate\Console\Command;
use Illuminate\Support\Carbon;
use Throwable;
/**
* Stufe 2 des Changelogs: Entwürfe aus den Commits eines Releases. Läuft in
* `dev/betrieb/deploy.sh` nach `up`; ein Fehler hier bricht keinen Deploy ab.
*/
class CollectChangelog extends Command
{
protected $signature = 'changelog:collect
{from : vorheriger Tag (ausschließlich), z. B. v1.11.0}
{to : neuer Tag, z. B. v1.12.0}
{--date= : Datum der Einträge (Standard: heute)}
{--dry-run : nur anzeigen, nichts speichern}';
protected $description = 'Changelog-Entwürfe aus den Commit-Zeilen Changelog:/Public: eines Releases anlegen.';
public function handle(ChangelogCollector $collector): int
{
try {
$result = $collector->collect(
(string) $this->argument('from'),
(string) $this->argument('to'),
$this->option('date') !== null ? Carbon::parse((string) $this->option('date')) : null,
(bool) $this->option('dry-run'),
);
} catch (Throwable $e) {
$this->error($e->getMessage());
return self::FAILURE;
}
$this->info(sprintf(
'%s%d neue Entwürfe, %d schon vorhanden, %d Commits ohne Changelog-Zeile (intern).',
$this->option('dry-run') ? '[Dry-Run] ' : '',
$result['created'],
$result['existing'],
$result['internal'],
));
if ($result['entries'] !== []) {
$this->table(
['Rubrik', 'Text', 'Hinweis'],
array_map(static fn ($entry): array => [
$entry->category->label(),
$entry->text,
$entry->review_note ?? '',
], $result['entries']),
);
$this->line(' Freigabe im Admin ▸ Changelog.');
}
return self::SUCCESS;
}
}