1578 Commits
Author SHA1 Message Date
Andras BacsaiandClaude Opus 5.5 5145aa53dc fix(services): align service configuration form with role permissions (#12356)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 22:39:52 +01:00
Andras BacsaiandClaude Opus 5.5 fae2752346 fix(databases): show custom configuration only to admins (#12353)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 22:34:47 +01:00
Andras BacsaiandClaude Opus 5.5 eb030c6a22 fix(auth): limit application commands and configuration to admins and read:sensitive tokens
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 21:19:20 +01:00
Andras Bacsai bb1fada600 fix(clone): replace the clone suffix instead of adding one for each clone
Cloning a clone added another "-clone-<id>" to the name, so after about
seven clones the name was longer than 255 characters and the insert failed.

Closes #9976
2026-10-27 17:06:52 +01:00
Andras Bacsai fcdcd80eeb feat(env): support variable flag directives in developer view (#12349) 2026-10-27 16:27:22 +01:00
Andras Bacsai 1039368491 fix(s3): support virtual-hosted-style URLs for S3 storages
Add a "Use path-style URLs" setting to S3 storages. It is detected from
the endpoint (Alibaba OSS, Tencent COS, Volcengine/BytePlus TOS), and the
connection test switches to virtual-hosted style when the provider
rejects path-style requests. Backups pass `--path off` to mc.

Closes #10347
2026-10-27 15:53:16 +01:00
Andras Bacsai af7365ad57 fix(applications): keep the base directory in new repository apps
The deploy key flow saved the base directory only for Docker Compose.
All repository flows now validate the base directory, and the GitLab
and Gitea flows reject destinations on servers that cannot deploy.

Closes #10319
2026-10-27 15:50:41 +01:00
Andras BacsaiandClaude Opus 5.5 bbddf9543d fix(applications): keep saving with unchanged legacy build commands
Install, build, and start commands saved before they were validated
blocked every save of the General tab, and the fields are hidden for
build packs other than Nixpacks and Railpack, so users could not fix
them. Validate these commands only when they change; deployments pass
them to the builder as one escaped argument.

Closes #10055

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 15:48:28 +01:00
Andras BacsaiandClaude Opus 5.5 3c85187377 fix(github): use the owner/repo slug for GitHub API calls with SSH repository URLs
Closes #10175

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 15:47:15 +01:00
Andras BacsaiandClaude Opus 5.5 c3d110496c fix(github): show GitHub App errors when loading repositories
Closes #10174

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 15:46:26 +01:00
Andras Bacsai 90e7533a65 fix(env): keep quoted values when saving the developer view
Closes #10406
2026-10-27 15:24:08 +01:00
Andras BacsaiandClaude Opus 5.5 d3b1a3d405 fix(ui): update breadcrumb names after a rename
Closes #12341

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 14:55:39 +01:00
Andras Bacsai f658d6df76 fix(logs): show container logs that contain invalid UTF-8
Closes #10628
2026-10-27 14:43:21 +01:00
Andras Bacsai 8d083deffb fix(storage): stop syncing file storages on every compose parse
The compose parser queued ServerFilesFromServerJob for every volume on
each parse, and pages that only show data parse the Compose file. Each
sync also sent two SSH commands for each file.

- Queue the sync only for a compose deployment, and for each service
  resource with file storages when the service starts or deploys.
- Read the compose service names without a parse on the Domains and
  scheduled task pages.
- Check all file storages with one remote command, and stop when a
  symbolic link, a special file, or an unknown state is at a file path.
- Keep the application path in a file storage when a pull request
  preview is parsed. Preview deployments of the current parser write
  their `-pr-<id>` copies through LocalFileVolume::forPullRequest().
- Remove the unreachable file sync from the service resource page.
2026-10-27 12:04:37 +01:00
Andras BacsaiandClaude Opus 5.5 4edf987279 revert(ssh): send remote command batches in argv again
Sending SSH command batches on stdin changes how every remote command
reaches a server, which is too risky for a patch release. Move it to
next and restore the heredoc transport from before 1a2a5362a. The
shared test helpers stay because they work with both transports.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 11:11:09 +01:00
Andras Bacsai 1a2a5362ad fix(security): secure remote command secrets and clone volume data 2026-10-27 09:47:18 +01:00
Andras BacsaiandClaude Opus 5.5 ea1b701a94 fix(ports): skip the PORT mismatch warning when readonly labels are disabled
Closes #10941

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 13:24:36 +01:00
Andras Bacsai 271849c88e fix(scheduled-tasks): show the server timezone in the schedule help text
Closes #10904
2026-10-26 13:10:09 +01:00
Andras BacsaiandClaude Opus 5.5 88e67cbf42 fix(new-resource): pass server ids in the resource wizard (#12327)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 10:14:45 +01:00
Andras BacsaiandClaude Opus 5.5 cbe734c15b fix(env): keep the value of locked environment variables on update
Closes #12299

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 23:58:51 +01:00
Andras BacsaiandClaude Opus 5.5 0f0a1e920d fix(project): show production, staging, and development environments first
Closes #12317

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 23:47:32 +01:00
Andras BacsaiandClaude Opus 5.5 7654e8d3a9 fix(previews): keep custom preview domains on redeploy
Closes #6536

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 23:42:19 +02:00
Andras BacsaiandClaude Opus 5.5 b4a4df2706 fix(files): browse containers without a shell through a helper container
Closes #12305

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 23:33:24 +02:00
Andras BacsaiandClaude Opus 5.5 d605e5dfa0 fix(ui): load the Compose file automatically only on the General page
Other application pages still show Load compose and the disabled Deploy
button, but they do not start a load on their own.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 22:14:55 +02:00
Andras BacsaiandClaude Opus 5.5 887461ab2d fix(resources): hide deleted resources on the environment page after the redirect
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 22:12:57 +02:00
Andras BacsaiandClaude Opus 5.5 d30f582bfe fix(ui): load the Compose file on open and show a disabled Deploy until it loads
Load a missing Compose file once when an application page opens. Until it
loads, show Load compose next to a disabled Deploy button on every page.
Keep teleported tooltips keyed so Livewire morphs the form after updates.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 22:11:48 +02:00
Andras BacsaiandClaude Opus 5.5 d8d33c69ce fix(auth): hide locked and admin-only secrets in forms, compose, and the API
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 21:46:58 +02:00
Andras Bacsai 6fc14f3615 fix(auth): enforce resource permissions for stored secrets 2026-10-24 18:26:55 +02:00
Andras BacsaiandClaude Opus 5.5 ff4939a06f fix(clone): copy service volume data and keep file owners when cloning
The UI service clone iterated relation builders before parse() created
the sub-resources, so no volume copy ever ran. All service clone paths
now use clone_service(), which parses first and matches volumes by
mount path. VolumeCloneJob no longer forces chown 1000:1000.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 18:25:31 +02:00
Andras BacsaiandClaude Opus 5.5 5f460c06c6 fix(previews): key docker tags by preview id so a delete cannot shift them
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 18:14:51 +02:00
Andras Bacsai 8aed790a78 fix(migration): block server migration when the target proxy is not running 2026-10-24 17:55:11 +02:00
Andras BacsaiandClaude Opus 5.5 1527917523 feat(ui): make live refresh a toggle for any metrics and analytics range
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 13:24:52 +02:00
Andras Bacsai a3712f8902 fix(deploy): stop 502 errors during rolling updates
Traefik and Caddy routes of applications now retry a failed connection
on another container, and the rolling update waits a configurable drain
time (default 5 seconds) after the new container is healthy before it
stops the old containers. The wait is skipped when no old container runs
or when the proxy labels changed, because the proxy drops a route that
two containers define differently.

Fixes #8627
2026-10-24 11:16:46 +02:00
Andras BacsaiandClaude Opus 5.5 6c270a42db fix(service): remove the "Remove from Coolify only" delete option
A normal delete now removes a resource from Coolify also when its server
is not reachable, so the separate option only left untracked containers
running. The danger zone button is gone, and the services API rejects
delete_from_coolify_only with 422 instead of ignoring it, so old clients
do not delete Docker resources they asked to keep.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 10:18:51 +02:00
Andras BacsaiandClaude Opus 5.5 e49e540ec0 fix(applications): report a failed stop instead of failing silently
- Do not ignore errors of the docker stop and rm commands, so a failed SSH call
  does not mark a running application as exited.
- Log the failure and broadcast ApplicationStopFailed; the application page
  shows an error toast.

Closes #11063

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 00:45:13 +02:00
Andras Bacsai 14cdafdbe6 fix(previews): stop the preview DNS poll from re-queuing file sync jobs
The preview Domains component parsed the compose file on every render,
also on the 2-second DNS poll. Each parse queues a ServerFilesFromServerJob,
so a new file sync ran each time a worker started the previous one.

- Parse the compose services once on mount and on save, and keep them in
  a locked property.

Refs #11062
2026-10-24 00:43:59 +02:00
Andras BacsaiandClaude Opus 5.5 e3ee4a99c5 fix(compose): create one service on repeated submits and reject compose without services
Closes #11078

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 00:14:46 +02:00
Andras BacsaiandClaude Opus 5.5 9d82a76fc4 perf(metrics): fetch all Sentinel metric types in one SSH command
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 22:07:37 +02:00
Andras BacsaiandClaude Opus 5.5 95d796e922 feat(deployments): compact history beside logs with in-place switching
- Fit the embedded history to the logs height and page size to the screen
- Show status as a dot with short start time; add source, duration, and
  server as a second line; make whole rows clickable
- Switch the logs viewer to another deployment without a page load
- Use View and Export menus and the runtime logs search in the toolbar
- Export visible logs from the server with secrets hidden; redact app
  secrets in the full log download

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 12:34:08 +02:00
Andras Bacsai 3bfeb14b7d style(logs): show deployment status dots like the service menu
Deployment options get the same status dot and Stopped caption as
services instead of colored badges, so the listbox no longer needs
labelClass.
2026-10-23 12:25:57 +02:00
Andras Bacsai 2e7cf8633b feat(logs): pick runtime log streams from service selectors
Replace the container accordion with Deployment and Service selectors
that show one stream, merging replica containers by timestamp. The
viewer fills the page, opens in text view, keeps whitespace, and only
lets grid rows expand when the detail shows more than the row.

Based on the proposal in discussion #12176 by PhilippMolitor.
2026-10-23 11:55:44 +02:00
Andras Bacsai 7acfcdff24 feat(ui): reorganize resource settings and domain port editing 2026-10-22 20:26:41 +02:00
Andras BacsaiandClaude Opus 5.5 65a7bd5c05 chore: merge main into release/v4.5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 13:37:20 +02:00
Andras Bacsai 2ade696375 fix(storage): resolve ${VAR:-default} bind sources and safe conversion (#12227) 2026-10-20 11:41:54 +02:00
Andras Bacsai cf71fda5c1 feat(gitea): add Gitea App sources and private repo deployments (#12234) 2026-10-19 21:58:30 +02:00
Andras Bacsai 62be8674bc feat(proxy): add optional permanent redirects for apps and services (#12233) 2026-10-19 21:46:12 +02:00
Andras Bacsai dd456625ec Merge remote-tracking branch 'origin/release/v4.5' into release/v4.5 2026-10-19 15:03:38 +02:00
Andras BacsaiandClaude Opus 5.5 ad6e929a93 feat(gpu): fix GPU compose settings and show detected server GPUs
- Build a valid compose device request (device_ids list, options mapping, blank driver)
- Map --gpus N to count and drop --gpus when GPU settings are enabled
- Validate only changed GPU values so stored legacy values keep working
- Detect NVIDIA GPUs and the container toolkit with the server details
- Show detected GPUs with a refresh button in the application GPU section

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 15:00:31 +02:00
Andras Bacsai 3d8cea9e3c feat(rollback): list Docker registry images of recent deployments
Rollback now also lists the commit images of the last 10 successful
deployments when the application pushes to a Docker registry. The
deployment pulls such an image when the server no longer has it.
The page and the API share GetRollbackImages, and the API returns a
source field (local or registry).
2026-10-19 10:10:48 +02:00
22a8c09dd6 Next (#12202)
Co-authored-by: Aditya Tripathi <aditya@climactic.co>
Co-authored-by: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: rosslh <ross@rosshill.ca>
Co-authored-by: Abdulfetah Suudi <suudiabdulfetah@gmail.com>
Co-authored-by: Dharmveer <51308779+dharmveer97@users.noreply.github.com>
Co-authored-by: Maxwell <136101+mxswd@users.noreply.github.com>
2026-10-19 10:07:23 +02:00