fix
This commit is contained in:
parent
7456fc1ac7
commit
3589b92ec9
@ -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();
|
||||
|
@ -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')) {
|
||||
|
@ -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();
|
||||
|
@ -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()
|
||||
{
|
||||
|
@ -14,6 +14,9 @@ class Form extends Component
|
||||
protected $rules = [
|
||||
'name' => 'required',
|
||||
];
|
||||
protected $validationAttributes = [
|
||||
'name' => 'name',
|
||||
];
|
||||
public function mount()
|
||||
{
|
||||
$this->userId = auth()->user()->id;
|
||||
|
@ -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();
|
||||
|
@ -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();
|
||||
|
@ -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
|
||||
|
@ -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}}';
|
||||
|
@ -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 {
|
||||
|
@ -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) {
|
||||
|
@ -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();
|
||||
|
@ -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();
|
||||
|
@ -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()
|
||||
{
|
||||
|
@ -9,7 +9,6 @@ class DeleteProject extends Component
|
||||
{
|
||||
public array $parameters;
|
||||
public int $project_id;
|
||||
public int $resource_count = 0;
|
||||
|
||||
public function mount()
|
||||
{
|
||||
|
@ -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()) {
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -1,3 +1,3 @@
|
||||
<?php
|
||||
|
||||
return '4.0.0-nightly.16';
|
||||
return '4.0.0-nightly.17';
|
||||
|
@ -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;
|
||||
|
@ -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)"
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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">
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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">
|
||||
|
@ -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', [
|
||||
|
@ -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') }}">
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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
|
||||
|
@ -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>
|
||||
|
@ -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')
|
||||
|
@ -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">→</span></a>
|
||||
</div>
|
||||
|
@ -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" />
|
||||
|
@ -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 />
|
||||
|
@ -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')]) }}">
|
||||
|
@ -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
|
||||
|
@ -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" />
|
||||
|
@ -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
|
||||
|
@ -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'))
|
||||
|
@ -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>
|
||||
|
@ -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 }}"
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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') }} |
|
||||
|
@ -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" />
|
||||
|
@ -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>
|
||||
|
|
||||
|
@ -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 }}
|
||||
|
@ -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)
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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)
|
||||
|
@ -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">
|
||||
|
@ -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">
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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" />
|
||||
|
@ -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>
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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">
|
||||
|
@ -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
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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 }}
|
||||
|
@ -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')]) }}"
|
||||
|
@ -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"
|
||||
|
@ -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')
|
||||
|
@ -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>
|
||||
|
2
resources/views/vendor/toaster/hub.blade.php
vendored
2
resources/views/vendor/toaster/hub.blade.php
vendored
@ -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',
|
||||
|
@ -4,7 +4,7 @@
|
||||
"version": "3.12.31"
|
||||
},
|
||||
"v4": {
|
||||
"version": "4.0.0-nightly.16"
|
||||
"version": "4.0.0-nightly.17"
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user