feat(ui): Shadow UI redesign, domain management, and DNS autoconfigure (#11119)

Co-authored-by: ShadowArcanist <162910371+ShadowArcanist@users.noreply.github.com>
This commit is contained in:
Andras BacsaiandShadowArcanist authored and GitHub committed 2026-08-03 23:11:54 +02:00
1 parent 0b843bb07c
commit 8ae56587d5
497 files changed
+44045 -22630

No files matched your search

@@ -1,83 +1,113 @@
<div class="flex flex-col gap-2">
<div class="flex items-center gap-2">
<h2>Webhooks</h2>
<x-helper
helper="For more details goto our <a class='underline dark:text-white' href='https://coolify.io/docs/api-reference/authorization' target='_blank'>docs</a>." />
</div>
<div>
<x-forms.input readonly
helper="See details in our <a target='_blank' class='underline dark:text-white' href='https://coolify.io/docs/api-reference/authorization'>documentation</a>."
label="Deploy Webhook (auth required)" id="deploywebhook"></x-forms.input>
</div>
<div>
@if ($resource->type() === 'application')
<div>
<h3>Manual Git Webhooks</h3>
@if ($githubManualWebhook && $gitlabManualWebhook)
<form wire:submit='submit' class="flex flex-col gap-2">
<div class="flex items-end gap-2">
<x-forms.input helper="Content Type in GitHub configuration could be json or form-urlencoded."
readonly label="GitHub" id="githubManualWebhook"></x-forms.input>
@can('update', $resource)
<x-forms.input type="password"
helper="Need to set a secret to be able to use this webhook. It should match with the secret in GitHub."
label="GitHub Webhook Secret" id="githubManualWebhookSecret"></x-forms.input>
@else
<x-forms.input disabled
helper="Need to set a secret to be able to use this webhook. It should match with the secret in GitHub."
label="GitHub Webhook Secret" value="Hidden (only admins can view)"></x-forms.input>
@endcan
</div>
<a target="_blank" class="flex hover:no-underline" href="{{ $resource?->gitWebhook }}">
<x-forms.button>Webhook Configuration on GitHub
<x-external-link />
</x-forms.button>
@php
$manualWebhookProviders = [
[
'name' => 'GitHub',
'url' => $githubManualWebhook,
'secret' => 'githubManualWebhookSecret',
'description' => 'Accepts JSON or form-urlencoded webhook payloads.',
],
[
'name' => 'GitLab',
'url' => $gitlabManualWebhook,
'secret' => 'gitlabManualWebhookSecret',
'description' => 'Use the same secret when configuring the webhook in GitLab.',
],
[
'name' => 'Bitbucket',
'url' => $bitbucketManualWebhook,
'secret' => 'bitbucketManualWebhookSecret',
'description' => 'Use the same secret when configuring the webhook in Bitbucket.',
],
[
'name' => 'Gitea',
'url' => $giteaManualWebhook,
'secret' => 'giteaManualWebhookSecret',
'description' => 'Use the same secret when configuring the webhook in Gitea.',
],
];
@endphp
<div class="flex flex-col gap-6">
<x-application.settings-section id="deploy-webhook-section" title="Deploy webhook"
helper="Trigger a deployment from an external service. Requests must include a valid Coolify API authorization token.">
<x-slot:actions>
<a class="button" href="https://coolify.io/docs/api-reference/authorization" target="_blank"
rel="noopener noreferrer">
Documentation
<x-external-link />
</a>
<div class="flex gap-2">
<x-forms.input readonly label="GitLab" id="gitlabManualWebhook"></x-forms.input>
@can('update', $resource)
<x-forms.input type="password"
helper="Need to set a secret to be able to use this webhook. It should match with the secret in GitLab."
label="GitLab Webhook Secret" id="gitlabManualWebhookSecret"></x-forms.input>
@else
<x-forms.input disabled
helper="Need to set a secret to be able to use this webhook. It should match with the secret in GitLab."
label="GitLab Webhook Secret" value="Hidden (only admins can view)"></x-forms.input>
@endcan
</div>
<div class="flex gap-2">
<x-forms.input readonly label="Bitbucket" id="bitbucketManualWebhook"></x-forms.input>
@can('update', $resource)
<x-forms.input type="password"
helper="Need to set a secret to be able to use this webhook. It should match with the secret in Bitbucket."
label="Bitbucket Webhook Secret" id="bitbucketManualWebhookSecret"></x-forms.input>
@else
<x-forms.input disabled
helper="Need to set a secret to be able to use this webhook. It should match with the secret in Bitbucket."
label="Bitbucket Webhook Secret" value="Hidden (only admins can view)"></x-forms.input>
@endcan
</div>
<div class="flex gap-2">
<x-forms.input readonly label="Gitea" id="giteaManualWebhook"></x-forms.input>
@can('update', $resource)
<x-forms.input type="password"
helper="Need to set a secret to be able to use this webhook. It should match with the secret in Gitea."
label="Gitea Webhook Secret" id="giteaManualWebhookSecret"></x-forms.input>
@else
<x-forms.input disabled
helper="Need to set a secret to be able to use this webhook. It should match with the secret in Gitea."
label="Gitea Webhook Secret" value="Hidden (only admins can view)"></x-forms.input>
@endcan
</div>
@can('update', $resource)
<x-forms.button type="submit">Save</x-forms.button>
@endcan
</x-slot:actions>
<x-forms.copy-button label="Deploy webhook URL" :text="$deploywebhook ?? ''" />
</x-application.settings-section>
@if ($githubManualWebhook && $gitlabManualWebhook)
<form wire:submit.prevent="submit" class="application-settings-form flex flex-col">
<x-unsaved-bar action="submit" />
<x-application.settings-section id="manual-git-webhooks-section" title="Manual Git webhooks"
helper="Configure these endpoints when the repository is not connected through an official Git App." flush>
<x-slot:actions>
@if (filled($resource?->gitWebhook))
<a class="button" href="{{ $resource->gitWebhook }}" target="_blank"
rel="noopener noreferrer">
Repository settings
<x-external-link />
</a>
@endif
</x-slot:actions>
<div class="divide-y divide-neutral-200 dark:divide-white/[0.07]">
@foreach ($manualWebhookProviders as $provider)
<section class="px-4 py-5 first:pt-4 last:pb-4"
wire:key="manual-webhook-{{ str($provider['name'])->slug() }}">
<div class="mb-4">
<h4 class="text-sm font-semibold text-black dark:text-fg">
{{ $provider['name'] }}
</h4>
<p class="mt-1 text-[13px] leading-5 text-neutral-500 dark:text-fg-dim">
{{ $provider['description'] }}
</p>
</div>
<div class="grid gap-4 md:grid-cols-2">
<x-forms.copy-button label="Webhook URL" :text="$provider['url'] ?? ''" />
@can('update', $resource)
<x-forms.input type="password" :id="$provider['secret']"
label="Webhook secret"
helper="Must exactly match the secret configured in {{ $provider['name'] }}."
autocomplete="new-password" />
@else
<x-forms.input disabled label="Webhook secret"
value="Hidden (only administrators can view)" />
@endcan
</div>
</section>
@endforeach
</div>
</x-application.settings-section>
</form>
@else
<x-callout type="info" title="Information">
You are using an official Git App. You do not need manual webhooks.
</x-callout>
<x-application.settings-section id="manual-git-webhooks-section" title="Manual Git webhooks"
helper="Manual repository webhooks are only required when a repository is not connected through an official Git App.">
<x-empty size="sm" title="Managed by your Git App"
description="This application uses an official Git App, so Coolify configures repository webhooks automatically."
icon-name="notifications" />
</x-application.settings-section>
@endif
</div>
@else
<div class="application-settings-form">
<x-application.settings-section title="Deploy webhook"
helper="Trigger an external deployment with a valid Coolify API authorization token.">
<x-slot:actions>
<a class="button" href="https://coolify.io/docs/api-reference/authorization" target="_blank"
rel="noopener noreferrer">
Documentation
<x-external-link />
</a>
</x-slot:actions>
<x-forms.copy-button label="Deploy webhook URL" :text="$deploywebhook ?? ''" />
</x-application.settings-section>
</div>
@endif
</div>