Summary
Adds a new Deployments page that shows all past deployments across all projects for the current team, with filtering and live updates. This addresses a common need for teams managing multiple applications — being able to see deployment history in one place rather than navigating to each application individually.
Resolves #7596
/claim #7596
What’s Changed
New Sidebar Navigation Item
- Added Deployments entry in the sidebar between Projects and Servers
- Uses a rocket icon consistent with the tabler icon style used throughout the app
- Active state highlighting when on the deployments page
New Livewire Component: App\Livewire\Deployments\Index
- Queries
ApplicationDeploymentQueue scoped to the current team’s servers (same security model as DeploymentsIndicator)
- Supports four URL-synced filters via Livewire
#[Url] attributes:
- Status — Queued, In Progress, Finished, Failed, Cancelled
- Project — filter by project (uses project UUID)
- Server — filter by server
- Source — filter by Git source (GitHub/GitLab app)
- Auto-hides filter dropdowns when only one option exists (e.g., if you only have one server, the server filter is hidden)
- Pagination with Previous/Next navigation (20 items per page)
- Live updates via
wire:poll.5000ms — polls every 5 seconds to show new deployments and status changes
- Filter options are refreshed on each poll to pick up new servers/projects/sources
- Listens to the
ServiceChecked echo event for real-time updates
New Blade View: resources/views/livewire/deployments/index.blade.php
- Responsive layout that works on mobile and desktop
- Each deployment card shows:
- Status badge with color coding matching the existing deployment page (blue=in progress, purple=queued, green=success, red=failed, gray=cancelled)
- Application name with deployment type badge (Manual/Webhook/API/PR/Rollback)
- Project & environment path
- Server name with server icon
- Commit hash (short format)
- Timing info — relative time for finished deployments, duration for in-progress, queued time for queued
- Left border color coding matching existing
deployment/index.blade.php patterns
- Empty state with contextual messaging (different for filtered vs unfiltered)
- Links to individual deployment detail pages via
deployment_url or constructed route
Route
GET /deployments → App\Livewire\Deployments\Index (named deployments)
- Added within the existing
auth + verified middleware group
Design Decisions
- Team scoping via server IDs — follows the same pattern as
DeploymentsIndicator to ensure users only see deployments for servers they have access to
- URL query string sync — filters are synced to URL params so filtered views can be shared/bookmarked
- Filter auto-hiding — keeps the UI clean for simple setups while being powerful for complex ones
- 20 items per page — larger than the per-application deployment page (10) since this is an overview page
- No new dependencies — uses only existing Livewire, Alpine.js, and Tailwind utilities
Screenshots
The page follows existing Coolify design patterns exactly — same card styles, same status badges, same color scheme as the per-application deployment list.
Testing
- Verified PHP syntax is valid
- Component follows established patterns from
Project\Application\Deployment\Index and DeploymentsIndicator
- Filter logic uses standard Eloquent queries with proper team scoping
- No breaking changes to existing functionality