Commit Graph
100 Commits
Author SHA1 Message Date
Andras BacsaiandClaude Opus 5.5 a80f0c7ca8 fix(ui): name the deepest menu on the resource menu row
- Backup pages show Backup, and service sub-resources show their own
  name, because the row opens that menu.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 17:23:49 +01:00
Andras BacsaiandClaude Opus 5.5 49346aeb29 fix(ui): restore the main menu row that reopens the resource menu
- On a resource page, the main menu starts with a row that shows the
  resource name and opens the deepest resource menu again.
- Pass the resource name to registerMainNavContext() again.
- Document the row in DESIGN.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 17:21:08 +01:00
Andras BacsaiandClaude Opus 5.5 b3ec26c3b1 fix(proxy): stop routing the Reverb HTTP API through the dashboard domain
The browser uses only the /app/{key} WebSocket. Laravel sends events to
Reverb over 127.0.0.1, so the generated Traefik and Caddy configs no longer
route /apps to port 6001, and the WebSocket rule only matches /app/.

Closes #12390

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 12:01:21 +01:00
Andras Bacsai 98b7de0ea7 fix(api): accept the same port mappings as the UI
Closes #12388
2026-10-30 11:43:13 +01:00
Andras BacsaiandClaude Opus 5.5 3e2fff0609 fix(deployments): stop the build server helper when a deployment is cancelled
Save build_server_id as soon as a build server is selected, so the cancel
cleanup finds the helper container on the build server. Let the final
helper stop run after a cancel.

