875 Commits
Author SHA1 Message Date
Andras Bacsai c75e7078b7 fix(access): restrict preview changes, rollbacks, and repo URL updates
- Require the write permission and update policy to open a preview or
  change its pull request URL, git type, or docker tag via the API;
  deploy-only tokens can only redeploy an existing preview
- Reject rollbacks to commits that are neither a listed rollback image
  nor a successful production deployment (GetRollbackImages::allows)
- Validate git_repository with ValidGitRepositoryUrl when it changes on
  application update
- Add RejectPublishedAppKey global middleware
- Show a "still starting" message when the root setup window is pending
- Document the new 403 responses and constraints in the OpenAPI spec
- Add tests for the new checks
2026-11-08 17:26:34 +01:00
033f0c84da v4.7 (#12478)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com>
Co-authored-by: Aditya Tripathi <aditya@climactic.co>
2026-11-06 14:25:02 +01:00
Andras BacsaiandClaude Opus 5.5 e7e952fcad fix(deploy): keep preview and build server hosts out of build --add-host
Preview containers (-pr-<id>) came and went with pull requests and
invalidated the build cache of every app on the network. A build server
got the IPs of the deployment server network, which it cannot reach.
Add a per-app setting to turn off network hosts during the build.

Closes #12452

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 23:34:53 +01:00
Andras BacsaiandClaude Opus 5.5 6ab538d0f1 fix(deploy): keep short-lived containers out of build --add-host
BuildKit keys every RUN step on the --add-host names, so a container
that joins or leaves the network between two builds rebuilt all layers.
Leave out database backup and S3 import helpers, Sentinel, and the
proxy error page container.

Closes #12452

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 11:31:49 +01:00
Andras Bacsai d09480973e fix(previews): give each Compose preview its own project name
Closes #9014
2026-11-03 23:20:52 +01:00
Andras Bacsai e0b94662e9 fix(deployments): apply the concurrent build limit of build servers
The queue counted every running deployment against the deployment server,
and the job picked a build server at random. So the deployment server
limit capped builds on build servers, and the build server limit was
never read. Count each build on the server that runs it, reserve a build
server with a free slot when the deployment starts, and start waiting
deployments of other servers when a build server slot is freed.

Closes #7649
2026-11-03 22:16:14 +01:00
Andras Bacsai 4b9fe035dc fix(deployment): trust the server CA bundle in the helper container
BuildKit lets the Docker CLI in the helper fetch the registry token, and
the helper trusts only its own CAs. Behind a TLS-inspecting proxy, builds
failed with x509 errors although the server trusts the proxy CA. Mount
the server CA bundle read-only into the helper.

Closes #7568
2026-11-03 22:15:06 +01:00
Andras BacsaiandClaude Opus 5.5 780d67ccbb fix(storage): stop a deleted volume from coming back after a redeploy
Docker Compose gives a recreated container the old mount at each path
that the image declares with VOLUME, also a volume deleted in Coolify.
Before `up`, remove only containers that still mount a Coolify volume
whose storage entry was deleted. The stale volume delete dialog now
warns when a container still uses the volume.

Closes #6875

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 22:01:54 +01:00
Andras BacsaiandClaude Opus 5.5 d6405d5545 fix(deployment): remove the helper container before restarting it with the same name
Docker frees the name of a stopped --rm container in the background, so
the second helper docker run for build secrets could fail with a name
conflict. Remove the old helper with docker rm -f before the run.

Closes #9363

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 20:31:55 +01:00
Andras BacsaiandClaude Opus 5.5 8c6774e17f fix(deploy): keep the helper Docker CLI on its buildx plugin
A build-time HOME or DOCKER_CONFIG variable moved the Docker CLI in the
helper away from /root/.docker/cli-plugins, so BuildKit builds failed with
"buildx component is missing or broken". Force DOCKER_CONFIG=/root/.docker
for the build command and for the helper when build secrets are passed.

Closes #9726

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 20:31:16 +01:00
Andras BacsaiandClaude Opus 5.5 71814b4541 fix(deployment): use one COOLIFY_BRANCH value for preview deployments
A preview deployment set COOLIFY_BRANCH in three places with three
values: the Compose shell variables used the application branch
(main), the Compose parser used pull/<id>/head, and other build packs
used the fetched refspec (pull/<id>/head:pr-<id>-coolify) or the
application branch. A variable that refers to ${COOLIFY_BRANCH} then
got a different value than the container. All paths now use
Application::coolifyBranch(), which gives pull/<id>/head for previews
and git_branch for production deployments.

Closes #9572

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 20:25:28 +01:00
Andras BacsaiandClaude Opus 5.5 bb6dfd147e fix(mcp): queue MCP deployments behind a deployment in progress
The MCP deploy tool and control start skipped the deployment queue, so
two rolling updates of one application could run at once and remove the
new container of each other. A rolling update now also removes only the
containers that ran before it started.

Closes #12442

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 18:12:58 +01:00
Andras Bacsai cf1e0e70c5 feat(deployments): cancel superseded deployments when a newer one is queued 2026-11-03 14:31:52 +01:00
Andras Bacsai 37b4a8b4e7 fix(mcp): keep the deployment source on additional servers and audit MCP calls as MCP 2026-11-03 14:00:17 +01:00
peaklabs-dev 32574d76b1 Merge remote-tracking branch 'origin/main' into next 2026-11-02 16:12:51 +01:00
Andras BacsaiandClaude Opus 5.5 972ab7f6f4 fix(deployments): keep build secret values out of Compose runtime
Unset the helper's build secret variables before Compose pulls or starts
services, so containers get the runtime .env values. Give build secrets
the raw stored value instead of the quoted .env form.

Closes #12409

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 14:22:47 +01:00
Andras BacsaiandClaude Opus 5.5 b9ad48e104 fix(deployments): pass port-suffixed compose service URL variables
Docker Compose applications dropped the stored SERVICE_URL_<NAME>_<PORT> and SERVICE_FQDN_<NAME>_<PORT> variables and only generated the forms without a port, so compose references to them were blank. Generate the port-suffixed forms from the current domain for runtime and build-time, production and preview deployments.

Closes #12427

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 14:02:19 +01:00
github-actions[bot] edee5ccfd6 Merge remote-tracking branch 'origin/main' into next 2026-10-30 11:16:06 +00: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
b85a9197a1 chore: merge main into next (#12382)
Co-authored-by: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 21:10:39 +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
github-actions[bot] d22f75ae0b Merge remote-tracking branch 'origin/main' into next 2026-10-28 14:08:14 +00:00
Andras Bacsai bc61f4860f fix(railpack): serialize builder bootstrap before builds 2026-10-28 15:00:59 +01:00
github-actions[bot] 9d0b6a5054 Merge remote-tracking branch 'origin/main' into next 2026-10-28 13:28:51 +00: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
github-actions[bot] 71f1c33bf1 Merge remote-tracking branch 'origin/main' into next 2026-10-28 11:27:20 +00: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
62b2a99a70 chore: merge main into next (#12351)
Co-authored-by: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com>
Co-authored-by: Aditya Tripathi <aditya@climactic.co>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 22:25:43 +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 Bacsai adcb182a8a fix(deployments): report Compose files with no parsed services 2026-10-27 15:06:17 +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
github-actions[bot] 04452b4b63 Merge remote-tracking branch 'origin/main' into next 2026-10-26 15:07:08 +00:00
github-actions[bot] b2d2e5898d Merge remote-tracking branch 'origin/main' into next 2026-10-26 13:58:06 +00: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 BacsaiandClaude Opus 5.5 e200927ffd fix(healthcheck): replace the Dockerfile HEALTHCHECK when the healthcheck is enabled
Closes #10974

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 13:08:48 +01:00
Andras BacsaiandClaude Opus 5.5 e822db4e71 fix(previews): build the PR commit on manual Bitbucket preview redeploys
Bitbucket Cloud has no pull request refs over git, so a redeploy without
a webhook commit checked out the base branch. Reuse the latest known
commit of the pull request, or fail the deployment when none is known.

Closes #10806

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 13:07:55 +01:00
github-actions[bot] 355e2f96e4 Merge remote-tracking branch 'origin/main' into next 2026-10-26 12:02:58 +00:00
Andras Bacsai 1017a5b307 fix(deploy): use SSH user registry credentials for host image pulls (#12216) 2026-10-26 13:00:06 +01:00
Andras Bacsai da3e98eff3 Merge remote-tracking branch 'origin/main' 2026-10-26 12:59:04 +01:00
Andras BacsaiandClaude Opus 5.5 d6c4e773b9 feat(deployments): skip the compose build when the images match the build inputs
Compose deployments label each built image with a fingerprint of the build
settings and the resolved build-time variables. A deploy or restart reuses the
commit images when every label matches, so a runtime-only change does not
rebuild.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 12:58:01 +01:00
Andras BacsaiandClaude Opus 5.5 a3843730f8 fix(deployments): rebuild when a build secret value changes
Docker ignores secret values for the build cache, so the
COOLIFY_BUILD_SECRETS_HASH secret mount never invalidated it. Pass the
hash as a build arg and declare it in each stage instead.

Parse Dockerfile instructions so ARG lines and secret mounts are not
added inside heredoc bodies or continuation lines.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 12:56:31 +01:00
Andras Bacsai afde2cb471 fix(deployments): write generated compose file after image build (#12331) 2026-10-26 12:45:36 +01:00
Andras Bacsai 2be4f259b8 Merge remote-tracking branch 'origin/main' into automation/sync-main-to-next 2026-10-26 12:41:43 +01:00
Andras Bacsai 8eb33ddf31 Merge remote-tracking branch 'origin/next' into automation/sync-main-to-next 2026-10-26 12:12:20 +01:00
Andras Bacsai 7b83fa72eb feat(git): add HTTPS credentials for private repositories on custom Git hosts (#12328) 2026-10-26 10:50:24 +01:00
Andras Bacsai eeca882b82 fix(deployments): write regular deployment files when the repository has symlinks (#12324) 2026-10-26 10:03:14 +01:00
Andras BacsaiandClaude Opus 5.5 3f3fa1d758 fix(previews): deploy previews with their own environment variables (#12325)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 09:55:44 +01:00
Andras Bacsai ddeb05280e fix(deployments): prevent Git fetches from hanging (#12321) 2026-10-26 09:33:37 +01:00
Andras Bacsai 26814e2a94 fix(deployments): strip paths and ports from COOLIFY_FQDN in env files (#12245) 2026-10-26 07:59:34 +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