This commit is contained in:
Andras Bacsai
2023-06-02 12:34:45 +02:00
parent ea5c1b9e12
commit 39d37010a3
62 changed files with 618 additions and 596 deletions

View File

@@ -1,23 +1,11 @@
<div class="flex gap-10 text-xs text-white" x-data="{ visible: @entangle('visible') }">
<button x-cloak x-show="!visible"
class="gap-2 text-white normal-case btn btn-ghost hover:no-underline bg-coollabs hover:bg-coollabs-100"
wire:click='upgrade'>
<svg xmlns="http://www.w3.org/2000/svg" class="icon" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"
fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M10 20.777a8.942 8.942 0 0 1 -2.48 -.969" />
<path d="M14 3.223a9.003 9.003 0 0 1 0 17.554" />
<path d="M4.579 17.093a8.961 8.961 0 0 1 -1.227 -2.592" />
<path d="M3.124 10.5c.16 -.95 .468 -1.85 .9 -2.675l.169 -.305" />
<path d="M6.907 4.579a8.954 8.954 0 0 1 3.093 -1.356" />
<path d="M12 9l-2 3h4l-2 3" />
</svg>Force Upgrade
</button>
<x-forms.button x-cloak x-show="!visible" wire:click='upgrade'>
Force Upgrade
</x-forms.button>
<template x-if="visible">
<div class="bg-coollabs-gradient">
<svg xmlns="http://www.w3.org/2000/svg" class="w-10 h-10 mx-auto text-pink-500 lds-heart"
viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round"
stroke-linejoin="round">
<svg xmlns="http://www.w3.org/2000/svg" class="w-10 h-10 mx-auto text-pink-500 lds-heart" viewBox="0 0 24 24"
stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M19.5 13.572l-7.5 7.428l-7.5 -7.428m0 0a5 5 0 1 1 7.5 -6.566a5 5 0 1 1 7.5 6.572" />
</svg> Upgrading, please wait...

View File

@@ -1,19 +1,16 @@
<div>
<form wire:submit.prevent='submit' class="flex flex-col">
<div class="flex items-center gap-2">
<h3>Discord</h3>
<x-forms.button class="w-16 mt-4" type="submit">
<h2>Discord</h2>
<x-forms.button type="submit">
Save
</x-forms.button>
</div>
<div class="flex flex-col gap-2 xl:flex-row w-96">
<x-forms.checkbox instantSave id="model.extra_attributes.discord_active" label="Notification Enabled" />
</div>
<div class="flex flex-col gap-2 xl:flex-row w-96">
<x-forms.input required id="model.extra_attributes.discord_webhook" label="Webhook" />
</div>
<div>
</div>
<x-forms.input type="string"
helper="Generate a webhook in Discord.<br>Example: https://discord.com/api/webhooks/...." required
id="model.extra_attributes.discord_webhook" label="Webhook" />
</form>
</div>

View File

