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>
61 lines
2.1 KiB
PHP
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;
|
|
}
|
|
}
|