This commit is contained in:
Joao Patricio
2023-05-12 19:22:16 +01:00
128 changed files with 3944 additions and 650 deletions

View File

@@ -1,7 +1,10 @@
<div>
@isset($this->activity)
<span>Status: {{ $this->activity?->properties->get('status') }}</span>
<pre class="flex flex-col-reverse w-full overflow-y-scroll"
@if ($isPollingActive) wire:poll.750ms="polling" @endif>{{ \App\Actions\CoolifyTask\RunRemoteProcess::decodeOutput($this->activity) }}</pre>
@endisset
<div
class="flex flex-col-reverse w-full overflow-y-auto border border-solid rounded border-coolgray-300 max-h-[32rem] p-4">
@if ($this->activity)
<pre class="whitespace-pre-wrap" @if ($isPollingActive) wire:poll.750ms="polling" @endif>{{ \App\Actions\CoolifyTask\RunRemoteProcess::decodeOutput($this->activity) }}</pre>
@else
<pre class="whitespace-pre-wrap">Output will be here...</pre>
@endif
</div>
</div>

View File

@@ -1,6 +1,6 @@
<div>
<x-inputs.button class="w-32 text-white bg-neutral-800 hover:bg-violet-600" wire:click='checkUpdate' type="submit">
Check for updates</x-inputs.button>
<x-inputs.button wire:click='checkUpdate' type="submit">
Check Update</x-inputs.button>
@if ($updateAvailable)
Update available
@endif

View File

@@ -10,7 +10,7 @@
<x-inputs.button>
Submit
</x-inputs.button>
<x-inputs.button isWarning x-on:click="deleteDestination = true">
<x-inputs.button isWarning x-on:click.prevent="deleteDestination = true">
Delete
</x-inputs.button>
</div>

View File

@@ -7,7 +7,7 @@
<x-inputs.button type="submit">
Submit
</x-inputs.button>
<x-inputs.button isWarning x-on:click="deletePrivateKey = true">
<x-inputs.button isWarning x-on:click.prevent="deletePrivateKey = true">
Delete
</x-inputs.button>
</form>

View File

@@ -1,10 +1,10 @@
<div>
<form class="flex flex-col gap-2 w-96" wire:submit.prevent='createPrivateKey'>
<x-inputs.input id="private_key_name" label="Name" required />
<x-inputs.input id="private_key_description" label="Longer Description" />
<x-inputs.input type="textarea" id="private_key_value" label="Private Key" required />
<x-inputs.button type="submit">
Submit
<form class="flex flex-col gap-2 " wire:submit.prevent='createPrivateKey'>
<x-inputs.input id="name" label="Name" required />
<x-inputs.input id="description" label="Description" />
<x-inputs.input type="textarea" id="value" label="Private Key" required />
<x-inputs.button type="submit" wire.click.prevent>
Save Private Key
</x-inputs.button>
</form>
</div>

View File

@@ -8,7 +8,7 @@
<x-inputs.button wire:click='start'>Start</x-inputs.button>
<x-inputs.button wire:click='forceRebuild'>Start (no cache)</x-inputs.button>
@endif
<x-inputs.button isWarning x-on:click="deleteApplication = true">
<x-inputs.button isWarning x-on:click.prevent="deleteApplication = true">
Delete</x-inputs.button>
<span wire:poll.5000ms='pollingStatus'>
@if ($application->status === 'running')

View File

@@ -10,7 +10,7 @@
<x-inputs.button type="submit">
Update
</x-inputs.button>
<x-inputs.button x-on:click="deleteEnvironment = true" isWarning>
<x-inputs.button x-on:click.prevent="deleteEnvironment = true" isWarning>
Delete
</x-inputs.button>
</form>

View File