@@ -1,36 +1,43 @@
<div>
<form wire:submit.prevent='submit' class="flex flex-col mt-2">
<form wire:submit.prevent='submit' class="flex flex-col">
<div class="flex items-center gap-2">
<h3>E-mail (SMTP)</h3>
<x-forms.button class="w-16 mt-4" type="submit">
<h2>Email</h2>
<x-forms.button type="submit">
Save
</x-forms.button>
</div>
<div class="flex flex-col w-96">
<x-forms.checkbox instantSave id="model.extra_attributes.smtp_active" label="Notification Enabled" />
</div>
<x-forms.input id="model.extra_attributes.test_notification_recipients" label="Test Notification Recipient(s)"
helper="Emails separated by comma." />
<div class="flex flex-col gap-2 xl:flex-row">
<div class="flex flex-col w-96">
<x-forms.input required id="model.extra_attributes.recipients" helper="Emails separated by comma."
label="Recipient(s)" />
</div>
<div class="flex gap-2">
<x-forms.input required id="model.extra_attributes.recipients"
helper="Email list to send the all notifications to, separated by comma." label="Recipient(s)" />
<x-forms.input id="model.extra_attributes.test_notification_recipients"
label="Test Notification Recipient(s)"
helper="Email list to send the test notification to, separated by comma." />
</div>
<div class="flex flex-col gap-2 xl:flex-row">
<div class="flex flex-col w-96">
<x-forms.input required id="model.extra_attributes.smtp_host" label="Host" />
<x-forms.input required id="model.extra_attributes.smtp_port" label="Port" />
<x-forms.input id="model.extra_attributes.smtp_encryption" label="Encryption" />
<x-forms.input required id="model.extra_attributes.smtp_host" helper="SMTP Hostname"
placeholder="smtp.mailgun.org" label="Host" />
<x-forms.input required id="model.extra_attributes.smtp_port" helper="SMTP Port" placeholder="587"
label="Port" />
<x-forms.input helper="If SMTP through SSL, set it to 'tls'." placeholder="tls"
id="model.extra_attributes.smtp_encryption" label="Encryption" />
</div>
<div class="flex flex-col w-96">
<x-forms.input id="model.extra_attributes.smtp_username" label="Username" />
<x-forms.input id="model.extra_attributes.smtp_password" label="Password" />
<x-forms.input id="model.extra_attributes.smtp_timeout" label="Timeout" />
<x-forms.input id="model.extra_attributes.smtp_username" helper="SMTP Username" label="Username" />
<x-forms.input type="password" helper="SMTP Password" id="model.extra_attributes.smtp_password"
label="Password" />
<x-forms.input id="model.extra_attributes.smtp_timeout" helper="Timeout value for sending emails."
label="Timeout" />
</div>
<div class="flex flex-col w-96">
<x-forms.input required id="model.extra_attributes.from_address" label="From Address" />
<x-forms.input required id="model.extra_attributes.from_name" label="From Name" />
<x-forms.input required id="model.extra_attributes.from_name" helper="Name used in emails."
label="From Name" />
<x-forms.input required id="model.extra_attributes.from_address" helper="Email address used in emails."
label="From Address" />
</div>
</div>
</form>

View File

@@ -1,4 +1,7 @@
<x-forms.button isHighlighted class="mt-4 text-white normal-case btn btn-xs no-animation btn-primary"
wire:click="sendTestNotification">
Send Test Notifications
</x-forms.button>
<div class="flex items-center gap-2">
<h2>Notifications</h2>
<x-forms.button isHighlighted class="text-white normal-case btn btn-xs no-animation btn-primary"
wire:click="sendTestNotification">
Send Test Notifications
</x-forms.button>
</div>

View File

@@ -1,9 +1,10 @@
<div x-data="{ deleteApplication: false }">
<h2 class="pb-0">Danger Zone</h2>
<h2>Danger Zone</h2>
<div class="text-sm">Woah. I hope you know what are you doing.</div>
<h3 class="pb-0">Delete Application</h3>
<div class="text-sm">This will stop your containers, delete all related data, etc. Beware! There is no coming back!
<h3 class="pt-4">Delete Application</h3>
<div class="pb-4 text-sm">This will stop your containers, delete all related data, etc. Beware! There is no coming
back!
</div>
<x-naked-modal show="deleteApplication" />
<x-forms.button x-on:click.prevent="deleteApplication = true">Delete</x-forms.button>
<x-forms.button x-on:click.prevent="deleteApplication = true">Yes, please, delete it.</x-forms.button>
</div>

View File

