@extends('layouts.app') @section('content') {{-- Breadcrumb --}} @if(session('success'))
{{ session('success') }}
@endif @if(session('error'))
{{ session('error') }}
@endif
{{-- ── Main Column ── --}}
{{-- Header card --}}
v{{ $release->version }} {{ ucfirst($release->status) }} {{ ucfirst($release->channel) }}

{{ $release->name }}

@if($release->description)

{{ $release->description }}

@endif
{{-- Action buttons — state-machine driven --}}
@if($release->canBeBuilt())
@csrf
@endif @if($release->canBePublished())
@csrf
@endif @if($release->canBeArchived())
@csrf
@endif
{{-- Build status block --}}
@if($release->build_status === 'ready')
Package
{{ basename($release->package_path) }}
SHA-256 Checksum
{{ $release->checksum }}
@if($release->hmac_signature)
HMAC Signature
Signed
@endif
@elseif($release->build_status === 'building')
Build in progress — refresh in a moment...
@elseif($release->build_status === 'failed')
Build failed. Click Rebuild Package to try again.
@else
Package not built yet. Click Build Package to generate the update archive.
@endif
{{-- Release Notes --}} @if($release->release_notes)
Release Notes
{{ $release->release_notes }}
@endif {{-- Tracked Changes (from git) --}} @php $trackedChanges = \App\Models\ChangeRecord::where('release_id', $release->id)->orderByDesc('committed_at')->get(); @endphp @if($trackedChanges->isNotEmpty())
Tracked Changes (from git)
{{ $trackedChanges->count() }}
@foreach($trackedChanges as $change)
{{ $change->change_type }}
{{ $change->module_name }}
{{ $change->description ?? $change->commit_message }}
{{ $change->commit_short }}
@endforeach
@endif {{-- Change Items --}}
Change Items
{{ $release->items->count() }}
@forelse($release->items as $item)
{{ $item->change_type }}
{{ $item->module_name }}
{{ $item->description }}
@empty
No change items added to this release.
@endforelse
{{-- Deployment History --}}
Deployment History
{{ $deploymentStats['completed'] }} completed {{ $deploymentStats['failed'] }} failed @if($deploymentStats['pending'] > 0) {{ $deploymentStats['pending'] }} in progress @endif
@forelse($release->deployments as $dep)
{{ ucfirst(str_replace('_',' ',$dep->status)) }}
{{ $dep->node->node_name ?? 'Unknown' }}
{{ $dep->node->ip_address ?? '' }}
{{ $dep->started_at?->format('d M Y H:i') ?? '—' }}
@if($dep->duration)
{{ $dep->duration }}
@endif
@empty
No deployments for this release yet.
@endforelse
{{-- ── Side Column ── --}}
{{-- Stats --}}
Deployment Stats
{{ $deploymentStats['total'] }}
Total
{{ $deploymentStats['completed'] }}
Success
{{ $deploymentStats['failed'] }}
Failed
{{-- Protected Tables --}}
Protected Tables
@foreach(['users','extensions','trunks','queues','ivr','ring_groups','recordings','cdrs','contacts','sip_accounts','roles','permissions'] as $tbl) {{ $tbl }} @endforeach

Never deleted, truncated or replaced during updates.

{{-- Security --}}
Security
SHA-256 Checksum {{ $release->checksum ? 'Present' : 'Not built' }}
HMAC Signature {{ $release->hmac_signature ? 'Signed' : 'Not signed' }}
State {{ ucfirst($release->status) }} / {{ $release->build_status_label }}
@if($release->build_status === 'building') @endif @endsection