@@ -11,12 +11,13 @@
<x-inputs.input id="application.start_command" label="Start Command" />
<x-inputs.select id="application.build_pack" label="Build Pack" required>
<option value="nixpacks">Nixpacks</option>
<option value="docker">Docker</option>
<option disabled value="docker">Docker</option>
<option disabled value="compose">Compose</option>
</x-inputs.select>
@if ($application->settings->is_static)
<x-inputs.select id="application.static_image" label="Static Image" required>
<option value="nginx:alpine">nginx:alpine</option>
<option value="apache:alpine">apache:alpine</option>
<option disabled value="apache:alpine">apache:alpine</option>
</x-inputs.select>
@endif
</div>
@@ -42,15 +43,17 @@
Submit
</x-inputs.button>
</form>
<div class="flex flex-col pt-4 text-right w-52">
<x-inputs.input instantSave type="checkbox" id="is_static" label="Static website?" />
<x-inputs.input instantSave type="checkbox" id="is_auto_deploy" label="Auto Deploy?" />
<x-inputs.input instantSave type="checkbox" id="is_dual_cert" label="Dual Certs?" />
<x-inputs.input instantSave type="checkbox" id="is_previews" label="Previews?" />
<x-inputs.input instantSave type="checkbox" id="is_custom_ssl" label="Is Custom SSL?" />
<x-inputs.input instantSave type="checkbox" id="is_http2" label="Is Http2?" />
<x-inputs.input instantSave type="checkbox" id="is_git_submodules_allowed" label="Git Submodules Allowed?" />
<x-inputs.input instantSave type="checkbox" id="is_git_lfs_allowed" label="Git LFS Allowed?" />
<x-inputs.input instantSave type="checkbox" id="is_debug" label="Debug" />
<div class="flex flex-col pt-4">
<x-inputs.input noDirty instantSave type="checkbox" id="is_static" label="Static website?" />
<x-inputs.input noDirty instantSave type="checkbox" id="is_git_submodules_allowed"
label="Git Submodules Allowed?" />
<x-inputs.input noDirty instantSave type="checkbox" id="is_git_lfs_allowed" label="Git LFS Allowed?" />
<x-inputs.input noDirty instantSave type="checkbox" id="is_debug" label="Debug" />
<x-inputs.input noDirty instantSave type="checkbox" id="is_auto_deploy" label="Auto Deploy?" />
<x-inputs.input disabled instantSave type="checkbox" id="is_dual_cert" label="Dual Certs?" />
<x-inputs.input disabled instantSave type="checkbox" id="is_previews" label="Previews?" />
<x-inputs.input disabled instantSave type="checkbox" id="is_custom_ssl" label="Is Custom SSL?" />
<x-inputs.input disabled instantSave type="checkbox" id="is_http2" label="Is Http2?" />
</div>
</div>

View File

@@ -1,5 +1,5 @@
<div>
<a @if ($status === 'in_progress' || $status === 'holding') wire:poll='polling' @endif href="{{ url()->current() }}/{{ $deployment_uuid }}">
<a @if ($status === 'in_progress' || $status === 'queued') wire:poll='polling' @endif href="{{ url()->current() }}/{{ $deployment_uuid }}">
{{ $created_at }}
{{ $deployment_uuid }}</a>
{{ $status }}

View File

@@ -4,6 +4,12 @@
<div class="flex flex-col w-96">
<x-inputs.input id="application.git_repository" label="Git Repository" readonly />
<x-inputs.input id="application.git_branch" label="Git Branch" readonly />
<x-inputs.input id="application.git_commit_sha" label="Git Commit SHA" readonly />
<form wire:submit.prevent='submit'>
<x-inputs.input id="application.git_commit_sha" placeholder="HEAD" label="Git Commit SHA" />
<x-inputs.button type="submit">Save</x-inputs.button>
</form>
<a target="_blank" href="{{ $application->gitCommits }}">
<x-inputs.button>Commits ↗️</x-inputs.button>
</a>
</div>
</div>

View File

@@ -7,7 +7,7 @@
<x-inputs.button type="submit">
Update
</x-inputs.button>
<x-inputs.button x-on:click="deleteStorage = true" isWarning>
<x-inputs.button x-on:click.prevent="deleteStorage = true" isWarning>
Delete
</x-inputs.button>
</form>

View File