@@ -8,13 +8,13 @@
<ul tabindex="0"
class="mt-1 text-xs text-white normal-case rounded min-w-max dropdown-content menu bg-coolgray-200">
<li>
<div class="hover:bg-coollabs" wire:click='deploy'>Restart</div>
<div class="rounded-none hover:bg-coollabs" wire:click='deploy'>Restart</div>
</li>
<li>
<div class="hover:bg-coollabs" wire:click='deploy(true)'>Force deploy without cache</div>
<div class="rounded-none hover:bg-coollabs" wire:click='deploy(true)'>Force deploy without cache</div>
</li>
<li>
<div class="hover:bg-red-500" wire:click='stop'>Stop</div>
<div class="rounded-none hover:bg-red-500" wire:click='stop'>Stop</div>
</li>
</ul>
</div>
@@ -29,10 +29,10 @@
<ul tabindex="0"
class="mt-1 text-xs text-white normal-case rounded min-w-max dropdown-content menu bg-coolgray-200">
<li>
<div class="hover:bg-coollabs" wire:click='deploy'>Deploy</div>
<div class="rounded-none hover:bg-coollabs" wire:click='deploy'>Deploy</div>
</li>
<li>
<div class="hover:bg-coollabs" wire:click='deploy(true)'>Deploy without cache</div>
<div class="rounded-none hover:bg-coollabs" wire:click='deploy(true)'>Deploy without cache</div>
</li>
</ul>
</div>

View File

@@ -1,6 +1,6 @@
<div>
<div class="pt-4">
<h2>Logs</h2>
<livewire:project.application.deployment-navbar :activity="$activity" :application="$application" :deployment_uuid="$deployment_uuid" />
<h3 class="pb-0">Logs</h3>
@if (data_get($activity, 'properties.status') === 'in_progress')
<div class="pt-2 text-sm">Deployment is
<span class="text-warning">{{ Str::headline(data_get($activity, 'properties.status')) }}</span>. Logs will

View File

@@ -1,5 +1,4 @@
<div>
<h3>Actions</h3>
<div class="py-4">
@if (data_get($activity, 'properties.status') === 'in_progress')
<x-forms.button wire:click.prevent="cancel">Cancel deployment</x-forms.button>
@else

View File

