fix(ui): open the unsaved bar for update channel and healthcheck type changes

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Andras BacsaiandClaude Opus 5.5 committed 2026-11-03 17:33:55 +01:00
1 parent cf1e0e70c5
commit 7e7f491749
3 files changed
+23 -15

No files matched your search

+2
View File
@@ -17,6 +17,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
- Handle an existing Cloudflare DNS record with a different IP when Coolify adds the DNS record of a new domain automatically. Coolify now replaces the record when it created the record and no other resource uses it. Otherwise it opens the **Configure DNS** dialog, where you can replace the record, and the domain shows the conflict instead of "Not checked"
- Add the Cloudflare DNS record automatically, or open the **Configure DNS** dialog, also when you edit a domain to a hostname in a connected Cloudflare zone, for example when you change a generated domain to your own domain. Before, Coolify did this only when you added a new domain. This applies to the **Domains** pages, the application and service application settings, and the service application API
- Save deployments started through the MCP server as MCP deployments, not as API deployments. The deployment list shows them with the **MCP** source and filter, and the API and MCP deployment data have a new `is_mcp` field. The deployments to additional servers keep the source of the main deployment, and the audit log records actions that MCP tools do through the API as MCP events
- Save the update channel in **Settings > Updates** when you select **Preview** or **Nightly**. Before, the "Save changes" bar did not open for these channels, so the change was lost when you refreshed the page
- Save the healthcheck **Check type** when it is the only change. Before, the "Save changes" bar did not open when you changed only the check type, for example from **Container command** back to **HTTP request**
## [v4.6.0] - 2026-11-02
@@ -40,12 +40,12 @@
@endif
<div class="max-w-xs">
<x-forms.listbox id="healthCheckType" label="Check type" required live :options="[
<x-forms.listbox id="healthCheckType" label="Check type" required :options="[
['value' => 'http', 'label' => 'HTTP request'],
['value' => 'cmd', 'label' => 'Container command'],
]" :disabled="! $canUpdate" />
</div>
@if ($healthCheckType === 'http')
<div x-show="$wire.healthCheckType === 'http'" @if ($healthCheckType !== 'http') x-cloak @endif>
<x-application.settings-subsection id="healthcheck-request-section" title="HTTP request"
helper="Coolify sends this request from inside the container and evaluates the response.">
<div class="grid gap-4 md:grid-cols-2 lg:grid-cols-4">
@@ -77,7 +77,8 @@
helper="Leave empty when the response body does not need to contain specific text." />
</div>
</x-application.settings-subsection>
@else
</div>
<div x-show="$wire.healthCheckType !== 'http'" @if ($healthCheckType === 'http') x-cloak @endif>
<x-application.settings-subsection id="healthcheck-command-section" title="Container command"
helper="The command must exit with code 0 for the container to be considered healthy.">
<x-callout type="warning" title="Shell operators are not supported">
@@ -88,10 +89,10 @@
<x-forms.input canGate="update" :canResource="$resource" id="healthCheckCommand"
label="Command" placeholder="pg_isready -U postgres"
helper="Use a single executable command without shell expansion."
:required="$healthCheckType === 'cmd'" />
required x-bind:required="$wire.healthCheckType === 'cmd'" />
</div>
</x-application.settings-subsection>
@endif
</div>
<x-application.settings-subsection id="healthcheck-timing-section" title="Timing and retries"
helper="Control how quickly healthchecks start, repeat, and fail.">
@@ -18,7 +18,8 @@
</x-forms.button>
</x-slot:actions>
<div class="grid gap-4 lg:grid-cols-2">
<x-forms.listbox id="update_channel" label="Channel" live :options="[
{{-- Not live: a live update clears the dirty state, so the unsaved bar never opened for a channel change. --}}
<x-forms.listbox id="update_channel" label="Channel" :options="[
['value' => 'stable', 'label' => 'Stable', 'description' => 'Stable releases'],
['value' => 'preview', 'label' => 'Preview', 'description' => 'Betas and release candidates, then the stable release'],
['value' => 'nightly', 'label' => 'Nightly', 'description' => 'A build of the next version twice a day, then every release'],
@@ -26,27 +27,31 @@
]"
helper="The versions this instance upgrades to." />
@if ($update_channel === 'custom')
<div x-show="$wire.update_channel === 'custom'" @if ($update_channel !== 'custom') x-cloak @endif>
<x-forms.input required id="update_custom_tag" label="Image tag" placeholder="pr-1234"
x-bind:required="$wire.update_channel === 'custom'"
helper="A tag of ghcr.io/coollabsio/coolify, such as pr-1234 for the build of pull request 1234." />
@else
<div class="hidden lg:block"></div>
@endif
</div>
<div x-show="$wire.update_channel !== 'custom'" @if ($update_channel === 'custom') x-cloak @endif
class="hidden lg:block"></div>
@if ($update_channel === 'nightly')
<x-callout type="danger" title="Nightly builds can break this instance" class="lg:col-span-2">
<div x-show="$wire.update_channel === 'nightly'" @if ($update_channel !== 'nightly') x-cloak @endif
class="lg:col-span-2">
<x-callout type="danger" title="Nightly builds can break this instance">
Nightly builds are untested builds of the next version. Things can break at any time and
breaking changes are possible, including database changes a stable release does not expect.
Back up first and use nightly only on an instance you can rebuild. After switching back to stable,
the instance keeps getting the nightlies of its version until that version is released as stable.
</x-callout>
@elseif ($update_channel === 'custom')
<x-callout type="danger" title="A custom image can break this instance" class="lg:col-span-2">
</div>
<div x-show="$wire.update_channel === 'custom'" @if ($update_channel !== 'custom') x-cloak @endif
class="lg:col-span-2">
<x-callout type="danger" title="A custom image can break this instance">
The image installs only when you upgrade to it here, and automatic updates pause until you
switch back to a channel. Pull request builds are untested and can include database changes
a later release does not expect.
</x-callout>
@endif
</div>
<x-forms.input required id="update_check_frequency" label="Check frequency"
placeholder="0 * * * *"