@@ -0,0 +1,13 @@
<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-inputs.button isWarning disabled="First delete all resources.">
Delete
</x-inputs.button>
@else
<x-inputs.button isWarning x-on:click.prevent="deleteProject = true">
Delete
</x-inputs.button>
@endif
</div>

View File

@@ -0,0 +1,31 @@
<div>
<div>
<h1>Select a private key</h1>
@foreach ($private_keys as $key)
@if ($private_key_id == $key->id)
<x-inputs.button class="bg-blue-500" wire:click.defer="setPrivateKey('{{ $key->id }}')">
{{ $key->name }}</x-inputs.button>
@else
<x-inputs.button wire:click.defer="setPrivateKey('{{ $key->id }}')">{{ $key->name }}
</x-inputs.button>
@endif
@endforeach
</div>
@isset($private_key_id)
<h1>Choose a repository</h1>
<form wire:submit.prevent='submit'>
<div class="flex items-end gap-2 pb-2">
<x-inputs.input class="w-96" id="repository_url" label="Repository URL" />
@if ($is_static)
<x-inputs.input id="publish_directory" label="Publish Directory" />
@else
<x-inputs.input type="number" id="port" label="Port" :readonly="$is_static" />
@endif
<x-inputs.input instantSave type="checkbox" id="is_static" label="Static Site?" />
</div>
<x-inputs.button type="submit">
Submit
</x-inputs.button>
</form>
@endisset
</div>

View File

@@ -0,0 +1,45 @@
<div>
@if ($github_apps->count() > 0)
<h1>Choose a GitHub App</h1>
@foreach ($github_apps as $ghapp)
<x-inputs.button wire:key="{{ $ghapp->id }}" wire:click="loadRepositories({{ $ghapp->id }})">
{{ $ghapp->name }}
</x-inputs.button>
@endforeach
<div>
@if ($repositories->count() > 0)
<h3>Choose a Repository</h3>
<select wire:model.defer="selected_repository_id">
@foreach ($repositories as $repo)
@if ($loop->first)
<option selected value="{{ data_get($repo, 'id') }}">{{ data_get($repo, 'name') }}</option>
@else
<option value="{{ data_get($repo, 'id') }}">{{ data_get($repo, 'name') }}</option>
@endif
@endforeach
</select>
<x-inputs.button wire:click="loadBranches">Select Repository</x-inputs.button>
@endif
</div>
<div>
@if ($branches->count() > 0)
<h3>Choose a Branch</h3>
<select wire:model.defer="selected_branch_name">
<option disabled>Choose a branch</option>
@foreach ($branches as $branch)
@if ($loop->first)
<option selected value="{{ data_get($branch, 'name') }}">{{ data_get($branch, 'name') }}
</option>
@else
<option value="{{ data_get($branch, 'name') }}">{{ data_get($branch, 'name') }}</option>
@endif
@endforeach
</select>
<x-inputs.button wire:click="submit">Save</x-inputs.button>
@endif
</div>
@else
Add new github app
@endif
</div>

View File