@@ -1,61 +1,62 @@
<div class="flex flex-col gap-2" wire:init='load_deployments'
@if ($skip == 0) wire:poll.5000ms='reload_deployments' @endif>
<div>
<h3>Actions</h3>
@if (count($deployments) > 0)
<h2 class="pt-4">Deployments <span class="text-xs">({{ $deployments_count }})</span></h2>
@if ($show_next)
<x-forms.button isHighlighted wire:click="load_deployments({{ $default_take }})">Load Previous
Deployments</x-forms.button>
<x-forms.button isHighlighted wire:click="load_deployments({{ $default_take }})">Show More
</x-forms.button>
@else
<x-forms.button disabled>No More Deployments</x-forms.button>
<x-forms.button disabled>Show More
</x-forms.button>
@endif
</div>
<h3>Deployments <span class="text-xs">({{ $deployments_count }})</span></h3>
@foreach ($deployments as $deployment)
<a @class([
'bg-coolgray-200 p-2 border-l border-dashed transition-colors hover:no-underline',
'cursor-not-allowed hover:bg-coolgray-200' =>
data_get($deployment, 'status') === 'queued' ||
data_get($deployment, 'status') === 'cancelled by system',
'border-warning hover:bg-warning hover:text-black' =>
data_get($deployment, 'status') === 'in_progress',
'border-error hover:bg-error' =>
data_get($deployment, 'status') === 'error',
'border-success hover:bg-success' =>
data_get($deployment, 'status') === 'finished',
]) @if (data_get($deployment, 'status') !== 'cancelled by system' && data_get($deployment, 'status') !== 'queued')
href="{{ $current_url . '/' . data_get($deployment, 'deployment_uuid') }}"
@endif
class="hover:no-underline">
<div class="flex flex-col justify-start">
<div>
{{ $deployment->id }} <span class="text-sm text-warning">></span> {{ $deployment->deployment_uuid }} <span
class="text-sm text-warning">></span>
{{ $deployment->status }}
</div>
@if (data_get($deployment, 'pull_request_id'))
@foreach ($deployments as $deployment)
<a @class([
'bg-coolgray-200 p-2 border-l border-dashed transition-colors hover:no-underline',
'cursor-not-allowed hover:bg-coolgray-200' =>
data_get($deployment, 'status') === 'queued' ||
data_get($deployment, 'status') === 'cancelled by system',
'border-warning hover:bg-warning hover:text-black' =>
data_get($deployment, 'status') === 'in_progress',
'border-error hover:bg-error' =>
data_get($deployment, 'status') === 'error',
'border-success hover:bg-success' =>
data_get($deployment, 'status') === 'finished',
]) @if (data_get($deployment, 'status') !== 'cancelled by system' && data_get($deployment, 'status') !== 'queued')
href="{{ $current_url . '/' . data_get($deployment, 'deployment_uuid') }}"
@endif
class="hover:no-underline">
<div class="flex flex-col justify-start">
<div>
Pull Request #{{ data_get($deployment, 'pull_request_id') }}
@if (data_get($deployment, 'is_webhook'))
(Webhook)
@endif
{{ $deployment->id }} <span class="text-sm text-warning">></span> {{ $deployment->deployment_uuid }}
<span class="text-sm text-warning">></span>
{{ $deployment->status }}
</div>
@elseif (data_get($deployment, 'is_webhook'))
<div>Webhook (sha
@if (data_get($deployment, 'commit'))
{{ data_get($deployment, 'commit') }})
@else
HEAD)
@endif
@if (data_get($deployment, 'pull_request_id'))
<div>
Pull Request #{{ data_get($deployment, 'pull_request_id') }}
@if (data_get($deployment, 'is_webhook'))
(Webhook)
@endif
</div>
@elseif (data_get($deployment, 'is_webhook'))
<div>Webhook (sha
@if (data_get($deployment, 'commit'))
{{ data_get($deployment, 'commit') }})
@else
HEAD)
@endif
</div>
@endif
<div class="flex flex-col" x-data="elapsedTime('{{ $deployment->deployment_uuid }}', '{{ $deployment->status }}', '{{ $deployment->created_at }}', '{{ $deployment->updated_at }}')">
<div>Finished <span x-text="measure_since_started()">0s</span> in <span class="font-bold"
x-text="measure_finished_time()">0s</span></div>
</div>
@endif
<div class="flex flex-col" x-data="elapsedTime('{{ $deployment->deployment_uuid }}', '{{ $deployment->status }}', '{{ $deployment->created_at }}', '{{ $deployment->updated_at }}')">
<div>Finished <span x-text="measure_since_started()">0s</span> in <span class="font-bold"
x-text="measure_finished_time()">0s</span></div>
</div>
</div>
</a>
</a>
@endforeach
@else
<span wire:loading.remove wire:target='load_deployments' class="loading loading-spinner"></span>
@endif
<script src="https://cdn.jsdelivr.net/npm/dayjs@1/dayjs.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/dayjs@1/plugin/utc.js"></script>
<script src="https://cdn.jsdelivr.net/npm/dayjs@1/plugin/relativeTime.js"></script>

View File

@@ -1,5 +1,5 @@
<div>
<h2 class="pb-0">Destination</h2>
<h2>Destination</h2>
<div class="text-sm">The destination server / network where your application will be deployed to.</div>
<div class="py-4">
<p>Server: {{ data_get($destination, 'server.name') }}</p>

View File

@@ -1,6 +1,6 @@
<div class="flex flex-col gap-2">
<div>
<h2 class="pb-0">Environment Variables</h2>
<h2>Environment Variables</h2>
<div class="text-sm">Environment (secrets) configuration. You can set variables for your Preview Deployments as
well
here.</div>

View File

@@ -1,7 +1,7 @@
<div>
<form wire:submit.prevent='submit' class="flex flex-col">
<div class="flex gap-2">
<h2 class="pb-0">General</h2>
<div class="flex items-center gap-2">
<h2>General</h2>
<x-forms.button type="submit">
Save
</x-forms.button>

