7215 Commits
Author SHA1 Message Date
peaklabs-dev 32574d76b1 Merge remote-tracking branch 'origin/main' into next 2026-11-02 16:12:51 +01:00
Andras BacsaiandClaude Opus 5.5 6ef29c64a1 fix(cdn): block releases sync before the current release is published
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 14:57:48 +01:00
Andras BacsaiandClaude Opus 5.5 5cf1abc0fc fix(env): keep pre-upgrade values for legacy compose variables
Closes #12408

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 14:49:11 +01:00
Andras BacsaiandClaude Opus 5.5 bc855fdc68 fix(transfer): resolve IPv6-only server host names
The domain check of the transfer checklist resolved the server host name
with gethostbynamel(), which returns IPv4 only, so a domain that points to
an IPv6-only server was reported as pointing to another address. Resolve A
and AAAA records and compare normalized addresses. The Cloud SSH probe now
also resolves AAAA records when a host name has no A record.

Closes #12397

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 14:46:19 +01:00
Andras BacsaiandClaude Opus 5.5 1af7de8a85 fix(backups): pin a reachable IP for S3 uploads on IPv6-only servers
mc keeps one --resolve IP per host, and Coolify always pinned the IPv4
address of a dual-stack endpoint. On servers without IPv4, uploads failed
with "network is unreachable". A helper container on the upload network
now connects to each validated IP, IPv4 first, and the first IP that
connects is pinned. S3 restores are now pinned in the same way.