@@ -1,72 +1,17 @@
<div>
@if ($servers->count() > 0)
<h1>Choose a server</h1>
@endif
@forelse ($servers as $server)
@if ($chosenServer && $chosenServer['id'] === $server->id)
<x-inputs.button class="bg-blue-500" wire:click="chooseServer({{ $server }})">{{ $server->name }}
</x-inputs.button>
@else
<x-inputs.button wire:click="chooseServer({{ $server }})">{{ $server->name }}</x-inputs.button>
@endif
@empty
No servers found.
<p>Did you forget to add a destination on the server?</p>
@endforelse
@isset($chosenServer)
@if ($standalone_docker->count() > 0 || $swarm_docker->count() > 0)
<h1>Choose a destination</h1>
<div>
@foreach ($standalone_docker as $standalone)
@if ($chosenDestination?->uuid == $standalone->uuid)
<x-inputs.button class="bg-blue-500"
wire:click="setDestination('{{ $standalone->uuid }}','StandaloneDocker')">
{{ $standalone->network }}</x-inputs.button>
@else
<x-inputs.button wire:click="setDestination('{{ $standalone->uuid }}','StandaloneDocker')">
{{ $standalone->network }}</x-inputs.button>
@endif
@endforeach
@foreach ($swarm_docker as $standalone)
@if ($chosenDestination?->uuid == $standalone->uuid)
<x-inputs.button class="bg-blue-500"
wire:click="setDestination('{{ $standalone->uuid }}','SwarmDocker')">
{{ $standalone->network }}</x-inputs.button>
@else
<x-inputs.button wire:click="setDestination('{{ $standalone->uuid }}','SwarmDocker')">
{{ $standalone->uuid }}</x-inputs.button>
@endif
@endforeach
</div>
<div>
<a href="{{ route('destination.new', ['server_id' => $chosenServer['id']]) }}">Add
a new
destination</a>
</div>
@else
<h1>No destinations found on this server.</h1>
<a href="{{ route('destination.new', ['server_id' => $chosenServer['id']]) }}">Add
a
destination</a>
@endif
@endisset
@isset($chosenDestination)
<h1>Choose a repository</h1>
<form class="flex flex-col gap-2 w-96" wire:submit.prevent='submit'>
<x-inputs.input class="w-96" id="public_repository_url" label="Repository URL" />
<x-inputs.input instantSave type="checkbox" id="is_static" label="Static Site?" />
<h1>Choose a public repository</h1>
<form class="flex flex-col gap-2 w-96" wire:submit.prevent='submit'>
<x-inputs.input instantSave type="checkbox" id="is_static" label="Is it a static site?" />
<div class="flex gap-2">
<x-inputs.input class="w-96" id="repository_url" label="Repository URL" />
@if ($is_static)
<x-inputs.input id="publish_directory" label="Publish Directory" />
@else
<x-inputs.input type="number" id="port" label="Port" :readonly="$is_static" />
@endif
<x-inputs.button type="submit">
Submit
</x-inputs.button>
</form>
@endisset
</div>
<x-inputs.button type="submit">
Submit
</x-inputs.button>
</form>
</div>

View File

@@ -1,12 +1,18 @@
<div>
<form class="flex gap-2" wire:submit.prevent='runCommand'>
<x-inputs.input autofocus id="command" label="Command" required />
<form class="flex items-end justify-center gap-2" wire:submit.prevent='runCommand'>
<x-inputs.input class="w-[32rem]" autofocus noDirty noLabel id="command" label="Command" required />
<select wire:model.defer="server">
@foreach ($servers as $server)
<option value="{{ $server->uuid }}">{{ $server->name }}</option>
@if ($loop->first)
<option selected value="{{ $server->uuid }}">{{ $server->name }}</option>
@else
<option value="{{ $server->uuid }}">{{ $server->name }}</option>
@endif
@endforeach
</select>
<x-inputs.button type="submit">Run</x-inputs.button>
</form>
<livewire:activity-monitor />
<div class="container w-full pt-10 mx-auto">
<livewire:activity-monitor />
</div>
</div>

View File

@@ -18,15 +18,17 @@
@endif
</div>
</div>
<div>
<div class="flex">
<x-inputs.button type="submit">Submit</x-inputs.button>
<x-inputs.button wire:click.prevent='checkServer'>Check Server</x-inputs.button>
<x-inputs.button wire:click.prevent='installDocker'>Install Docker</x-inputs.button>
<x-inputs.button isWarning x-on:click="deleteServer = true">
<x-inputs.button isWarning x-on:click.prevent="deleteServer = true">
Delete
</x-inputs.button>
</div>
<x-inputs.input class="" disabled type="checkbox" id="server.settings.is_validated" label="Validated" />
</form>
@isset($uptime)
<p>Uptime: {{ $uptime }}</p>
@endisset

View File