Closes #12383

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 11:43:04 +01:00
Andras BacsaiandClaude Opus 5.5 4b541011c9 fix(api): hide locked values in resource and environment lists
Closes #12391

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 11:23:16 +01:00
Andras Bacsai 72c8209285 feat(subscription): email checkout reminders for expired sessions
Enable Stripe checkout recovery links and send rate-limited reminders to the
admin who started an unfinished subscription checkout.
2026-10-29 23:35:34 +01:00
Andras BacsaiandClaude Opus 5.5 0d398ced24 fix(servers): open patches page from the patches badge
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 20:44:17 +01:00
Andras Bacsai 28c5af9b18 fix(avatar): change avatar URL when an existing avatar is replaced 2026-10-29 19:06:11 +01:00
Andras Bacsai 69bfb24ab2 feat(templates): add Hi.Events event management service (#12380) 2026-10-29 18:55:45 +01:00
Andras BacsaiandClaude Opus 5.5 f2ece40dd4 fix(terminal): fall back to usable shell for nologin and false (#12242)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 18:29:51 +01:00
Andras BacsaiandClaude Opus 5.5 7faa46bbd4 fix(upgrade): ignore whitespace around root user values before quoting
phpdotenv trims whitespace around an unquoted value, including the \r of
CRLF line endings. The repair quoted such values, which broke valid lines in
CRLF files and kept spaces that phpdotenv drops. Trim the value first and
quote it only when a space is still inside it.

Closes #12375

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 18:28:14 +01:00
Andras BacsaiandClaude Opus 5.5 43933ee6cc fix(upgrade): quote root user credentials with spaces in the .env file
Installers before 4.5.1 and manual edits could leave ROOT_USERNAME (or the
root email or password) with spaces and no quotes. The running container
ignores .env because its config is cached, so the next upgrade recreated it
and phpdotenv failed, which made every page return HTTP 500. The upgrade now
quotes these values before it restarts Coolify.

Closes #12375

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 18:25:50 +01:00
Andras BacsaiandClaude Opus 5.5 607daf80be feat(auth): show two-factor code as separate digit boxes
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 18:17:18 +01:00
Andras Bacsai 96ed09f0cc fix(auth): clear forced password reset after a password reset
An invited user who set a password with Forgot password kept the forced
reset flag. A re-invite then replaced the password, and a revoked or
expired invitation deleted the account.
2026-10-29 18:16:00 +01:00
Andras Bacsai a39370dbb8 fix(postgresql): prevent init script path traversal 2026-10-29 18:01:43 +01:00
Andras Bacsai 6030d096bf fix(team): send working invitation links to users without a password
Re-inviting an email after its invitation expired, or re-inviting a user
who never set a password, sent a link that needs a login the user cannot
complete. Unused invited accounts now get a magic link again, and changing
another user's password no longer ends the current session.
2026-10-29 17:54:17 +01:00
Andras Bacsai b41ba87fff fix(application): reject Docker image names shared by building applications
Two applications that build the same Docker image name push the same
tags (commit SHA, latest, pr-<id>), so one can run the image of the
other. Deployments, the General form, and the API now reject such a
name for applications of the same team.

Closes #9834
2026-10-29 11:30:25 +01:00
Andras BacsaiandClaude Opus 5.5 3048e9948c fix(analytics): start Locations card on resource analytics tabs
Key the loaded view so the lazy-load morph replaces the placeholder
skeleton instead of patching it in place. Alpine did not start the
Locations toggle, the globe, and the table pagers on reused nodes.

Closes #12370

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 11:28:04 +01:00
Andras Bacsai 623d367a2a fix(env): keep preview variable order when sorting is disabled
Closes #9876
2026-10-29 11:18:02 +01:00
Andras BacsaiandClaude Opus 5.5 6f8cf50402 feat(env): show compose defaults for empty variables in developer view
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 11:15:46 +01:00
Andras BacsaiandClaude Opus 5.5 6e3ab703bf fix(application): show watch paths for deploy key applications
Closes #12373

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 11:09:16 +01:00
Andras Bacsai c6f5899949 feat(tables): show loading state while a server-side sort runs 2026-10-29 11:05:39 +01:00
Andras Bacsai 103af830e5 feat(dashboard): sort projects and servers by clicking a column header 2026-10-29 11:05:39 +01:00
Andras Bacsai af28ba8bbc feat(tables): sort tables by clicking a column header 2026-10-29 10:53:54 +01:00
Andras BacsaiandClaude Opus 5.5 cd992e72e1 feat(tables): filter tables by clicking a cell value
Click a type, status, server, source, or role value in a table row to
filter the table by that value. Click it again to remove the filter.
Covers the environment resources, deployments, application and service
backups, and team members tables.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 10:53:44 +01:00
Andras Bacsai a3e2b9347c Merge branch 'fix-bulk-env-flags-proxy-event' 2026-10-29 08:57:21 +01:00
Andras Bacsai 0894251de9 docs(api): remove unsupported preview and Highlight fields
Remove is_preview from service environment variable request schemas and
Highlight log drain fields from the generated OpenAPI specifications.
2026-10-29 08:57:20 +01:00
Andras Bacsai f778942630 docs(ai): document hidden counts in application queries 2026-10-29 00:00:06 +01:00
Andras BacsaiandClaude Opus 5.5 3607abf7eb fix(servers): load server manager servers in batches by id
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 23:59:34 +01:00
Andras BacsaiandClaude Opus 5.5 a12f62ed4f fix(dashboard): bound recent deployments query per application
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 23:58:59 +01:00
Andras BacsaiandClaude Opus 5.5 3d956c110c fix(servers): skip patch check results in bulk settings loads
ServerManagerJob and the Docker cleanup step of ScheduledJobManager
load the settings of every server with SELECT *. That reads the
patch_check_result JSON, which holds the full update list of each
server. With 12,709 rows, the scan took about 4 ms, but the full fetch
took 390-536 ms and 294 MB of PHP memory. Without the column it took
74 ms and 111 MB.

Add ServerSetting::withoutPatchCheckResult() and use it in both loops.
Queued jobs reload the full settings through SerializesModels.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 23:58:51 +01:00
Andras BacsaiandClaude Opus 5.5 c34f5f8e3b fix(servers): index active server lookups by private key
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 23:47:55 +01:00
Andras BacsaiandClaude Opus 5.5 55605f6516 fix(github-runners): select runner servers with a UNION of server ids
An OR of two correlated EXISTS subqueries made Postgres estimate a
per-server scan of the runner executions, so JIT compilation took most
of the time of the per-minute reconcile query. Select the server ids
from both runner tables with one UNION and index executions by status
and server.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 23:43:16 +01:00
Andras BacsaiandClaude Opus 5.5 7324b5ca7b fix(webhooks): filter manual webhook applications by repository in SQL
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 22:54:34 +01:00
Andras BacsaiandClaude Opus 5.5 c23d3363f2 fix(deployments): load only commit details for the application heading
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 22:53:30 +01:00
Andras BacsaiandClaude Opus 5.5 68a08170e7 fix(docker): index interrupted cleanup lookup and process it in batches
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 22:53:10 +01:00
Andras BacsaiandClaude Opus 5.5 2616b4bba1 fix(deployments): index history ordering and skip payload columns in lists
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 22:44:28 +01:00
Andras BacsaiandClaude Opus 5.5 2b6af2744a fix(database): index server settings and team membership lookups
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 22:30:40 +01:00
Andras Bacsai 42ba6ec666 fix(docker): preserve storage directory .gitignore files 2026-10-28 22:28:00 +01:00
Andras BacsaiandClaude Opus 5.5 0951c5daa1 fix(database): index team deployment and Docker cleanup history lookups
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 22:14:51 +01:00
Andras BacsaiandClaude Opus 5.5 06747f9954 chore(release): bump Coolify version to 4.5.4
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 22:14:12 +01:00
Andras Bacsai 57cdd92f7c fix(upgrade): count only scheduled jobs running on this host 2026-10-28 22:13:40 +01:00
Andras BacsaiandClaude Opus 5.5 24648d4b20 fix(docker-cleanup): skip broadcast for executions of deleted servers
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 22:13:27 +01:00
Andras BacsaiandClaude Opus 5.5 70c1bcb138 fix(versions): restore helper 1.0.19 and Sentinel 1.1.3
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 15:05:32 +01:00
Andras Bacsai bc61f4860f fix(railpack): serialize builder bootstrap before builds 2026-10-28 15:00:59 +01:00
Andras BacsaiandClaude Opus 5.5 5de2456186 chore(versions): bump coolify-helper to 1.0.19
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 14:16:22 +01:00
Andras BacsaiandClaude Opus 5.5 bd9708d79b fix(compose): let the build interpolate required runtime-only variables
Closes #12363

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 14:16:22 +01:00
Andras BacsaiandClaude Opus 5.5 e7a46bd790 fix(mcp): show commands and configuration to read:sensitive tokens
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 14:16:22 +01:00
Andras BacsaiandClaude Opus 5.5 afe8fc05ea fix(healthcheck): keep the Dockerfile HEALTHCHECK of existing applications
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 14:16:22 +01:00
Andras BacsaiandClaude Opus 5.5 fd5efd0273 fix(http): stop retrying requests that timed out after they were sent
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 14:16:22 +01:00
Andras BacsaiandClaude Opus 5.5 597a878d80 fix(hetzner): validate over SSH when the Hetzner API call fails
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 14:16:22 +01:00
Andras BacsaiandClaude Opus 5.5 c4a7cd6d4a fix(ssh): reap orphaned ControlPersist mux masters
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 14:16:22 +01:00
Andras Bacsai 2e874576e1 chore(release): bump Coolify version to 4.5.3 2026-10-28 13:59:51 +01:00
Andras Bacsai 7e6de3872f chore(release): bump Coolify version to 4.5.2 2026-10-28 12:16:17 +01:00
Andras Bacsai 9aca61fbd6 fix(ssh): start mux masters with a command that exits
When another process held the control socket, `ssh -fN` disabled
multiplexing and stayed open as a plain connection forever. Each one
kept an sshd process on the server, which used up its memory.

Run `true` instead of -fN. ControlPersist moves a new master to the
background; a process that cannot become the master exits.
2026-10-28 12:10:27 +01:00
Andras Bacsai 2dcf8eeca3 fix(previews): keep production values for previews from before the upgrade
Public pull request previews no longer get production values, and no
preview falls back to production variables. Existing previews were
deployed with these values; for example, their databases were
initialized with the production password, so they broke on redeploy.

Previews that exist at the upgrade get keeps_production_values and
keep the earlier behavior. Previews created later do not. Server
transfer moves the flag.
2026-10-28 12:10:27 +01:00
Andras Bacsai 5dacaed9f2 fix(proxy): keep the application proxy labels of v4.5.0
The retry labels (Traefik retry middleware, Caddy lb_try_duration)
changed the labels of every application. On the first rolling update
after a settings save, the old and the new container defined the same
Traefik router differently, so Traefik dropped the route and returned
503 until the old container stopped.

Remove the retry labels from this release. The rolling update drain
wait stays.
2026-10-28 12:10:27 +01:00
Andras Bacsai ef57eea320 fix(backups): sign mc requests with S3v4 and retry failed S3 uploads 2026-10-28 10:35:46 +01:00
Andras Bacsai c2de0d83d8 docs(security): clarify threat model and vulnerability severity 2026-10-27 22:58:21 +01:00
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 eaabed5c4b fix: scope finish events of background tasks to their team (#12355)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 22:36:25 +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 bc0cb1b37d fix(database-import): improve MySQL and MariaDB restore handling (#12352)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 21:47:28 +01:00
Andras Bacsai e21be95392 Merge branch 'ghsa-v432-app-credentials-members' 2026-10-27 21:40:37 +01:00
Andras Bacsai 0372f5a319 Merge branch 'ghsa-ffqv-source-webhook-secret' 2026-10-27 21:28:21 +01:00
Andras BacsaiandClaude Opus 5.5 9b9d1309d1 fix(api): allow write tokens to set manual webhook secrets
Webhook secrets are stored settings, so a token with the write ability can
set or change them, the same as GitHub App and GitLab App webhook secrets.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 21:24:20 +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 daf6b85cab Merge branch 'ghsa-fgfp-pushover-log' 2026-10-27 21:16:06 +01:00
Andras Bacsai 8d29e3c62f chore(notifications): remove debug logging from Pushover message 2026-10-27 21:15:27 +01:00
Andras Bacsai efbd64346c fix(log-drains): support Axiom edge domains and sudo shell operators 2026-10-27 18:56:55 +01:00
Andras Bacsai d59899469c test(deployments): cover Docker-created bind dirs and sudo-less imports 2026-10-27 18:56:46 +01:00
Andras BacsaiandClaude Opus 5.5 56d0cf0e27 fix(servers): validate new cloud servers automatically when they are running
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 17:58:34 +01:00
Andras BacsaiandClaude Opus 5.5 28f44d3aa0 fix(hetzner): show out-of-stock server types as disabled in the server form
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 17:44:34 +01:00
Andras Bacsai 101444b8ca fix(log-drains): support Axiom edge domains and update Fluent Bit to 5.1
- Add an Axiom edge domain setting (default us-east-1) and use the /v1/ingest endpoint, so EU datasets work
- Remove the Highlight drain (service ended) and stop its running containers
- Update Fluent Bit from 2.0 to 5.1 and use the warn log level
- Restart running drains when the generated files change, with the new image pulled before the old container stops
- Show log drain validation errors under their fields

Closes #9898
2026-10-27 17:41:50 +01:00
Andras BacsaiandClaude Opus 5.5 18a85d37ba fix(hetzner): hide server types that are out of stock or deprecated in a location
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 17:35:22 +01:00
Andras Bacsai 1242353511 Merge remote-tracking branch 'origin/main' 2026-10-27 17:24:19 +01:00
Andras BacsaiandClaude Opus 5.5 67673525a8 fix(modal): let password managers autofill the confirmation password
Closes #9963

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 17:11:07 +01:00
Andras Bacsai c6b52a1d36 fix(git): check out short commit SHAs with shallow clone
Closes #9926
2026-10-27 17:09:55 +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 BacsaiandClaude Opus 5.5 1440ea83d3 fix(compose): keep port-suffixed SERVICE_URL and SERVICE_FQDN variables in sync with the domain
Closes #9877

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 17:04:07 +01:00
Andras BacsaiandClaude Opus 5.5 1082b598c4 fix(api): return logs of stopped containers like the UI
The log endpoints found containers with `docker ps -a`, then rejected
every container that was not running. Remove that check, so failed
deployments can be diagnosed through the API. Without service_name,
the application endpoint prefers a running container. The old error
stays when no container exists.

Closes #9972

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 17:03:52 +01:00
Andras Bacsai e78659dfed fix(api): preserve omitted env var values and flags on PATCH (#12240) 2026-10-27 17:00:56 +01:00
Andras Bacsai 69bc72a3b5 fix(analytics): fetch Sentinel dashboards of all servers concurrently
The analytics page fetched each server's dashboard bundle over SSH one
after another, so the skeleton stayed until every server answered. Start
all fetches at the same time and remember failures, so the page waits
only for the slowest server.

Closes #12347
2026-10-27 16:47:55 +01:00
Andras BacsaiandClaude Opus 5.5 e8a8cd9de4 chore(versions): upgrade Sentinel images to 1.1.3
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 16:38:23 +01:00
Andras BacsaiandClaude Opus 5.5 ba58884565 fix(dev): stop GPU VM start while host processes use the GPU
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 16:38:21 +01:00
Andras Bacsai e8c652d908 chore(versions): downgrade Sentinel images to 1.1.2 2026-10-27 16:37:33 +01:00
Andras BacsaiandClaude Opus 5.5 bb24acd957 fix(http): retry connection failures of idempotent requests for all HTTP calls
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 16:36:50 +01:00
Andras Bacsai 16c6de823b fix(cloud-providers): show why Hetzner, DigitalOcean, and Vultr API requests fail
Provider errors now return 502 with a safe message, the provider status, and
the provider error code instead of a bare 500. Hetzner no longer sends a create
request again after a 5xx, and a VPS that Coolify did not save is deleted.
2026-10-27 16:35:57 +01:00
Andras Bacsai f202ed5d83 Merge remote-tracking branch 'origin/main' 2026-10-27 16:27:28 +01:00
Andras Bacsai fcdcd80eeb feat(env): support variable flag directives in developer view (#12349) 2026-10-27 16:27:22 +01:00
Andras BacsaiandClaude Opus 5.5 a2c048c999 fix(database): recreate TCP proxies that run an outdated configuration
Proxies started before v4.4.4 kept the old nginx config after an upgrade:
the upstream IP was resolved only once and IPv6 connections were reset.

- Label new proxies with a configuration version
- Status checks (Sentinel and SSH) recreate a running proxy with an
  older or missing version once, at most every 10 minutes
- Remove the old proxy only after the image pull, so a failed pull
  keeps it running

Closes #10198

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 16:24:55 +01:00
Andras BacsaiandClaude Opus 5.5 6cda6f6dd7 fix(cloudflare): retry Cloudflare API connection failures and show a clear error
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 16:20:39 +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 BacsaiandClaude Opus 5.5 56af27d46f fix(git): skip Git LFS downloads when Git LFS is disabled
Closes #10360

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 15:51:26 +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 BacsaiandClaude Opus 5.5 086dbb8b1e fix(terminal): try every XSRF-TOKEN cookie when authenticating
A Laravel app on a sibling subdomain with SESSION_DOMAIN=.example.com sets
a second XSRF-TOKEN cookie that the browser also sends to Coolify. The
terminal server forwarded only the first one, so Laravel answered 419 and
the terminal closed with 4401. Try each distinct token (at most five) and
keep the accepted one for the requests that follow on the connection.

Closes #10397

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 15:39:45 +01:00