This commit is contained in:
Andras Bacsai 2023-06-16 12:35:40 +02:00
parent 7456fc1ac7
commit 3589b92ec9
84 changed files with 285 additions and 244 deletions

View File

@ -13,6 +13,11 @@ class Form extends Component
'destination.network' => 'required',
'destination.server.ip' => 'required',
];
protected $validationAttributes = [
'destination.name' => 'name',
'destination.network' => 'network',
'destination.server.ip' => 'IP Address',
];
public function submit()
{
$this->validate();

View File

@ -22,6 +22,11 @@ class StandaloneDocker extends Component
'network' => 'required|string',
'server_id' => 'required|integer'
];
protected $validationAttributes = [
'name' => 'name',
'network' => 'network',
'server_id' => 'server'
];
public function mount()
{
if (request()->query('server_id')) {

View File

@ -15,6 +15,11 @@ class Change extends Component
'private_key.description' => 'nullable|string',
'private_key.private_key' => 'required|string'
];
protected $validationAttributes = [
'private_key.name' => 'name',
'private_key.description' => 'description',
'private_key.private_key' => 'private key'
];
public function mount()
{
$this->private_key = PrivateKey::where('uuid', $this->private_key_uuid)->first();

View File

@ -16,8 +16,8 @@ class Create extends Component
'value' => 'required|string',
];
protected $validationAttributes = [
'name' => 'Name',
'value' => 'Private Key',
'name' => 'name',
'value' => 'private Key',
];
public function createPrivateKey()
{

View File

@ -14,6 +14,9 @@ class Form extends Component
protected $rules = [
'name' => 'required',
];
protected $validationAttributes = [
'name' => 'name',
];
public function mount()
{
$this->userId = auth()->user()->id;

View File

@ -18,6 +18,11 @@ class Add extends Component
'value' => 'required|string',
'is_build_time' => 'required|boolean',
];
protected $validationAttributes = [
'key' => 'key',
'value' => 'value',
'is_build_time' => 'build',
];
public function mount()
{
$this->parameters = getRouteParameters();

View File

@ -15,6 +15,11 @@ class Show extends Component
'env.value' => 'required|string',
'env.is_build_time' => 'required|boolean',
];
protected $validationAttributes = [
'key' => 'key',
'value' => 'value',
'is_build_time' => 'build',
];
public function mount()
{
$this->parameters = getRouteParameters();

View File

@ -47,6 +47,22 @@ class General extends Component
'application.ports_exposes' => 'required',
'application.ports_mappings' => 'nullable',
];
protected $validationAttributes = [
'application.name' => 'name',
'application.fqdn' => 'FQDN',
'application.git_repository' => 'Git repository',
'application.git_branch' => 'Git branch',
'application.git_commit_sha' => 'Git commit SHA',
'application.install_command' => 'Install command',
'application.build_command' => 'Build command',
'application.start_command' => 'Start command',
'application.build_pack' => 'Build pack',
'application.static_image' => 'Static image',
'application.base_directory' => 'Base directory',
'application.publish_directory' => 'Publish directory',
'application.ports_exposes' => 'Ports exposes',
'application.ports_mappings' => 'Ports mappings',
];
public function instantSave()
{
// @TODO: find another way - if possible

View File

@ -14,6 +14,9 @@ class Form extends Component
protected $rules = [
'application.preview_url_template' => 'required',
];
protected $validationAttributes = [
'application.preview_url_template' => 'preview url template',
];
public function resetToDefault()
{
$this->application->preview_url_template = '{{pr_id}}.{{domain}}';

View File

@ -17,6 +17,15 @@ class ResourceLimits extends Component
'application.limits_cpuset' => 'nullable',
'application.limits_cpu_shares' => 'nullable',
];
protected $validationAttributes = [
'application.limits_memory' => 'memory',
'application.limits_memory_swap' => 'swap',
'application.limits_memory_swappiness' => 'swappiness',
'application.limits_memory_reservation' => 'reservation',
'application.limits_cpus' => 'cpus',
'application.limits_cpuset' => 'cpuset',
'application.limits_cpu_shares' => 'cpu shares',
];
public function submit()
{
try {

View File

@ -16,6 +16,11 @@ class Source extends Component
'application.git_branch' => 'required',
'application.git_commit_sha' => 'nullable',
];
protected $validationAttributes = [
'application.git_repository' => 'repository',
'application.git_branch' => 'branch',
'application.git_commit_sha' => 'commit sha',
];
private function get_private_keys()
{
$this->private_keys = PrivateKey::whereTeamId(session('currentTeam')->id)->get()->reject(function ($key) {

View File

@ -17,6 +17,11 @@ class Add extends Component
'mount_path' => 'required|string',
'host_path' => 'string|nullable',
];
protected $validationAttributes = [
'name' => 'name',
'mount_path' => 'mount',
'host_path' => 'host',
];
public function mount()
{
$this->parameters = getRouteParameters();

View File

@ -12,6 +12,11 @@ class Show extends Component
'storage.mount_path' => 'required|string',
'storage.host_path' => 'string|nullable',
];
protected $validationAttributes = [
'name' => 'name',
'mount_path' => 'mount',
'host_path' => 'host',
];
public function submit()
{
$this->validate();

View File

@ -3,14 +3,12 @@
namespace App\Http\Livewire\Project;
use App\Models\Environment;
use App\Models\Project;
use Livewire\Component;
class DeleteEnvironment extends Component
{
public array $parameters;
public int $environment_id;
public int $resource_count = 0;
public function mount()
{

View File

@ -9,7 +9,6 @@ class DeleteProject extends Component
{
public array $parameters;
public int $project_id;
public int $resource_count = 0;
public function mount()
{

View File

@ -37,6 +37,12 @@ class PublicGitRepository extends Component
'is_static' => 'required|boolean',
'publish_directory' => 'nullable|string',
];
protected $validationAttributes = [
'repository_url' => 'repository',
'port' => 'port',
'is_static' => 'static',
'publish_directory' => 'publish directory',
];
public function mount()
{
if (isDev()) {

View File

@ -16,6 +16,10 @@ class RunCommand extends Component
'server' => 'required',
'command' => 'required',
];
protected $validationAttributes = [
'server' => 'server',
'command' => 'command',
];
public function mount($servers)
{
$this->servers = $servers;

View File

@ -21,6 +21,15 @@ class Form extends Component
'server.settings.is_reachable' => 'required',
'server.settings.is_part_of_swarm' => 'required'
];
protected $validationAttributes = [
'server.name' => 'name',
'server.description' => 'description',
'server.ip' => 'ip',
'server.user' => 'user',
'server.port' => 'port',
'server.settings.is_reachable' => 'is reachable',
'server.settings.is_part_of_swarm' => 'is part of swarm'
];
public function installDocker()
{
$activity = resolve(InstallDocker::class)($this->server);

View File

@ -22,11 +22,18 @@ class ByIp extends Component
public bool $is_part_of_swarm = false;
protected $rules = [
'name' => 'required',
'ip' => 'required',
'user' => 'required',
'name' => 'required|string',
'description' => 'nullable|string',
'ip' => 'required|ip',
'user' => 'required|string',
'port' => 'required|integer',
'is_part_of_swarm' => 'required|boolean',
];
protected $validationAttributes = [
'name' => 'name',
'description' => 'description',
'ip' => 'ip',
'user' => 'user',
'port' => 'port',
];
public function mount()
{
@ -43,11 +50,11 @@ public function instantSave()
}
public function submit()
{
$this->validate();
try {
if (!$this->private_key_id) {
return $this->emit('error', 'You must select a private key');
}
$this->validate();
$server = Server::create([
'name' => $this->name,
'description' => $this->description,

View File

@ -25,6 +25,13 @@ class Configuration extends Component
'settings.public_port_max' => 'required',
'settings.default_redirect_404' => 'nullable',
];
protected $validationAttributes = [
'settings.fqdn' => 'FQDN',
'settings.wildcard_domain' => 'Wildcard domain',
'settings.public_port_min' => 'Public port min',
'settings.public_port_max' => 'Public port max',
'settings.default_redirect_404' => 'Default redirect 404',
];
public function mount()
{
$this->do_not_track = $this->settings->do_not_track;

View File

@ -10,12 +10,13 @@ class Upgrade extends Component
{
public bool $showProgress = false;
public bool $isUpgradeAvailable = false;
public string $latestVersion = '';
public function checkUpdate()
{
$latestVersion = get_latest_version_of_coolify();
$this->latestVersion = get_latest_version_of_coolify();
$currentVersion = config('version');
version_compare($currentVersion, $latestVersion, '<') ? $this->isUpgradeAvailable = true : $this->isUpgradeAvailable = false;
version_compare($currentVersion, $this->latestVersion, '<') ? $this->isUpgradeAvailable = true : $this->isUpgradeAvailable = false;
if (isDev()) {
$this->isUpgradeAvailable = true;
}
@ -25,7 +26,7 @@ public function upgrade()
try {
$this->showProgress = true;
resolve(UpdateCoolify::class)(true);
Toaster::success('Upgrading Coolify to latest version...');
Toaster::success("Upgrading Coolify to {$this->latestVersion} version...");
} catch (\Exception $e) {
return general_error_handler(err: $e, that: $this);
}

View File

@ -1,3 +1,3 @@
<?php
return '4.0.0-nightly.16';
return '4.0.0-nightly.17';

View File

@ -9,7 +9,7 @@ html {
@apply text-neutral-400;
}
body {
@apply scrollbar antialiased;
@apply scrollbar antialiased text-sm;
}
.main {
@apply pl-24 pr-10 mx-auto max-w-screen-xl pt-4;
@ -28,11 +28,11 @@ textarea {
@apply textarea placeholder:text-neutral-700 text-white rounded scrollbar bg-coolgray-200;
}
select {
@apply h-7 select select-xs text-sm disabled:bg-coolgray-200 border-none disabled:opacity-50 font-normal placeholder:text-neutral-700 text-white rounded bg-coolgray-200;
@apply h-7 select select-xs disabled:bg-coolgray-200 border-none disabled:opacity-50 font-normal placeholder:text-neutral-700 text-white rounded bg-coolgray-200;
}
.label-text,
label {
@apply text-neutral-400 text-sm;
@apply text-neutral-400;
}
.loading {
@ -58,7 +58,7 @@ h4 {
@apply text-base font-bold text-white;
}
a {
@apply text-neutral-400 hover:text-white text-sm link link-hover hover:bg-transparent;
@apply text-neutral-400 hover:text-white link link-hover hover:bg-transparent;
}
.kbd-custom {
@apply px-2 text-xs border border-dashed rounded border-neutral-700 text-warning;
@ -70,7 +70,7 @@ .icon:hover {
@apply text-white;
}
.box {
@apply flex items-center justify-center text-sm rounded min-h-12 bg-coolgray-200 hover:bg-coollabs-100 hover:text-white p-2 hover:no-underline transition-colors;
@apply flex items-center justify-center rounded min-h-12 bg-coolgray-200 hover:bg-coollabs-100 hover:text-white p-2 hover:no-underline transition-colors;
}
.lds-heart {
@ -106,13 +106,13 @@ table {
@apply min-w-full divide-y divide-coolgray-200;
}
thead {
@apply uppercase text-sm;
@apply uppercase;
}
tbody {
@apply divide-y divide-coolgray-200;
}
tr {
@apply text-sm text-neutral-400;
@apply text-neutral-400;
}
tr th {
@apply px-3 py-3.5 text-left text-white;

View File

@ -38,7 +38,7 @@
class="mt-4 mb-2 text-xs font-semibold text-neutral-500">{{
possibleSequences[sequenceState.sequence[sequenceState.currentActionIndex]].newTitle }}
</h2>
<ul class="mt-2 -mx-4 text-sm text-white ">
<ul class="mt-2 -mx-4 text-white">
<li class="flex items-center px-4 py-2 cursor-pointer select-none group hover:bg-coolgray-400"
id="option-1" role="option" tabindex="-1"
@click="addNew(sequenceState.sequence[sequenceState.currentActionIndex])">
@ -65,7 +65,7 @@
</ul>
</li>
<li>
<ul v-if="magic.length == 0" class="mt-2 -mx-4 text-sm text-white">
<ul v-if="magic.length == 0" class="mt-2 -mx-4 text-white">
<li class="flex items-center px-4 py-2 select-none group">
<svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6 icon" viewBox="0 0 24 24"
stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round"
@ -83,7 +83,7 @@
class="mt-4 mb-2 text-xs font-semibold text-neutral-500">{{
possibleSequences[sequenceState.sequence[sequenceState.currentActionIndex]].title }}
</h2>
<ul v-if="magic.length != 0" class="mt-2 -mx-4 text-sm text-white">
<ul v-if="magic.length != 0" class="mt-2 -mx-4 text-white">
<li class="flex items-center px-4 py-2 transition-all cursor-pointer select-none group hover:bg-coolgray-400"
:class="{ 'bg-coollabs': currentFocus === index }" id="option-1" role="option"
tabindex="-1" v-for="action, index in magic" @click="goThroughSequence(index)"

View File

@ -18,7 +18,7 @@
</div>
@endif
@if (session('status'))
<div class="mb-4 text-sm font-medium text-green-600">
<div class="mb-4 font-medium text-green-600">
{{ session('status') }}
</div>
@endif

View File

@ -33,7 +33,7 @@ class="text-xs text-center text-white normal-case bg-transparent border-none rou
<x-forms.button type="submit">{{ __('auth.login') }}</x-forms.button>
@if (!$is_registration_enabled)
<div class="text-sm text-center">{{ __('auth.registration_disabled') }}</div>
<div class="text-center ">{{ __('auth.registration_disabled') }}</div>
@endif
@if ($errors->any())
<div class="text-xs text-center text-error">
@ -41,7 +41,7 @@ class="text-xs text-center text-white normal-case bg-transparent border-none rou
</div>
@endif
@if (session('status'))
<div class="mb-4 text-sm font-medium text-green-600">
<div class="mb-4 font-medium text-green-600">
{{ session('status') }}
</div>
@endif

View File

@ -30,7 +30,7 @@
</div>
@endif
@if (session('status'))
<div class="mb-4 text-sm font-medium text-green-600">
<div class="mb-4 font-medium text-green-600">
{{ session('status') }}
</div>
@endif

View File

@ -36,7 +36,7 @@
</div>
@endif
@if (session('status'))
<div class="mb-4 text-sm font-medium text-green-600">
<div class="mb-4 font-medium text-green-600">
{{ session('status') }}
</div>
@endif

View File

@ -1,6 +1,6 @@
<x-layout>
<h1>Command Center</h1>
<div class="pt-2 pb-10 text-sm">Execute commands on your servers without leaving the browser.</div>
<div class="pt-2 pb-10">Execute commands on your servers without leaving the browser.</div>
@if ($servers->count() > 0)
<livewire:run-command :servers="$servers" />
@else

View File

@ -1,3 +1,46 @@
<nav class="flex pt-2 pb-10">
<ol class="flex items-center">
<li class="inline-flex items-center">
<a class="text-xs truncate lg:text-sm"
href="{{ route('project.show', ['project_uuid' => request()->route('project_uuid')]) }}">
{{ $application->environment->project->name }}</a>
</li>
<li>
<div class="flex items-center">
<svg aria-hidden="true" class="w-4 h-4 mx-1 font-bold text-warning" fill="currentColor" viewBox="0 0 20 20"
xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd"
d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z"
clip-rule="evenodd"></path>
</svg>
<a class="text-xs truncate lg:text-sm"
href="{{ route('project.resources', ['environment_name' => request()->route('environment_name'), 'project_uuid' => request()->route('project_uuid')]) }}">{{ request()->route('environment_name') }}</a>
</div>
</li>
<li>
<div class="flex items-center">
<svg aria-hidden="true" class="w-4 h-4 mx-1 font-bold text-warning" fill="currentColor"
viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd"
d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z"
clip-rule="evenodd"></path>
</svg>
<span class="text-xs truncate lg:text-sm">{{ data_get($application, 'name') }}</span>
</div>
</li>
<li>
<div class="flex items-center">
<svg aria-hidden="true" class="w-4 h-4 mx-1 font-bold text-warning" fill="currentColor"
viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd"
d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z"
clip-rule="evenodd"></path>
</svg>
<livewire:project.application.status :application="$application" />
</div>
</li>
</ol>
</nav>
<nav class="flex items-end gap-4 py-2 border-b-2 border-solid border-coolgray-200">
<a class="{{ request()->routeIs('project.application.configuration') ? 'text-white' : '' }}"
href="{{ route('project.application.configuration', [
@ -17,7 +60,7 @@
</a>
<div class="flex-1"></div>
<div class="group">
<label tabindex="0" class="flex items-center gap-2 text-sm cursor-pointer hover:text-white"> Links
<label tabindex="0" class="flex items-center gap-2 cursor-pointer hover:text-white"> Links
<x-chevron-down />
</label>
<div class="absolute hidden group-hover:block">

View File

@ -17,7 +17,7 @@
@if ($type === 'password')
<div class="w-full rounded join" x-data>
<input class="join-item" wire:model.defer={{ $id }} wire:dirty.class="input-warning"
@readonly($readonly) @disabled($disabled || $errors->isNotEmpty()) type={{ $type }} id={{ $id }}
@readonly($readonly) @disabled($disabled) type={{ $type }} id={{ $id }}
name={{ $name }} @isset($value) value={{ $value }} @endisset
@isset($placeholder) placeholder={{ $placeholder }} @endisset>
@if (!$cannotPeakPassword)
@ -40,12 +40,17 @@
</div>
@else
<input id={{ $id }} name={{ $name }} wire:model.defer={{ $id }}
wire:dirty.class="input-warning" @readonly($readonly) @disabled($disabled || $errors->isNotEmpty())
wire:dirty.class="input-warning" @readonly($readonly) @disabled($disabled)
@isset($value) value={{ $value }} @endisset
@isset($placeholder) placeholder={{ $placeholder }} @endisset>
@endif
@if (!$label && $helper)
<x-helper :helper="$helper" />
@endif
@error($id)
<label class="label">
<span class="text-red-500 label-text-alt">{{ $message }}</span>
</label>
@enderror
</div>
</div>

View File

@ -44,7 +44,7 @@ class="flex items-center justify-center flex-shrink-0 w-12 h-12 mx-auto rounded-
<h3 class="text-base font-semibold leading-6 text-white" id="modal-title">Delete Resource
</h3>
<div class="mt-2">
<p class="text-sm text-neutral-200">{{ $message }}</p>
<p class=" text-neutral-200">{{ $message }}</p>
</div>
</div>
</div>

View File

@ -117,7 +117,7 @@ class="absolute top-0 right-0 p-2 m-2 my-1 cursor-pointer hover:bg-transparent h
<form action="/logout" method="POST">
<li>
@csrf
<button class="text-sm text-white rounded-none hover:bg-coollabs"> <svg
<button class=" text-white rounded-none hover:bg-coollabs"> <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">

View File

@ -1,6 +1,6 @@
<div class="pb-6">
<h1>Server</h1>
<div class="pt-2 pb-10 text-sm">{{ data_get($server, 'name') }}</div>
<div class="pt-2 pb-10 ">{{ data_get($server, 'name') }}</div>
<nav class="flex items-end gap-4 py-2 border-b-2 border-solid border-coolgray-200">
<a class="{{ request()->routeIs('server.show') ? 'text-white' : '' }}"
href="{{ route('server.show', [

View File

@ -1,6 +1,6 @@
<div class="pb-6">
<h1>Settings</h1>
<div class="pt-2 pb-10 text-sm">Instance wide settings for Coolify.</div>
<div class="pt-2 pb-10 ">Instance wide settings for Coolify.</div>
<nav class="flex items-end gap-4 py-2 border-b-2 border-solid border-coolgray-200">
<a class="{{ request()->routeIs('settings.configuration') ? 'text-white' : '' }}"
href="{{ route('settings.configuration') }}">

View File

@ -1,5 +1,5 @@
<x-loading wire:loading.delay.longer />
<div class="flex items-center gap-2 text-sm" wire:loading.remove.delay.longer>
<div class="flex items-center gap-2 " wire:loading.remove.delay.longer>
<div class="badge badge-error badge-xs"></div>
<div class="text-xs font-medium tracking-wide text-error">Stopped</div>
</div>

View File

@ -1,5 +1,5 @@
<x-loading wire:loading.delay.longer />
<div class="flex items-center gap-2 text-sm" wire:loading.remove.delay.longer>
<div class="flex items-center gap-2 " wire:loading.remove.delay.longer>
<div class="badge badge-success badge-xs"></div>
<div class="text-xs font-medium tracking-wide text-success">Running</div>
</div>

View File

@ -1,5 +1,5 @@
<x-loading wire:loading.delay.longer />
<div class="flex items-center gap-2 text-sm" wire:loading.remove.delay.longer>
<div class="flex items-center gap-2 " wire:loading.remove.delay.longer>
<div class="badge badge-error badge-xs"></div>
<div class="text-xs font-medium tracking-wide text-error">Stopped</div>
</div>

View File

@ -1,6 +1,6 @@
<div class="pb-6">
<h1>Team</h1>
<nav class="flex pt-2 pb-10 text-sm">
<nav class="flex pt-2 pb-10 ">
<ol class="inline-flex items-center">
<li class="inline-flex items-center">
Currently Active Team

View File

@ -1,6 +1,6 @@
<x-layout>
<h1>Dashboard</h1>
<div class="pt-2 pb-10 text-sm">Something (more) useful will be here.</div>
<div class="pt-2 pb-10">Something (more) useful will be here.</div>
<div class="w-full rounded shadow stats stats-vertical lg:stats-horizontal">
<div class="stat">
<div class="stat-title">Servers</div>

View File

@ -1,6 +1,6 @@
<x-layout>
<h1>Destinations</h1>
<div class="pt-2 pb-10 text-sm">All Destinations</div>
<div class="pt-2 pb-10 ">All Destinations</div>
<div class="grid lg:grid-cols-2 gap-2">
@forelse ($destinations as $destination)
@if ($destination->getMorphClass() === 'App\Models\StandaloneDocker')

View File

@ -8,9 +8,9 @@
</p>
<div class="flex items-center justify-center mt-10 gap-x-6">
<a href="/"
class="rounded-md bg-coollabs px-3.5 py-2.5 text-sm font-semibold text-white shadow-sm hover:bg-coollabs-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600 hover:no-underline">Go
class="rounded-md bg-coollabs px-3.5 py-2.5 font-semibold text-white shadow-sm hover:bg-coollabs-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600 hover:no-underline">Go
back home</a>
<a href="https://docs.coollabs.io/contact.html" class="text-sm font-semibold text-white">Contact
<a href="https://docs.coollabs.io/contact.html" class=" font-semibold text-white">Contact
support
<span aria-hidden="true">&rarr;</span></a>
</div>

View File

@ -14,9 +14,9 @@
</div>
@if ($destination->getMorphClass() === 'App\Models\StandaloneDocker')
<div class="pt-2 pb-10 text-sm">A Docker network in a non-swarm environment</div>
<div class="pt-2 pb-10 ">A Docker network in a non-swarm environment</div>
@else
<div class="pt-2 pb-10 text-sm">Your swarm docker network. WIP</div>
<div class="pt-2 pb-10 ">Your swarm docker network. WIP</div>
@endif
<div class="flex gap-2">
<x-forms.input id="destination.name" label="Name" />

View File

@ -1,6 +1,6 @@
<div>
<h1>Create a new Destination</h1>
<div class="pt-2 pb-10 text-sm">Destinations are used to segregate resources by network.</div>
<div class="pt-2 pb-10 ">Destinations are used to segregate resources by network.</div>
<form class="flex flex-col gap-4" wire:submit.prevent='submit'>
<div class="flex gap-2">
<x-forms.input id="name" label="Name" required />

View File

@ -6,15 +6,15 @@
</a>
<x-forms.button wire:click='scan'>Scan destinations on the server</x-forms.button>
</div>
<div class="pt-2 pb-6 text-sm">Destinations are used to segregate resources by network.</div>
<div class="flex gap-2 text-sm">
<div class="pt-2 pb-6 ">Destinations are used to segregate resources by network.</div>
<div class="flex gap-2 ">
Available for using:
@forelse ($server->standaloneDockers as $docker)
<a href="{{ route('destination.show', ['destination_uuid' => data_get($docker, 'uuid')]) }}">
<button class="text-white btn-link">{{ data_get($docker, 'network') }} </button>
</a>
@empty
<div class="text-sm">N\A</div>
<div class="">N\A</div>
@endforelse
</div>
<div class="grid gap-2 pt-2">
@ -22,7 +22,7 @@
<h3>Scanned available Destinations</h3>
@endif
@foreach ($networks as $network)
<div class="flex gap-2 text-sm w-96">
<div class="flex gap-2 w-96">
<div class="w-32">{{ data_get($network, 'Name') }}</div>
<a
href="{{ route('destination.new', ['server_id' => $server->id, 'network_name' => data_get($network, 'Name')]) }}">

View File

@ -10,12 +10,12 @@
Delete
</x-forms.button>
</div>
<div class="pb-8 text-sm">Private Key used for SSH connection</div>
<div class="pb-8 ">Private Key used for SSH connection</div>
<x-forms.input id="private_key.name" label="Name" required />
<x-forms.input id="private_key.description" label="Description" />
<div>
<div class="flex items-end gap-2 py-2 ">
<div class="pl-1 text-sm">Private Key <span class='text-helper'>*</span></div>
<div class="pl-1 ">Private Key <span class='text-helper'>*</span></div>
<div class="text-xs text-white underline cursor-pointer" x-cloak x-show="!showPrivateKey"
x-on:click="showPrivateKey = true">
Show

View File

@ -1,8 +1,8 @@
<div x-data="{ deleteApplication: false }">
<h2>Danger Zone</h2>
<div class="text-sm">Woah. I hope you know what are you doing.</div>
<div class="">Woah. I hope you know what are you doing.</div>
<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
<div class="pb-4 ">This will stop your containers, delete all related data, etc. Beware! There is no coming
back!
</div>
<x-naked-modal show="deleteApplication" />

View File

@ -1,13 +1,13 @@
<div class="pt-4">
<livewire:project.application.deployment-navbar :activity="$activity" :application="$application" :deployment_uuid="$deployment_uuid" />
@if (data_get($activity, 'properties.status') === 'in_progress')
<div class="flex items-center gap-1 pt-2 text-sm">Deployment is
<div class="flex items-center gap-1 pt-2 ">Deployment is
<div class="text-warning"> {{ Str::headline(data_get($activity, 'properties.status')) }}.</div>
<x-loading class="loading-ring" />
</div>
<div class="text-sm">Logs will be updated automatically.</div>
<div class="">Logs will be updated automatically.</div>
@else
<div class="pt-2 text-sm">Deployment is <span
<div class="pt-2 ">Deployment is <span
class="text-warning">{{ Str::headline(data_get($activity, 'properties.status')) }}</span>.
</div>
@endif

View File

@ -23,8 +23,8 @@
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->id }} <span class=" text-warning">></span> {{ $deployment->deployment_uuid }}
<span class=" text-warning">></span>
{{ $deployment->status }}
</div>
@if (data_get($deployment, 'pull_request_id'))

View File

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

View File

@ -1,7 +1,7 @@
<div class="flex flex-col gap-2">
<div>
<h2>Environment Variables</h2>
<div class="text-sm">Environment (secrets) variables for normal deployments.</div>
<div class="">Environment (secrets) variables for normal deployments.</div>
</div>
@foreach ($application->environment_variables as $env)
<livewire:project.application.environment-variable.show wire:key="environment-{{ $env->id }}"
@ -12,7 +12,7 @@
</div>
<div>
<h3>Preview Deployments</h3>
<div class="text-sm">Environment (secrets) variables for Preview Deployments.</div>
<div class="">Environment (secrets) variables for Preview Deployments.</div>
</div>
@foreach ($application->environment_variables_preview as $env)
<livewire:project.application.environment-variable.show wire:key="environment-{{ $env->id }}"

View File

@ -6,7 +6,7 @@
Save
</x-forms.button>
</div>
<div class="text-sm">General configuration for your application.</div>
<div class="">General configuration for your application.</div>
<div class="flex flex-col gap-2 py-4">
<div class="flex flex-col items-end gap-2 xl:flex-row">
<x-forms.input id="application.name" label="Name" required />
@ -16,7 +16,7 @@
</div>
@if ($wildcard_domain)
<div class="pb-6">
<div class="text-sm">Set Random Domain</div>
<div class="">Set Random Domain</div>
@if ($global_wildcard_domain)
<x-forms.button wire:click="generateGlobalRandomDomain">Global Wildcard
</x-forms.button>

View File

@ -4,10 +4,10 @@
<x-forms.button type="submit">Save</x-forms.button>
<x-forms.button wire:click="resetToDefault">Reset template to default</x-forms.button>
</div>
<div class="pb-4 text-sm">Preview Deployments based on pull requests are here.</div>
<div class="pb-4 ">Preview Deployments based on pull requests are here.</div>
<div class="flex flex-col gap-2 pb-4">
<x-forms.input id="application.preview_url_template" label="Preview URL Template"
helper="Templates:<span class='text-helper'>@@{{ random }}</span> to generate random sub-domain each time a PR is deployed, <span class='text-helper'>@@{{ pr_id }}</span> to use pull request ID as sub-domain or <span class='text-helper'>@@{{ domain }}</span> to replace the domain name with the application's domain name." />
<div class="text-sm">Domain Preview: {{ $preview_url_template }}</div>
<div class="">Domain Preview: {{ $preview_url_template }}</div>
</div>
</form>

View File

@ -7,7 +7,7 @@
</x-forms.button>
</div>
@isset($rate_limit_remaining)
<div class="pt-1 text-sm">Requests remaning till rate limited by Git: {{ $rate_limit_remaining }}</div>
<div class="pt-1 ">Requests remaning till rate limited by Git: {{ $rate_limit_remaining }}</div>
@endisset
@if (count($pull_requests) > 0)
<div wire:loading.remove wire:target='load_prs'>
@ -49,7 +49,7 @@
</div>
@if ($application->previews->count() > 0)
<h4 class="pt-4">Preview Deployments</h4>
<div class="flex gap-6 text-sm">
<div class="flex gap-6 ">
@foreach ($application->previews as $preview)
<div class="flex flex-col p-4 bg-coolgray-200 " x-init="$wire.loadStatus('{{ data_get($preview, 'pull_request_id') }}')">
<div class="flex gap-2">PR #{{ data_get($preview, 'pull_request_id') }} |

View File

@ -4,7 +4,7 @@
<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>
<div class="">Limit your container resources by CPU & memory.</div>
<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" />

View File

@ -3,14 +3,14 @@
<h2>Rollback</h2>
<x-forms.button 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>
<div class="pb-4 ">You can easily rollback to a previously built image quickly.</div>
<div wire:target='loadImages'>
<div class="flex flex-wrap">
@foreach ($images as $image)
<div class="w-2/4 p-2">
<div class="rounded shadow-lg bg-coolgray-200">
<div class="p-2">
<div class="text-sm">
<div class="">
@if (data_get($image, 'is_current'))
<span class="font-bold text-warning">LIVE</span>
|

View File

@ -18,7 +18,7 @@
</a>
@endif
</div>
<div class="text-sm">Code source of your application.</div>
<div class="">Code source of your application.</div>
<x-forms.input placeholder="coollabsio/coolify-example" id="application.git_repository" label="Repository" />
<x-forms.input placeholder="main" id="application.git_branch" label="Branch" />
<div class="flex items-end gap-2 w-96">
@ -40,7 +40,7 @@
<h4 class="py-2 pt-4">Current Deploy Key: <span
class="text-warning">{{ $application->private_key->name }}</span></h4>
<div class="py-2 text-sm">Select another Deploy Key</div>
<div class="py-2 ">Select another Deploy Key</div>
<div class="flex gap-2">
@foreach ($private_keys as $key)
<x-forms.button wire:click.defer="setPrivateKey('{{ $key->id }}')">{{ $key->name }}

View File

@ -7,7 +7,7 @@
volume
name, example: <span class='text-helper'>-pr-1</span>" />
</div>
<div class="text-sm">Persistent storage to preserve data between deployments.</div>
<div class="">Persistent storage to preserve data between deployments.</div>
</div>
<div class="flex flex-col gap-2 py-4">
@foreach ($application->persistentStorages as $storage)

View File

@ -1,12 +1,6 @@
<div x-data="{ deleteEnvironment: false }">
<x-naked-modal show="deleteEnvironment" message='Are you sure you would like to delete this environment?' />
@if ($resource_count > 0)
<x-forms.button tooltip="First delete all resources." disabled>
Delete Environment
</x-forms.button>
@else
<x-forms.button x-on:click.prevent="deleteEnvironment = true">
Delete Environment
</x-forms.button>
@endif
<x-forms.button x-on:click.prevent="deleteEnvironment = true">
Delete Environment
</x-forms.button>
</div>

View File

@ -1,12 +1,6 @@
<div x-data="{ deleteProject: false }">
<x-naked-modal show="deleteProject" message='Are you sure you would like to delete this project?' />
@if ($resource_count > 0)
<x-forms.button disabled="First delete all resources.">
Delete Project
</x-forms.button>
@else
<x-forms.button x-on:click.prevent="deleteProject = true">
Delete Project
</x-forms.button>
@endif
<x-forms.button x-on:click.prevent="deleteProject = true">
Delete Project
</x-forms.button>
</div>

View File

@ -1,6 +1,6 @@
<div>
<h1>Create a new Application</h1>
<div class="pt-2 pb-10 text-sm">Deploy any public or private GIT repositories through a Deploy Key.</div>
<div class="pt-2 pb-10 ">Deploy any public or private GIT repositories through a Deploy Key.</div>
<h3 class="py-2">Select a Private Key</h3>
@foreach ($private_keys as $key)
@if ($private_key_id == $key->id)

View File

@ -1,6 +1,6 @@
<div>
<h1>Create a new Application</h1>
<div class="pb-4 text-sm">Deploy any public or private git repositories through a GitHub App.</div>
<div class="pb-4 ">Deploy any public or private git repositories through a GitHub App.</div>
@if ($github_apps->count() > 0)
<form class="flex flex-col" wire:submit.prevent='submit'>
<div class="flex flex-col gap-2">

View File

@ -1,6 +1,6 @@
<div>
<h1>Create a new Application</h1>
<div class="pb-4 text-sm">Deploy any public git repositories.</div>
<div class="pb-4 ">Deploy any public git repositories.</div>
<form class="flex flex-col gap-2" wire:submit.prevent>
<div class="flex flex-col gap-2">
<div class="flex flex-col">

View File

@ -63,7 +63,7 @@
</div>
@isset($uptime)
<h4 class="pb-3">Server Info</h4>
<div class="text-sm">
<div class="">
<p>Uptime: {{ $uptime }}</p>
@isset($dockerVersion)
<p>Docker Engine {{ $dockerVersion }}</p>

View File

@ -1,6 +1,6 @@
<div>
<h1>Create a new Server</h1>
<div class="pt-2 pb-10 text-sm">Servers are the main blocks of your infrastructure.</div>
<div class="pt-2 pb-10 ">Servers are the main blocks of your infrastructure.</div>
<form class="flex flex-col gap-2" wire:submit.prevent='submit'>
<div class="flex gap-2">
<x-forms.input id="name" label="Name" required />
@ -22,8 +22,6 @@
@endif
@endforeach
</x-forms.select>
{{-- <x-forms.checkbox class="pb-8" disabled instantSave noDirty id="is_part_of_swarm"
label="Is it part of a Swarm cluster?" /> --}}
<x-forms.button type="submit">
Save New Server
</x-forms.button>

View File

@ -5,15 +5,15 @@
<x-forms.button>Add a new Private Key</x-forms.button>
</a>
</div>
<div class="pt-2 pb-6 text-sm">Selected Private Key for SSH connection</div>
<div class="pb-10 text-sm">
<div class="pt-2 pb-6 ">Selected Private Key for SSH connection</div>
<div class="pb-10 ">
@if (data_get($server, 'privateKey.uuid'))
Currently attached Private Key:
<a href="{{ route('private-key.show', ['private_key_uuid' => data_get($server, 'privateKey.uuid')]) }}">
<button class="text-white btn-link">{{ data_get($server, 'privateKey.name') }}</button>
</a>
@else
<div class="text-sm">No private key attached.</div>
<div class="">No private key attached.</div>
@endif
</div>
<h3 class="pb-4">Select a different Private Key</h3>

View File

@ -18,11 +18,11 @@
@endif
<livewire:server.proxy.status :server="$server" />
</div>
<div class="pt-3 pb-4 text-sm">Traefik v2</div>
<div class="pt-3 pb-4 ">Traefik v2</div>
@if (
$server->extra_attributes->proxy_last_applied_settings &&
$server->extra_attributes->proxy_last_saved_settings !== $server->extra_attributes->proxy_last_applied_settings)
<div class="text-sm text-red-500">Configuration out of sync. Restart to get the new configs.
<div class="text-red-500 ">Configuration out of sync. Restart to get the new configs.
</div>
@endif
<div class="container w-full mx-auto">
@ -42,7 +42,7 @@
@else
<div>
<h2>Proxy</h2>
<div class="pt-2 pb-10 text-sm">Select a proxy you would like to use on this server.</div>
<div class="pt-2 pb-10 ">Select a proxy you would like to use on this server.</div>
<div class="flex gap-2">
<x-forms.button class="w-32 box" wire:click="setProxy('{{ \App\Enums\ProxyTypes::TRAEFIK_V2 }}')">
Traefik
@ -58,6 +58,6 @@
</div>
@endif
@else
<div class="text-sm">Server is not validated. Validate first.</div>
<div class="">Server is not validated. Validate first.</div>
@endif
</div>

View File

@ -3,7 +3,7 @@
@if ($server->extra_attributes->proxy_status === 'running')
<div class="flex gap-4">
<div class="group">
<label tabindex="0" class="flex items-center gap-2 text-sm cursor-pointer hover:text-white"> Links
<label tabindex="0" class="flex items-center gap-2 cursor-pointer hover:text-white"> Links
<x-chevron-down />
</label>
<div class="absolute hidden group-hover:block ">
@ -57,7 +57,7 @@ class="relative text-xs text-white normal-case rounded min-w-max menu bg-coolgra
</div>
</div>
@else
<button wire:click='deploy' class="flex items-center gap-2 text-sm cursor-pointer hover:text-white"> <svg
<button wire:click='deploy' class="flex items-center gap-2 cursor-pointer hover:text-white"> <svg
xmlns="http://www.w3.org/2000/svg" class="w-5 h-5" 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" />

View File

@ -6,7 +6,7 @@
Save
</x-forms.button>
</div>
<div class="pt-2 pb-4 text-sm">SMTP settings for password resets, invitations, etc.</div>
<div class="pt-2 pb-4 ">SMTP settings for password resets, invitations, etc.</div>
<div class="flex flex-col">
<x-forms.checkbox instantSave id="settings.extra_attributes.smtp_active" label="Enabled" />
</div>

View File

@ -29,7 +29,7 @@
@endif
</div>
</div>
<div class="pt-2 pb-10 text-sm">Your Private GitHub App for private repositories.</div>
<div class="pt-2 pb-10 ">Your Private GitHub App for private repositories.</div>
@if ($github_app->app_id)
<div class="flex gap-2">
<x-forms.input id="github_app.name" label="App Name" disabled />
@ -72,7 +72,7 @@
Application
</x-forms.button>
</div>
<div class="pt-1 pb-2 text-sm">You need to register a GitHub App before using this source.</div>
<div class="pt-1 pb-2 ">You need to register a GitHub App before using this source.</div>
<div class="pt-2 pb-10">
<div class="flex items-end gap-2">
<x-forms.select wire:model='webhook_endpoint' label="Webhook Endpoint"

View File

@ -1,6 +1,6 @@
<x-layout>
<h1>Private Keys</h1>
<div class="pt-2 pb-10 text-sm">All Private Keys</div>
<div class="pt-2 pb-10 ">All Private Keys</div>
<div class="grid gap-2 lg:grid-cols-2">
@forelse ($privateKeys as $key)
<a class="text-center hover:no-underline box group"

View File

@ -1,5 +1,5 @@
<x-layout>
<h1>Create a new Private Key</h1>
<div class="pt-2 pb-10 text-sm">Private Keys are used for connection to servers.</div>
<div class="pt-2 pb-10 ">Private Keys are used for connection to servers.</div>
<livewire:private-key.create />
</x-layout>

View File

@ -1,10 +1,10 @@
<x-layout>
<h1>Profile</h1>
<div class="pt-2 pb-10 text-sm">Your user profile settings.</div>
<div class="pt-2 pb-10 ">Your user profile settings.</div>
<livewire:profile.form :request="$request" />
<h3 class="py-4">Two-factor Authentication</h3>
@if (session('status') == 'two-factor-authentication-enabled')
<div class="mb-4 text-sm font-medium">
<div class="mb-4 font-medium">
Please finish configuring two factor authentication below. Read the QR code or enter the secret key
manually.
</div>
@ -19,17 +19,17 @@
<div x-data="{ showCode: false }" class="py-2">
<x-forms.button x-on:click="showCode = !showCode">Show secret key to manually enter</x-forms.button>
<template x-if="showCode">
<div class="py-2 text-sm">{!! decrypt($request->user()->two_factor_secret) !!}</div>
<div class="py-2 ">{!! decrypt($request->user()->two_factor_secret) !!}</div>
</template>
</div>
</div>
</div>
@elseif(session('status') == 'two-factor-authentication-confirmed')
<div class="mb-4 text-sm">
<div class="mb-4 ">
Two factor authentication confirmed and enabled successfully.
</div>
<div>
<div class="pb-6 text-sm">Here are the recovery codes for your account. Please store them in a secure
<div class="pb-6 ">Here are the recovery codes for your account. Please store them in a secure
location.</div>
<div class="text-white">
@foreach ($request->user()->recoveryCodes() as $code)
@ -39,7 +39,7 @@
</div>
@else
@if ($request->user()->two_factor_confirmed_at)
<div class="text-sm"> Two factor authentication is <span class="text-helper">enabled</span>.</div>
<div class=""> Two factor authentication is <span class="text-helper">enabled</span>.</div>
<div class="flex gap-2">
<form action="/user/two-factor-authentication" method="POST">
@csrf
@ -53,7 +53,7 @@
</div>
@if (session('status') == 'recovery-codes-generated')
<div>
<div class="py-6 text-sm">Here are the recovery codes for your account. Please store them in a
<div class="py-6 ">Here are the recovery codes for your account. Please store them in a
secure
location.</div>
<div class="text-white">
@ -64,7 +64,7 @@
</div>
@endif
@else
<div class="pb-2 text-sm">Two factor authentication is <span class="text-helper">disabled</span>.</div>
<div class="pb-2 ">Two factor authentication is <span class="text-helper">disabled</span>.</div>
<form action="/user/two-factor-authentication" method="POST">
@csrf
<x-forms.button type="submit">Configure 2FA</x-forms.button>

View File

@ -1,49 +1,5 @@
<x-layout>
<h1>Configuration</h1>
<nav class="flex pt-2 pb-10">
<ol class="flex items-center">
<li class="inline-flex items-center">
<a class="text-xs truncate lg:text-sm"
href="{{ route('project.show', ['project_uuid' => request()->route('project_uuid')]) }}">
{{ $application->environment->project->name }}</a>
</li>
<li>
<div class="flex items-center">
<svg aria-hidden="true" class="w-4 h-4 mx-1 font-bold text-warning" fill="currentColor"
viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd"
d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z"
clip-rule="evenodd"></path>
</svg>
<a class="text-xs truncate lg:text-sm"
href="{{ route('project.resources', ['environment_name' => request()->route('environment_name'), 'project_uuid' => request()->route('project_uuid')]) }}">{{ request()->route('environment_name') }}</a>
</div>
</li>
<li>
<div class="flex items-center">
<svg aria-hidden="true" class="w-4 h-4 mx-1 font-bold text-warning" fill="currentColor"
viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd"
d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z"
clip-rule="evenodd"></path>
</svg>
<span class="text-xs truncate lg:text-sm">{{ data_get($application, 'name') }}</span>
</div>
</li>
<li>
<div class="flex items-center">
<svg aria-hidden="true" class="w-4 h-4 mx-1 font-bold text-warning" fill="currentColor"
viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd"
d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z"
clip-rule="evenodd"></path>
</svg>
<livewire:project.application.status :application="$application" />
</div>
</li>
</ol>
</nav>
<x-applications.navbar :application="$application" />
<div x-data="{ activeTab: window.location.hash ? window.location.hash.substring(1) : 'general' }" class="flex h-full pt-6">
<div class="flex flex-col gap-4 min-w-fit">

View File

@ -1,6 +1,6 @@
<x-layout>
<h1 class="py-0">Deployment</h1>
<nav class="flex pt-2 pb-10 text-sm">
<nav class="flex pt-2 pb-10 ">
<ol class="inline-flex items-center">
<li class="inline-flex items-center">
<a

View File

@ -1,47 +1,5 @@
<x-layout>
<h1>Deployments</h1>
<nav class="flex pt-2 pb-10 text-sm">
<ol class="inline-flex items-center">
<li class="inline-flex items-center">
<a
href="{{ route('project.show', ['project_uuid' => request()->route('project_uuid')]) }}">{{ $application->environment->project->name }}</a>
</li>
<li>
<div class="flex items-center">
<svg aria-hidden="true" class="w-4 h-4 mx-1 font-bold text-warning" fill="currentColor"
viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd"
d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z"
clip-rule="evenodd"></path>
</svg>
<a
href="{{ route('project.resources', ['environment_name' => request()->route('environment_name'), 'project_uuid' => request()->route('project_uuid')]) }}">{{ request()->route('environment_name') }}</a>
</div>
</li>
<li>
<div class="flex items-center">
<svg aria-hidden="true" class="w-4 h-4 mx-1 font-bold text-warning" fill="currentColor"
viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd"
d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z"
clip-rule="evenodd"></path>
</svg>
<span>{{ data_get($application, 'name') }}</span>
</div>
</li>
<li>
<div class="flex items-center">
<svg aria-hidden="true" class="w-4 h-4 mx-1 font-bold text-warning" fill="currentColor"
viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd"
d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z"
clip-rule="evenodd"></path>
</svg>
<livewire:project.application.status :application="$application" />
</div>
</li>
</ol>
</nav>
<x-applications.navbar :application="$application" />
<livewire:project.application.deployments :application_id="$application->id" />
</x-layout>

View File

@ -2,14 +2,16 @@
<div class="flex flex-col">
<div class="flex items-center gap-2">
<h1>Resources</h1>
<livewire:project.delete-environment :environment_id="$environment->id" :resource_count="$environment->applications->count()" />
@if ($environment->applications->count() === 0)
<livewire:project.delete-environment :environment_id="$environment->id" />
@endif
</div>
<nav class="flex pt-2 pb-10 text-sm">
<ol class="inline-flex items-center">
<nav class="flex pt-2 pb-10">
<ol class="flex items-center">
<li class="inline-flex items-center">
<a href="{{ route('project.show', ['project_uuid' => request()->route('project_uuid')]) }}">
{{ $project->name }}
</a>
<a class="text-xs truncate lg:text-sm"
href="{{ route('project.show', ['project_uuid' => request()->route('project_uuid')]) }}">
{{ $project->name }}</a>
</li>
<li>
<div class="flex items-center">
@ -19,7 +21,8 @@
d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z"
clip-rule="evenodd"></path>
</svg>
{{ request()->route('environment_name') }}
<a class="text-xs truncate lg:text-sm"
href="{{ route('project.resources', ['environment_name' => request()->route('environment_name'), 'project_uuid' => request()->route('project_uuid')]) }}">{{ request()->route('environment_name') }}</a>
</div>
</li>
</ol>
@ -28,26 +31,12 @@
@if ($environment->applications->count() === 0)
<p>No resources found.</p>
@endif
<div class="grid lg:grid-cols-2 gap-2">
<div class="grid gap-2 lg:grid-cols-2">
@foreach ($environment->applications->sortBy('name') as $application)
<a class="box"
href="{{ route('project.application.configuration', [$project->uuid, $environment->name, $application->uuid]) }}">
{{ $application->name }}
</a>
@endforeach
{{-- @foreach ($environment->databases as $database)
<p>
<a href="{{ route('project.database', [$project->uuid, $environment->name, $database->uuid]) }}">
{{ $database->name }}
</a>
</p>
@endforeach
@foreach ($environment->services as $service)
<p>
<a href="{{ route('project.service', [$project->uuid, $environment->name, $service->uuid]) }}">
{{ $service->name }}
</a>
</p>
@endforeach --}}
</div>
</x-layout>

View File

@ -1,10 +1,12 @@
<x-layout>
<div class="flex items-center gap-2">
<h1>Environments</h1>
<livewire:project.delete-project :project_id="$project->id" :resource_count="$project->applications->count()" />
@if ($project->applications->count() === 0)
<livewire:project.delete-project :project_id="$project->id" />
@endif
</div>
<div class="pt-2 pb-10 text-sm">{{ $project->name }}.</div>
<div class="grid lg:grid-cols-2 gap-2">
<div class="pt-2 pb-10 text-xs truncate lg:text-sm">{{ $project->name }}</div>
<div class="grid gap-2 lg:grid-cols-2">
@forelse ($project->environments as $environment)
<a class="box" href="{{ route('project.resources', [$project->uuid, $environment->name]) }}">
{{ $environment->name }}

View File

@ -1,6 +1,6 @@
<x-layout>
<h1>Projects</h1>
<div class="pt-2 pb-10 text-sm">All Projects</div>
<div class="pt-2 pb-10 ">All Projects</div>
<div class="grid gap-2 lg:grid-cols-2">
@forelse ($projects as $project)
<a href="{{ route('project.show', ['project_uuid' => data_get($project, 'uuid')]) }}"

View File

@ -1,6 +1,6 @@
<x-layout>
<h1>Servers</h1>
<div class="pt-2 pb-10 text-sm">All Servers</div>
<div class="pt-2 pb-10 ">All Servers</div>
<div class="grid gap-2 lg:grid-cols-2">
@forelse ($servers as $server)
<a class="text-center hover:no-underline box group"

View File

@ -1,6 +1,6 @@
<x-layout>
<h1>Sources</h1>
<div class="pt-2 pb-10 text-sm">All Sources</div>
<div class="pt-2 pb-10 ">All Sources</div>
<div class="grid gap-2 lg:grid-cols-2">
@forelse ($sources as $source)
@if ($source->getMorphClass() === 'App\Models\GithubApp')

View File

@ -1,13 +1,13 @@
<x-layout>
<h1>New Source</h1>
<div class="pt-2 pb-10 text-sm">Add source providers for your applications.</div>
<div class="pt-2 pb-10 ">Add source providers for your applications.</div>
<div x-data="{ activeTab: window.location.hash ? window.location.hash.substring(1) : '' }">
<div class="flex justify-center h-full gap-2 pb-6">
<a class="flex items-center justify-center w-1/2 p-2 text-sm transition-colors rounded-none min-h-12 bg-coolgray-200 hover:bg-coollabs-100 hover:text-white hover:no-underline"
<a class="flex items-center justify-center w-1/2 p-2 transition-colors rounded-none min-h-12 bg-coolgray-200 hover:bg-coollabs-100 hover:text-white hover:no-underline"
:class="activeTab === 'github' && 'bg-coollabs text-white'"
@click.prevent="activeTab = 'github'; window.location.hash = 'github'" href="#">GitHub
</a>
<a class="flex items-center justify-center w-1/2 p-2 text-sm transition-colors rounded-none min-h-12 bg-coolgray-200 hover:bg-coollabs-100 hover:text-white hover:no-underline"
<a class="flex items-center justify-center w-1/2 p-2 transition-colors rounded-none min-h-12 bg-coolgray-200 hover:bg-coollabs-100 hover:text-white hover:no-underline"
:class="activeTab === 'gitlab' && 'bg-coollabs text-white'"
@click.prevent="activeTab = 'gitlab'; window.location.hash = 'gitlab'" href="#">GitLab
</a>

View File

@ -22,7 +22,7 @@
class="relative flex duration-300 transform transition ease-in-out max-w-md w-full pointer-events-auto {{ $position->is('center') ? 'text-center' : 'text-left' }}"
:class="toast.select({ error: 'text-white', info: 'text-white', success: 'text-white', warning: 'text-white' })"
>
<i class=" flex items-center gap-2 select-none not-italic pr-6 pl-4 py-3 rounded shadow-lg text-sm w-full {{ $alignment->is('bottom') ? 'mt-3' : 'mb-3' }}"
<i class=" flex items-center gap-2 select-none not-italic pr-6 pl-4 py-3 rounded shadow-lg w-full {{ $alignment->is('bottom') ? 'mt-3' : 'mb-3' }}"
:class="toast.select({
error: 'bg-coolgray-300',
info: 'bg-coolgray-300',

View File

@ -4,7 +4,7 @@
"version": "3.12.31"
},
"v4": {
"version": "4.0.0-nightly.16"
"version": "4.0.0-nightly.17"
}
}
}