@@ -1,31 +1,32 @@
<div>
<form class="flex flex-col" wire:submit.prevent='submit'>
<form class="flex flex-col gap-1" wire:submit.prevent='submit'>
<div class="flex items-center gap-2">
<h1>New Server</h1>
<x-inputs.button type="submit">
Save
</x-inputs.button>
</div>
<x-inputs.input id="name" label="Name" required />
<x-inputs.input id="description" label="Description" />
<x-inputs.input id="ip" label="IP Address" required />
<x-inputs.input id="user" label="User" />
<x-inputs.input type="number" id="port" label="Port" />
<x-inputs.input id="private_key_id" label="Private Key" required hidden />
<x-inputs.button class="mt-4" type="submit">
Submit
</x-inputs.button>
</form>
<div class="flex gap-4">
<div>
<x-inputs.input id="private_key_id" label="Private Key Id" readonly hidden />
@if ($private_keys->count() > 0)
<h1>Select a private key</h1>
@foreach ($private_keys as $key)
@if ($private_key_id == $key->id)
<x-inputs.button class="bg-blue-500" wire:click.defer="setPrivateKey('{{ $key->id }}')">
{{ $key->name }}</x-inputs.button>
@else
<x-inputs.button wire:click.defer="setPrivateKey('{{ $key->id }}')">{{ $key->name }}
</x-inputs.button>
@endif
<div class="box" :class="{ 'bg-coollabs': {{ $private_key_id === $key->id }} }"
wire:click.defer.prevent="setPrivateKey('{{ $key->id }}')">
{{ $key->name }}
</div>
@endforeach
</div>
<div>
<h2>Add a new One</h2>
<livewire:private-key.create />
</div>
</div>
@endif
</form>
@if ($private_keys->count() > 0)
<h2>Or add a new private key</h2>
@else
<h2>Create private key</h2>
@endif
<livewire:private-key.create />
</div>

View File

@@ -0,0 +1,14 @@
<div>
<form class="flex flex-col gap-2 w-96" wire:submit.prevent='createGitHubApp'>
<x-inputs.input id="name" label="Name" required />
<x-inputs.input id="html_url" label="HTML Url" required />
<x-inputs.input id="api_url" label="API Url" required />
<x-inputs.input id="organization" label="Organization" />
<x-inputs.input id="custom_user" label="Custom Git User" required />
<x-inputs.input id="custom_port" label="Custom Git Port" required />
<x-inputs.input type="checkbox" id="is_system_wide" label="System Wide" />
<x-inputs.button type="submit">
Submit
</x-inputs.button>
</form>
</div>

View File

@@ -0,0 +1,36 @@
<div x-data="{ deleteSource: false }">
<x-naked-modal show="deleteSource" message='Are you sure you would like to delete this source?' />
<h3>Change Github App</h3>
<form wire:submit.prevent='submit'>
<x-inputs.input id="github_app.name" label="App Name" required />
<x-inputs.input noDirty type="checkbox" label="System Wide?" instantSave id="is_system_wide" />
@if ($github_app->app_id)
<x-inputs.input id="github_app.organization" label="Organization" disabled
placeholder="Personal user if empty" />
@else
<x-inputs.input id="github_app.organization" label="Organization" placeholder="Personal user if empty" />
@endif
<x-inputs.input id="github_app.api_url" label="API Url" disabled />
<x-inputs.input id="github_app.html_url" label="HTML Url" disabled />
<x-inputs.input id="github_app.custom_user" label="User" required />
<x-inputs.input type="number" id="github_app.custom_port" label="Port" required />
@if ($github_app->app_id)
<x-inputs.input type="number" id="github_app.app_id" label="App Id" disabled />
<x-inputs.input type="number" id="github_app.installation_id" label="Installation Id" disabled />
<x-inputs.input id="github_app.client_id" label="Client Id" type="password" disabled />
<x-inputs.input id="github_app.client_secret" label="Client Secret" type="password" disabled />
<x-inputs.input id="github_app.webhook_secret" label="Webhook Secret" type="password" disabled />
<x-inputs.button type="submit">Save</x-inputs.button>
<x-inputs.button isWarning x-on:click.prevent="deleteSource = true">
Delete
</x-inputs.button>
@else
<div class="py-2">
<x-inputs.button type="submit">Save</x-inputs.button>
<x-inputs.button isWarning x-on:click.prevent="deleteSource = true">
Delete
</x-inputs.button>
</div>
@endif
</form>
</div>