View File

@@ -1,6 +1,6 @@
<form wire:submit.prevent='submit'>
<div class="flex gap-2">
<h2 class="pb-0">Previews Deployments</h2>
<div class="flex items-center gap-2">
<h2>Previews Deployments</h2>
<x-forms.button type="submit">Save</x-forms.button>
<x-forms.button wire:click="resetToDefault">Reset to default</x-forms.button>
</div>

View File

@@ -2,7 +2,7 @@
<livewire:project.application.preview.form :application="$application" />
<h3>Pull Requests on Git</h3>
<div>
<x-forms.button wire:click="load_prs">Load Opened Pull Requests
<x-forms.button wire:click="load_prs">Load Pull Requests (open)
</x-forms.button>
@isset($rate_limit_remaining)
<div class="pt-1 text-sm">Requests remaning till rate limited by Git: {{ $rate_limit_remaining }}</div>

View File

@@ -1,23 +1,26 @@
<div>
<form wire:submit.prevent='submit' class="flex flex-col">
<div class="flex gap-2">
<h2 class="pb-0">Resource Limits</h2>
<div class="flex items-center gap-2 ">
<h2>Resource Limits</h2>
<x-forms.button type='submit'>Save</x-forms.button>
</div>
<div class="text-sm">Limit your container resources by CPU & memory.</div>
<h3>Limit CPUs</h3>
<x-forms.input placeholder="1.5" label="Number of CPUs" id="application.limits_cpus" />
<x-forms.input placeholder="0-2" label="CPU sets to use" id="application.limits_cpuset" />
<x-forms.input placeholder="1024" label="CPU Weight" id="application.limits_cpu_shares" />
<h3>Limit Memory</h3>
<x-forms.input placeholder="69b or 420k or 1337m or 1g" label="Soft Memory Limit"
id="application.limits_memory_reservation" />
<x-forms.input placeholder="69b or 420k or 1337m or 1g" label="Maximum Memory Limit"
id="application.limits_memory" />
<x-forms.input placeholder="69b or 420k or 1337m or 1g" label="Maximum Swap Limit"
id="application.limits_memory_swap" />
<x-forms.input placeholder="0-100" type="number" min="0" max="100" label="Swappiness"
id="application.limits_memory_swappiness" />
<h3 class="pt-4">Limit CPUs</h3>
<div class="flex gap-2">
<x-forms.input placeholder="1.5" label="Number of CPUs" id="application.limits_cpus" />
<x-forms.input placeholder="0-2" label="CPU sets to use" id="application.limits_cpuset" />
<x-forms.input placeholder="1024" label="CPU Weight" id="application.limits_cpu_shares" />
</div>
<h3 class="pt-4">Limit Memory</h3>
<div class="flex gap-2">
<x-forms.input placeholder="69b or 420k or 1337m or 1g" label="Soft Memory Limit"
id="application.limits_memory_reservation" />
<x-forms.input placeholder="69b or 420k or 1337m or 1g" label="Maximum Memory Limit"
id="application.limits_memory" />
<x-forms.input placeholder="69b or 420k or 1337m or 1g" label="Maximum Swap Limit"
id="application.limits_memory_swap" />
<x-forms.input placeholder="0-100" type="number" min="0" max="100" label="Swappiness"
id="application.limits_memory_swappiness" />
</div>
</form>
</div>

View File

@@ -1,6 +1,6 @@
<div x-init="$wire.loadImages">
<div class="flex gap-2">
<h2 class="pb-0">Rollback</h2>
<div class="flex items-center gap-2">
<h2>Rollback</h2>
<x-forms.button isHighlighted wire:click='loadImages'>Reload Available Images</x-forms.button>
</div>
<div class="pb-4 text-sm">You can easily rollback to a previously built image quickly.</div>

View File