Closes #12397

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 14:38:49 +01:00
Andras BacsaiandClaude Opus 5.5 6c650dd127 fix(api): document request bodies for shared env create and update endpoints
Closes #12395

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 14:33:29 +01:00
Andras BacsaiandClaude Opus 5.5 be7a997541 fix(metrics): stop unreachable servers from blocking web workers
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 14:31:26 +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
Andras BacsaiandClaude Opus 5.5 dbd211486b fix(backups): let service databases choose the databases to back up
Closes #12432

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 13:59:53 +01:00
Andras Bacsai 33a6682791 fix(backups): keep non-deployment helper containers during cleanup
Closes #12431
2026-11-02 13:59:29 +01:00
Andras BacsaiandClaude Opus 5.5 31653c27d1 fix(clone): add Compose labels to cloned volumes
Closes #12429

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 13:59:22 +01:00
Andras BacsaiandClaude Opus 5.5 51029aa8b9 fix(new-resource): accept a base directory without a leading slash
Closes #12428

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 13:58:15 +01:00
peaklabs-dev 0b95c30c45 fix(mcp): require deploy ability for registry check 2026-11-02 01:04:31 +01:00
peaklabs-dev 6c17c29925 Merge remote-tracking branch 'origin/main' into next 2026-11-02 01:01:41 +01:00
peaklabs-dev bcd165a909 feat(install): add --preview and --nightly flags to install.sh
- Once Coolify is healthy, install.sh switches the instance to that update channel with php artisan app:update-channel
- The command and the update page share the rule that keeps the updates of the old channel after a switch to a more stable one
2026-11-02 00:07:20 +01:00
peaklabs-dev 0e30950793 feat(release): streamline versions.json on the CDN
- Every channel has a block of its own, every version after this one reads only these blocks
- Every stable sync also fills the coolify and traefik keys older instances read
- An instance keeps a copy of versions.json and reads upstream.json of the image until it has one
2026-11-02 00:07:20 +01:00
peaklabs-dev 8d1776bdcf chore: remove Windows support
- Removes coolify-testing-host.yml too, it published the testing host to Docker Hub for docker-compose.windows.yml alone, the development setup builds it locally
2026-11-02 00:04:49 +01:00
peaklabs-dev a608a37d8b feat: add update settings to the instance settings
- Adds the channels stable, preview, nightly and custom
- Preview and nightly read /coolify/release.json on the CDN and take the newest version of their channel and the more stable ones, nightly gets a new build of next or the release branch twice a day
- Custom installs any image tag of ghcr.io by hand, such as pr-1234 for the build of pull request 1234
- After a switch to a more stable channel, the instance keeps the updates of the channel it left until the stable release of its version is out
- The local versions.json moves to storage/app and is replaced in one step, a channel change replaces it without the version of the old channel
2026-11-02 00:04:26 +01:00
peaklabs-dev 06ad71439c build: move the helper image to coollabsio/coolify-helper
- Docker Compose builds the development helper from the main branch of that repository, scripts/dev-helper from there or from a local checkout
- Remove buildHelperImage from the settings, nothing calls it since its button was removed
2026-11-02 00:03:45 +01:00
Andras Bacsai faf0b6fac4 fix(runners): preserve unsaved settings during Sysbox checks
Move Sysbox checks and installation into a lazy Livewire component so its requests do not reset the runner form's unsaved state. Update tests to cover the separate component.
2026-11-01 21:03:26 +01:00
Andras Bacsai 23eebbf2ad fix(servers): refresh provider status with server details action 2026-11-01 15:49:13 +01:00
Andras BacsaiandClaude Opus 5.5 868c0f06bf fix(api): require deploy ability for registry check and logout
Align the registry check and logout endpoints with the registry login endpoint.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 15:46:52 +01:00
peaklabs-dev 7560d0745d feat(release): add sync-cdn.sh to sync a release to the CDN
- Replaces php artisan sync:cdn and its sync:cdn task in scripts/run
- --purge clears the Cloudflare cache sooner than the 10 minutes it keeps a file, with the token and zone from the environment or .env
2026-11-01 15:13:43 +01:00
Aditya Tripathi 157f3e0fae perf(metrics): fetch Fleet Metrics of all servers at the same time (#12389) 2026-10-30 17:53:15 +01:00
Andras Bacsai 091654ce7f feat(access): set member grants when inviting 2026-10-30 16:41:30 +01:00
Andras Bacsai 6f1905b7b0 fix(access): enforce member grants on more actions
- Require write access on the target environment to clone or move a resource
- Check read access on shared variables before a reference is added or resolved
- Limit team credentials, git sources, and imports of other backups to team-wide writers
- Require the delete level for backup, volume, storage, and task deletes
- Require create access for previews, new projects, and git sources
- Use the token team for the access scope, and check team-wide access on Livewire updates
- Require instance admin to toggle the API and MCP server
- Hide server pickers and broadcast details from members without access
2026-10-30 16:11:10 +01:00
Andras BacsaiandClaude Opus 5.5 3fac00e61b fix(api-tokens): list only scopes the member can give a token
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 15:17:37 +01:00
Andras Bacsai fb854a7cff fix(access): hide shared variables and actions that a member cannot use
- Check read access on the project or environment for shared variables
  pages, the canvas, and the sidebar, not only navigation access
- Require team-wide read for the server shared variables canvas API
- Open the environment variable editor read-only when the value is hidden
- Show the integration tokens button only to users who can open it
- Show disabled confirmation buttons as disabled, not as danger buttons
2026-10-30 15:14:02 +01:00
Andras Bacsai cdff76a9b5 feat(api-tokens): keep issued tokens visible and improve scope selection 2026-10-30 14:27:58 +01:00
Andras Bacsai 18c5cf506b feat(api-tokens): edit a token in a modal that opens without a request 2026-10-30 14:27:58 +01:00
Andras BacsaiandClaude Opus 5.5 548dec65b7 feat(api-tokens): warn 7 days before a token expires
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 14:27:58 +01:00
Andras BacsaiandClaude Opus 5.5 5116a93f42 feat(api): add DNS, integration token and secret manager management (#12374)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 13:37:32 +01:00
Andras BacsaiandClaude Opus 5.5 76b89fa8e9 feat(api-tokens): edit token access and pause or resume tokens (#12396)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 13:20:19 +01:00
Andras BacsaiandClaude Opus 5.5 263eab5d27 feat(api-tokens): roll a token to replace its secret
Keep the description, permissions, scopes, and expiry. Move the row actions into a dropdown menu and measure the dropdown panel after it is shown, so menus at the right edge stay on screen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 13:06:43 +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 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
github-actions[bot] 82764c6d79 Merge remote-tracking branch 'origin/main' into next 2026-10-29 22:37:14 +00: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 Bacsai ca6eb20a38 Merge remote-tracking branch 'origin/main' into origin/next
# Conflicts:
#	app/Livewire/Dashboard.php
#	app/Livewire/Dashboard/ActiveDeployments.php
#	resources/views/livewire/team/member.blade.php
#	tests/Feature/Security/PrivateKeyServerLookupTest.php
2026-10-29 21:20:31 +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 28c5af9b18 fix(avatar): change avatar URL when an existing avatar is replaced 2026-10-29 19:06:11 +01:00
340de2684f chore: merge main into next (#12371)
Co-authored-by: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 19:02:19 +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 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