wip
This commit is contained in:
@@ -17,6 +17,16 @@ class General extends Component
|
|||||||
public string|null $git_commit_sha;
|
public string|null $git_commit_sha;
|
||||||
public string $build_pack;
|
public string $build_pack;
|
||||||
|
|
||||||
|
public bool $is_git_submodules_allowed;
|
||||||
|
public bool $is_git_lfs_allowed;
|
||||||
|
public bool $is_debug;
|
||||||
|
public bool $is_previews;
|
||||||
|
public bool $is_bot;
|
||||||
|
public bool $is_custom_ssl;
|
||||||
|
public bool $is_http2;
|
||||||
|
public bool $is_auto_deploy;
|
||||||
|
public bool $is_dual_cert;
|
||||||
|
|
||||||
protected $rules = [
|
protected $rules = [
|
||||||
'application.name' => 'required|min:6',
|
'application.name' => 'required|min:6',
|
||||||
'application.fqdn' => 'nullable',
|
'application.fqdn' => 'nullable',
|
||||||
@@ -26,17 +36,37 @@ class General extends Component
|
|||||||
'application.build_pack' => 'required',
|
'application.build_pack' => 'required',
|
||||||
'application.base_directory' => 'required',
|
'application.base_directory' => 'required',
|
||||||
'application.publish_directory' => 'nullable',
|
'application.publish_directory' => 'nullable',
|
||||||
'application.environment.name' => 'required',
|
|
||||||
'application.destination.network' => 'required',
|
|
||||||
];
|
];
|
||||||
|
public function instantSave()
|
||||||
|
{
|
||||||
|
// @TODO: find another way
|
||||||
|
$this->application->settings->is_git_submodules_allowed = $this->is_git_submodules_allowed;
|
||||||
|
$this->application->settings->is_git_lfs_allowed = $this->is_git_lfs_allowed;
|
||||||
|
$this->application->settings->is_debug = $this->is_debug;
|
||||||
|
$this->application->settings->is_previews = $this->is_previews;
|
||||||
|
$this->application->settings->is_bot = $this->is_bot;
|
||||||
|
$this->application->settings->is_custom_ssl = $this->is_custom_ssl;
|
||||||
|
$this->application->settings->is_http2 = $this->is_http2;
|
||||||
|
$this->application->settings->is_auto_deploy = $this->is_auto_deploy;
|
||||||
|
$this->application->settings->is_dual_cert = $this->is_dual_cert;
|
||||||
|
$this->application->settings->save();
|
||||||
|
}
|
||||||
public function mount()
|
public function mount()
|
||||||
{
|
{
|
||||||
$this->application = Application::find($this->applicationId)->with('destination')->first();
|
$this->application = Application::find($this->applicationId)->with('destination', 'settings')->first();
|
||||||
|
$this->is_git_submodules_allowed = $this->application->settings->is_git_submodules_allowed;
|
||||||
|
$this->is_git_lfs_allowed = $this->application->settings->is_git_lfs_allowed;
|
||||||
|
$this->is_debug = $this->application->settings->is_debug;
|
||||||
|
$this->is_previews = $this->application->settings->is_previews;
|
||||||
|
$this->is_bot = $this->application->settings->is_bot;
|
||||||
|
$this->is_custom_ssl = $this->application->settings->is_custom_ssl;
|
||||||
|
$this->is_http2 = $this->application->settings->is_http2;
|
||||||
|
$this->is_auto_deploy = $this->application->settings->is_auto_deploy;
|
||||||
|
$this->is_dual_cert = $this->application->settings->is_dual_cert;
|
||||||
|
|
||||||
}
|
}
|
||||||
public function submit()
|
public function submit()
|
||||||
{
|
{
|
||||||
$this->validate();
|
|
||||||
$this->application->save();
|
$this->application->save();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -6,8 +6,5 @@ use Livewire\Component;
|
|||||||
|
|
||||||
class Secrets extends Component
|
class Secrets extends Component
|
||||||
{
|
{
|
||||||
public function render()
|
public array $secrets = [];
|
||||||
{
|
|
||||||
return view('livewire.application.secrets');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
11
app/Http/Livewire/Application/Storages.php
Normal file
11
app/Http/Livewire/Application/Storages.php
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Livewire\Application;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Collection;
|
||||||
|
use Livewire\Component;
|
||||||
|
|
||||||
|
class Storages extends Component
|
||||||
|
{
|
||||||
|
public Collection $storages;
|
||||||
|
}
|
@@ -6,6 +6,10 @@ use Illuminate\Database\Eloquent\Model;
|
|||||||
|
|
||||||
class ApplicationSetting extends Model
|
class ApplicationSetting extends Model
|
||||||
{
|
{
|
||||||
|
protected $fillable = [
|
||||||
|
'is_git_submodules_allowed',
|
||||||
|
'is_git_lfs_allowed',
|
||||||
|
];
|
||||||
public function application()
|
public function application()
|
||||||
{
|
{
|
||||||
return $this->belongsTo(Application::class);
|
return $this->belongsTo(Application::class);
|
||||||
|
@@ -4,6 +4,9 @@ namespace App\Models;
|
|||||||
|
|
||||||
class GithubApp extends BaseModel
|
class GithubApp extends BaseModel
|
||||||
{
|
{
|
||||||
|
protected $casts = [
|
||||||
|
'is_public' => 'boolean',
|
||||||
|
];
|
||||||
public function applications()
|
public function applications()
|
||||||
{
|
{
|
||||||
return $this->morphMany(Application::class, 'source');
|
return $this->morphMany(Application::class, 'source');
|
||||||
|
@@ -16,6 +16,8 @@ class Input extends Component
|
|||||||
public bool $required = false,
|
public bool $required = false,
|
||||||
public bool $readonly = false,
|
public bool $readonly = false,
|
||||||
public string|null $label = null,
|
public string|null $label = null,
|
||||||
|
public string|null $type = 'text',
|
||||||
|
public bool $instantSave = false,
|
||||||
) {
|
) {
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
|
@@ -2,6 +2,6 @@
|
|||||||
<h1>{{ $title ?? 'NOT SET' }}</h1>
|
<h1>{{ $title ?? 'NOT SET' }}</h1>
|
||||||
<x-applications.navbar :applicationId="$applicationId" />
|
<x-applications.navbar :applicationId="$applicationId" />
|
||||||
<div>
|
<div>
|
||||||
{{ $slot }}
|
{{ $slot }}
|
||||||
</div>
|
</div>
|
||||||
</x-layout>
|
</x-layout>
|
||||||
|
@@ -1,16 +1,33 @@
|
|||||||
<label for={{ $name }}>
|
@if ($type === 'checkbox')
|
||||||
@if ($label)
|
<label for={{ $name }}>
|
||||||
{{ $label }}
|
@if ($label)
|
||||||
@else
|
{{ $label }}
|
||||||
{{ $name }}
|
@else
|
||||||
@endif
|
{{ $name }}
|
||||||
@if ($required)
|
@endif
|
||||||
*
|
@if ($required)
|
||||||
@endif
|
*
|
||||||
</label>
|
@endif
|
||||||
<input id={{ $name }} wire:model.defer={{ $name }} type="text" name={{ $name }}
|
<input type="checkbox" id={{ $name }}
|
||||||
@if ($required) required @endif
|
@if ($instantSave) wire:click='instantSave' wire:model.defer={{ $name }} @else wire:model.defer={{ $name }} @endif
|
||||||
@if ($readonly) readOnly=true disabled=true @endif />
|
name={{ $name }}>
|
||||||
|
</label>
|
||||||
|
@else
|
||||||
|
<label for={{ $name }}>
|
||||||
|
@if ($label)
|
||||||
|
{{ $label }}
|
||||||
|
@else
|
||||||
|
{{ $name }}
|
||||||
|
@endif
|
||||||
|
@if ($required)
|
||||||
|
*
|
||||||
|
@endif
|
||||||
|
</label>
|
||||||
|
<input type="text" id={{ $name }} wire:model.defer={{ $name }} name={{ $name }}
|
||||||
|
@if ($required) required @endif
|
||||||
|
@if ($readonly) readOnly=true disabled=true @endif />
|
||||||
|
@endif
|
||||||
|
|
||||||
@error($name)
|
@error($name)
|
||||||
<span class="text-red-500">{{ $message }}</span>
|
<span class="text-red-500">{{ $message }}</span>
|
||||||
@enderror
|
@enderror
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
<div>
|
<div>
|
||||||
<p>{{$destination->name}}</p>
|
<p>IP: {{ $destination->server->ip }}</p>
|
||||||
|
<p>Description: {{ $destination->server->description }}</p>
|
||||||
|
<p>Docker Network: {{ $destination->network }}</p>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -15,12 +15,24 @@
|
|||||||
<div class="flex-col flex w-96">
|
<div class="flex-col flex w-96">
|
||||||
<x-input name="application.base_directory" label="Base Directory" />
|
<x-input name="application.base_directory" label="Base Directory" />
|
||||||
<x-input name="application.publish_directory" label="Publish Directory" />
|
<x-input name="application.publish_directory" label="Publish Directory" />
|
||||||
<x-input name="application.destination.network" readonly label="Destination Network" />
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<button class="flex mx-auto mt-4" type="submit">
|
<button class="flex mx-auto mt-4" type="submit">
|
||||||
Submit
|
Submit
|
||||||
</button>
|
</button>
|
||||||
</form>
|
</form>
|
||||||
|
<div class="flex flex-col pt-4 w-52 text-right">
|
||||||
|
<x-input instantSave type="checkbox" name="is_auto_deploy" label="Auto Deploy?" />
|
||||||
|
<x-input instantSave type="checkbox" name="is_dual_cert" label="Dual Certs?" />
|
||||||
|
<x-input instantSave type="checkbox" name="is_previews" label="Previews?" />
|
||||||
|
<x-input instantSave type="checkbox" name="is_bot" label="Is Bot?" />
|
||||||
|
<x-input instantSave type="checkbox" name="is_custom_ssl" label="Is Custom SSL?" />
|
||||||
|
<x-input instantSave type="checkbox" name="is_http2" label="Is Http2?" />
|
||||||
|
<x-input instantSave type="checkbox" name="is_git_submodules_allowed" label="Git Submodules Allowed?" />
|
||||||
|
<x-input instantSave type="checkbox" name="is_git_lfs_allowed" label="Git LFS Allowed?" />
|
||||||
|
<x-input instantSave type="checkbox" name="is_debug" label="Debug" />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -1,3 +1,7 @@
|
|||||||
<div>
|
<div>
|
||||||
{{-- Nothing in the world is as soft and yielding as water. --}}
|
@forelse ($secrets as $secret)
|
||||||
|
{{ dump($secret) }}
|
||||||
|
@empty
|
||||||
|
<p>There are no secrets for this application.</p>
|
||||||
|
@endforelse
|
||||||
</div>
|
</div>
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
<div>
|
<div>
|
||||||
<p>{{ $application->source->name }}</p>
|
<p>Source Name: {{ data_get($application,'source.name') }}</p>
|
||||||
|
<p>Is Public Source: {{ data_get($application,'source.is_public') }}</p>
|
||||||
<div class="flex-col flex w-96">
|
<div class="flex-col flex w-96">
|
||||||
<x-input name="application.git_repository" label="Git Repository" readonly />
|
<x-input name="application.git_repository" label="Git Repository" readonly />
|
||||||
<x-input name="application.git_branch" label="Git Branch" readonly />
|
<x-input name="application.git_branch" label="Git Branch" readonly />
|
||||||
|
10
resources/views/livewire/application/storages.blade.php
Normal file
10
resources/views/livewire/application/storages.blade.php
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
<div>
|
||||||
|
@forelse ($storages as $storage)
|
||||||
|
<p>Name:{{ data_get($storage, 'name') }}</p>
|
||||||
|
<p>MountPath:{{ data_get($storage, 'mount_path') }}</p>
|
||||||
|
<p>HostPath:{{ data_get($storage, 'host_path') }}</p>
|
||||||
|
<p>ContainerId:{{ data_get($storage, 'container_id') }}</p>
|
||||||
|
@empty
|
||||||
|
<p>No storage found.</p>
|
||||||
|
@endforelse
|
||||||
|
</div>
|
@@ -6,18 +6,23 @@
|
|||||||
<button @click.prevent="tab = 'source'; window.location.hash = 'source'" href="#">Source</button>
|
<button @click.prevent="tab = 'source'; window.location.hash = 'source'" href="#">Source</button>
|
||||||
<button @click.prevent="tab = 'destination'; window.location.hash = 'destination'" href="#">Destination
|
<button @click.prevent="tab = 'destination'; window.location.hash = 'destination'" href="#">Destination
|
||||||
</button>
|
</button>
|
||||||
|
<button @click.prevent="tab = 'storages'; window.location.hash = 'storages'" href="#">Storage
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div x-cloak x-show="tab === 'general'">
|
<div x-cloak x-show="tab === 'general'">
|
||||||
<livewire:application.general :applicationId="$application->id" />
|
<livewire:application.general :applicationId="$application->id" />
|
||||||
</div>
|
</div>
|
||||||
<div x-cloak x-show="tab === 'secrets'">
|
<div x-cloak x-show="tab === 'secrets'">
|
||||||
<livewire:application.secrets :secrets="$application->id" />
|
<livewire:application.secrets />
|
||||||
</div>
|
</div>
|
||||||
<div x-cloak x-show="tab === 'source'">
|
<div x-cloak x-show="tab === 'source'">
|
||||||
<livewire:application.source :applicationId="$application->id" />
|
<livewire:application.source :applicationId="$application->id" />
|
||||||
</div>
|
</div>
|
||||||
<div x-cloak x-show="tab === 'destination'">
|
<div x-cloak x-show="tab === 'destination'">
|
||||||
<livewire:application.destination :destination="$application->destination->server" />
|
<livewire:application.destination :destination="$application->destination" />
|
||||||
|
</div>
|
||||||
|
<div x-cloak x-show="tab === 'storages'">
|
||||||
|
<livewire:application.storages :storages="$application->persistentStorages" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</x-applications.layout>
|
</x-applications.layout>
|
||||||
|
Reference in New Issue
Block a user