@@ -1,7 +1,7 @@
<div>
<form wire:submit.prevent='submit' class="flex flex-col">
<div class="flex items-center gap-2">
<h2 class="pb-0">Source</h2>
<h2>Source</h2>
<x-forms.button type="submit">Save</x-forms.button>
</div>
<div class="text-sm">Code source of your application.</div>

View File

@@ -1,5 +1,5 @@
<div>
<h2 class="pb-0">Storages</h2>
<h2>Storages</h2>
<div class="text-sm">Persistent storage to preserve data between deployments.</div>
<div class="flex flex-col gap-2 py-4">
@forelse ($application->persistentStorages as $storage)

View File

@@ -12,7 +12,7 @@
@endif
@endforeach
</x-forms.select>
<x-forms.button class="btn-xl" type="submit">Run</x-forms.button>
<x-forms.button class="h-8" type="submit">Run</x-forms.button>
</form>
<div class="container w-full pt-10 mx-auto">
<livewire:activity-monitor />

View File

@@ -37,7 +37,7 @@
@endif
</div>
</div>
<h3>Quick Actions</h3>
<h3 class="pt-8 pb-4">Quick Actions</h3>
<div class="flex items-center gap-2">
<x-forms.button wire:click.prevent='validateServer'>
@if ($server->settings->is_validated)

View File

@@ -3,7 +3,7 @@
message='Are you sure you would like to stop the proxy? All resources will be unavailable.' />
@if ($server->settings->is_validated)
<div class="flex items-center gap-2 mb-2">
<h2 class="pb-0">Proxy</h2>
<h2>Proxy</h2>
@if ($server->extra_attributes->proxy_type)
<x-forms.button isHighlighted wire:click.prevent="installProxy">
Start/Reconfigure Proxy
@@ -16,8 +16,6 @@
$server->extra_attributes->last_saved_proxy_settings !== $server->extra_attributes->last_applied_proxy_settings)
<div class="text-red-500">Configuration out of sync.</div>
@endif
</div>
@endif
@if ($server->extra_attributes->proxy_status === 'running')

View File

@@ -1,12 +1,12 @@
<div>
<form wire:submit.prevent='submit' class="flex flex-col">
<div class="flex gap-2">
<h1 class="pb-2">Settings</h1>
<form wire:submit.prevent='submit' class="flex flex-col pb-8">
<div class="flex items-center gap-2">
<h1>Settings</h1>
<x-forms.button type="submit">
Save
</x-forms.button>
</div>
<div class="pb-4 text-sm">Instance wide settings for Coolify.</div>
<div class="pt-2 pb-4 text-sm">Instance wide settings for Coolify.</div>
<div class="flex flex-col gap-2">
<div class="flex gap-2">
<x-forms.input id="settings.fqdn" label="Coolify's Domain" />
@@ -28,5 +28,4 @@
{{-- <x-forms.checkbox instantSave id="is_https_forced" label="Force https?" /> --}}
<x-forms.checkbox instantSave id="do_not_track" label="Do Not Track" />
</div>
</div>

View File

@@ -1,9 +1,8 @@
<div class="pt-4">
<h3>Switch Team</h3>
<div class="flex gap-2">
@foreach (auth()->user()->otherTeams() as $team)
<x-forms.button isHighlighted wire:key="{{ $team->id }}" wire:click="switch_to('{{ $team->id }}')">
{{ $team->name }}</x-forms.button>
<div>
<x-forms.select wire:model="selectedTeamId" class="w-64 select-xs">
<option value="default" disabled selected>Switch team</option>
@foreach (auth()->user()->teams as $team)
<option value="{{ $team->id }}">{{ $team->name }}</option>
@endforeach
</div>
</x-forms.select>
</div>

View File

@@ -0,0 +1,10 @@
<tr class="border-coolgray-200">
<th class="text-warning">{{ $member->id }}</th>
<td>{{ $member->name }}</td>
<td>{{ $member->email }}</td>
<td>
@if ($member->id !== auth()->user()->id)
<x-forms.button class="border-none">Remove</x-forms.button>
@endif
</td>
</tr>