From 787e48d8fd2036ed55b08966e780af21123b8dac Mon Sep 17 00:00:00 2001 From: boban Date: Tue, 23 Jun 2026 01:55:14 +0200 Subject: [PATCH] feat(release): live pipeline rail + test-server input on the Release page Co-Authored-By: Claude Opus 4.8 --- lang/de/release.php | 13 +++ lang/en/release.php | 13 +++ .../views/livewire/release/index.blade.php | 93 +++++++++++++------ 3 files changed, 91 insertions(+), 28 deletions(-) diff --git a/lang/de/release.php b/lang/de/release.php index 5bad3e2..04737ee 100644 --- a/lang/de/release.php +++ b/lang/de/release.php @@ -35,6 +35,19 @@ return [ 'pipe_sub_mirror' => 'Automatischer Push-Mirror', 'pipe_sub_ci' => 'Tests laufen', 'pipe_sub_staging' => 'Beta wird ausgerollt', + 'pipe_sub_test' => 'Beta auf deinem Test-Server', + 'no_beta_running' => 'Keine Beta in Arbeit.', + 'step_test' => 'Test-Server', + 'state_done' => 'fertig', + 'state_running' => 'läuft …', + 'state_failed' => 'fehlgeschlagen', + 'state_pending' => 'ausstehend', + 'state_unknown' => 'unbekannt', + 'state_unset' => 'URL setzen', + 'save' => 'Speichern', + 'test_server_saved' => 'Test-Server gespeichert.', + 'test_server_cleared' => 'Test-Server entfernt.', + 'test_server_invalid' => 'Ungültige URL (http/https).', // confirm modal (R5) 'confirm_title' => 'Beta auf Staging schneiden?', diff --git a/lang/en/release.php b/lang/en/release.php index 487792d..1874363 100644 --- a/lang/en/release.php +++ b/lang/en/release.php @@ -35,6 +35,19 @@ return [ 'pipe_sub_mirror' => 'Automatic push mirror', 'pipe_sub_ci' => 'Tests run', 'pipe_sub_staging' => 'Beta is deployed', + 'pipe_sub_test' => 'Beta on your test server', + 'no_beta_running' => 'No beta in flight.', + 'step_test' => 'Test server', + 'state_done' => 'done', + 'state_running' => 'running …', + 'state_failed' => 'failed', + 'state_pending' => 'pending', + 'state_unknown' => 'unknown', + 'state_unset' => 'set a URL', + 'save' => 'Save', + 'test_server_saved' => 'Test server saved.', + 'test_server_cleared' => 'Test server cleared.', + 'test_server_invalid' => 'Invalid URL (http/https).', // confirm modal (R5) 'confirm_title' => 'Cut a staging beta?', diff --git a/resources/views/livewire/release/index.blade.php b/resources/views/livewire/release/index.blade.php index fe0a4a2..b0a5160 100644 --- a/resources/views/livewire/release/index.blade.php +++ b/resources/views/livewire/release/index.blade.php @@ -8,13 +8,6 @@ $tiles[] = ['target' => $targets['patch'], 'label' => __('release.kind_patch'), 'icon' => 'tag', 'primary' => false]; $tiles[] = ['target' => $targets['minor'], 'label' => __('release.kind_minor'), 'icon' => 'tag', 'primary' => false]; $tiles[] = ['target' => $targets['major'], 'label' => __('release.kind_major'), 'icon' => 'git-branch', 'primary' => false]; - - $steps = [ - ['name' => 'Gitea', 'sub' => __('release.pipe_sub_gitea'), 'active' => $pendingId !== null], - ['name' => 'GitHub-privat', 'sub' => __('release.pipe_sub_mirror'), 'active' => false], - ['name' => 'CI', 'sub' => __('release.pipe_sub_ci'), 'active' => false], - ['name' => 'Staging', 'sub' => __('release.pipe_sub_staging'), 'active' => false], - ]; @endphp
@@ -123,28 +116,72 @@ @endif
- {{-- Right: pipeline rail --}} + {{-- Right: live pipeline rail --}} -
    - @foreach ($steps as $s) -
  1. -
    - $s['active'], - 'border-line bg-inset text-ink-3' => ! $s['active'], - ])>{{ $loop->iteration }} - @unless ($loop->last) - - @endunless -
    -
    ! $loop->last])> -

    {{ $s['name'] }}

    -

    {{ $s['sub'] }}

    -
    -
  2. - @endforeach -
+ @if ($pipeline === null) +

{{ __('release.no_beta_running') }}

+ @else +
    + @foreach ($pipeline['steps'] as $s) + @php + $names = [ + 'tag' => 'Gitea', 'mirror' => 'GitHub-privat', 'ci' => 'CI', 'test' => __('release.step_test'), + ]; + $sub = [ + 'tag' => __('release.pipe_sub_gitea'), 'mirror' => __('release.pipe_sub_mirror'), + 'ci' => __('release.pipe_sub_ci'), 'test' => __('release.pipe_sub_test'), + ]; + $detail = match ($s['state']) { + 'done' => $s['detail'] ?? __('release.state_done'), + 'running' => __('release.state_running'), + 'failed' => __('release.state_failed'), + 'pending' => __('release.state_pending'), + 'unset' => __('release.state_unset'), + default => __('release.state_unknown'), + }; + @endphp +
  1. +
    + + @if ($s['state'] === 'running') + + @elseif ($s['state'] === 'done') + + @elseif ($s['state'] === 'failed') + + @elseif ($s['state'] === 'pending') + + @else + + @endif + + @unless ($loop->last) + + @endunless +
    +
    ! $loop->last])> +

    {{ $names[$s['key']] }}

    + @if ($s['key'] === 'ci' && $s['url']) + {{ $detail }} + @else +

    {{ $detail }}

    + @endif + + @if ($s['key'] === 'test') +
    + + {{ __('release.save') }} +
    + @endif +
    +
  2. + @endforeach +
+ @if ($pipeline['ciRunning']) + + @endif + @endif