Commit Graph
18771 Commits
Author SHA1 Message Date
Andras Bacsai c8497912ba fix(terminal): turn off the idle limit by default
A long command without output (for example pg_restore) was ended after 30 minutes.
Sessions still end on lost access and at the maximum duration.
2026-11-06 13:44:03 +01:00
Andras Bacsai d5ac1ba27e fix(storage): require a saved SFTP host key, saved only by an admin validation
- Restores, downloads, and the import check refuse an SFTP storage without a saved host key.
- Only Validate, Save, Create, and the API validate endpoint save a new key; backup and
  revalidation jobs do not.
- An endpoint change or a host key reset marks the storage unusable.
- Save the key only when the endpoint did not change during the connection test.
2026-11-06 13:44:03 +01:00
Andras Bacsai 136e76abc2 fix(github): sync GitHub Deployments after bulk status changes, off the deploy queue
- Queue a status sync for deployments that Init, fail_undispatchable_deployment, and
  superseded cancels change with a query update, so GitHub does not show them as
  in progress forever.
- Run SyncGithubDeploymentJob on the default queue with 10 s GitHub request timeouts
  and a 100 s job timeout, so a slow GitHub cannot delay deployments.
2026-11-06 13:44:03 +01:00
Andras Bacsai 01df5fff95 fix(image-scan): let the deploy gate wait for a running background scan
The gate treated a busy server scan lock as a scan error after 120 s, so a gated
deploy with Block failed while another scan ran. It now waits in steps, bounded by the
deployment job timeout, and still honors a cancel. The lock TTL now covers the sum
of the scan step timeouts.
2026-11-06 13:44:03 +01:00
Andras Bacsai 06ff1e1e31 fix(email): keep saved provider on failed switch, fall back to SMTP sender for Resend
- Restore the saved SMTP/Resend flags when a provider switch fails validation, so a
  later event toggle cannot save a half-configured Resend (team and instance pages).
- Resend uses smtp_from_* when resend_from_* is blank, as before the Resend sender fields.
- Require the Resend sender only when Resend is enabled.
- Replace wire:confirm in the SMTP server picker with x-modal-confirmation.
2026-11-06 13:44:03 +01:00
Andras Bacsai 7c348d6239 Merge remote-tracking branch 'origin/main' into next
# Conflicts:
#	app/Livewire/Project/Resource/Create.php
2026-11-06 12:45:11 +01:00
Andras Bacsai b7dc2e435b feat(database): default new Redis databases to the Valkey image
Change the standalone_redis image column default to
valkey/valkey:9-alpine. Existing databases keep their current image.
Update the API docs, OpenAPI specs and image helper text to name Valkey
as the default and redis:8 as the Redis example.

Also restyle the status badges and database image cards on the new
resource page.
2026-11-06 12:44:00 +01:00
Andras Bacsai e540a1a978 Merge remote-tracking branch 'origin/main' into next 2026-11-06 12:43:10 +01:00
Andras Bacsai 1703265353 feat(image-scan): manage image scanning and read scan results via API and MCP 2026-11-06 12:41:09 +01:00
Andras Bacsai 145569bea6 fix(db): bump Supabase and PostGIS default images
Supabase PostgreSQL 17.4.1.032 -> 17.11.0.018, PostGIS 17-3.5-alpine -> 18-3.7-alpine.
2026-11-06 12:39:53 +01:00
Andras BacsaiandClaude Opus 5.5 813bc72af4 fix(ui): shorten database descriptions on the new resource page
The PostgreSQL, MongoDB, and ClickHouse descriptions were cut off.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 12:37:36 +01:00
Andras BacsaiandClaude Opus 5.5 52d7d88fd6 docs(api): document Valkey images for Redis databases
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 12:37:36 +01:00
Andras BacsaiandClaude Opus 5.5 41877198b3 feat(database): offer Valkey as an image of the Redis database type
When a user creates a Redis database, a new step asks for Redis 7.2
(default) or Valkey 9. Valkey uses the same binaries (redis-* symlinks),
config, and data format, so the Redis start action runs it unchanged.
The UI now names the type "Redis / Valkey" and shows a combined logo,
and global search accepts "new valkey".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 12:37:36 +01:00
Andras BacsaiandClaude Opus 5.5 878d77bd66 fix(database): make the Redis health check ping with the password
The check was [CMD-SHELL, redis-cli, ping], so Docker ran only redis-cli
and it always passed. redis-cli also exits 0 on NOAUTH and LOADING.
The check now pings with the server password and requires PONG. With a
custom redis.conf that sets its own requirepass, it requires PONG or NOAUTH.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 12:37:36 +01:00
Andras BacsaiandClaude Opus 5.5 5960814df5 fix(ui): match deploy canvas card border to resource tiles
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 12:24:59 +01:00
Andras BacsaiandClaude Opus 5.5 91d233be59 feat(ui): add list view to the new resource page
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 12:18:37 +01:00
Andras BacsaiandClaude Opus 5.5 106a6d7ac0 fix(env): resolve and redact server-scoped shared variables in compose
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 12:16:39 +01:00
Andras Bacsai 7bab8f76ad Merge remote-tracking branch 'origin/main' into next 2026-11-06 12:08:06 +01:00
Andras Bacsai a5c3ca0b73 feat(updates): notify on automatic update start, failure, and finish (#12472) 2026-11-06 11:52:44 +01:00
Andras BacsaiandClaude Opus 5.5 00d0b4be1d fix(ui): add coolify.io ref to integration token provider links
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 11:28:15 +01:00
Andras BacsaiandClaude Opus 5.5 693cf0486d fix(ui): link secret manager token forms to their provider dashboards
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 11:22:49 +01:00
Andras BacsaiandClaude Opus 5.5 bd499de1fb feat(ui): add UI scale option to appearance settings
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 11:18:33 +01:00
Andras Bacsai c8c639e3d6 fix(realtime): keep Reverb handshake under its size limit with large cookie headers
Raise the Reverb max request size and store the remembered list view
cookies unencrypted, so the WebSocket handshake no longer fails with 413
and live updates (like proxy restart logs) reach the browser.
2026-11-06 11:01:06 +01:00
Andras BacsaiandClaude Opus 5.5 b12c965fbe fix(ui): use bare status badges and show backup S3 storage as plain text
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 10:49:21 +01:00
Andras BacsaiandClaude Opus 5.5 ba966846e1 fix(ui): show relative start time with exact date tooltip in service backup executions
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 10:39:28 +01:00
Andras BacsaiandClaude Opus 5.5 3115980c77 fix(ui): copy service backup path and show S3 badge only for runs stored in S3
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 10:38:49 +01:00
Andras BacsaiandClaude Opus 5.5 7fbc5d7797 fix(ui): align service backup tables and sort executions by column
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 10:38:18 +01:00
Aditya TripathiandAndras Bacsai 3c33f61d7b feat(image-scan): container image vulnerability scanning with a security status per resource (#12377)
Co-authored-by: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com>
2026-11-06 10:31:27 +01:00
Andras Bacsai 0db8f60bdd feat(storage): add SFTP, FTPS, and WebDAV backup destinations (#12417) 2026-11-06 10:28:30 +01:00
cdc45e5736 fix: merge fixes-next into next (security hardening and fixes) (#12460)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com>
2026-11-06 10:18:19 +01:00
Andras BacsaiandClaude Opus 5.5 70adcc2b0e feat(databases): use newer default images for standalone databases
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 09:46:01 +01:00
Andras BacsaiandClaude Opus 5.5 3379fa448a fix(audit): keep personal data and credentials out of audit events
Anonymize the audit events of a deleted user, store only the ID and
name of other users, and drop the metadata copy of actor_email.
Store URLs without query strings, registries without user info, and
the exception class instead of raw SSH errors.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 09:31:44 +01:00
Andras BacsaiandClaude Opus 5.5 b7d0e6be2a fix(audit): stop duplicate and empty audit rows
- Set env var version and compose parsing version while creating, so a create writes one row
- Record no rows for the auto-created preview copy of an env var
- Record env and application API updates only with the fields that really changed
- Store no change data for new env vars, and null for empty change data
- Store metadata team_id as an integer
- Drop the unused level and resource indexes of audit_events

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 23:49:17 +01:00
Andras Bacsai 13298591d8 fix(api): throttle API clients that keep failing and notify the token's team
- Return 429 after 30 failed (401/403/404) requests per minute for one
  token or IP, also for unknown API routes (API_FAILED_REQUEST_RATE_LIMIT)
- Notify the team once a day when a token reaches the limit
- Deduplicate ability_denied and scope_denied audit events for 5 minutes
2026-11-05 23:38:37 +01:00
Andras BacsaiandClaude Opus 5.5 0e01f2149c fix(sentinel): send Retry-After for unreachable servers and invalid tokens
- Send Retry-After: 300 when the server is not functional
- Send Retry-After: 3600 when the push token cannot be decrypted

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 23:36:35 +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 5c34a1b3d4 fix(sentinel): stop rejected Sentinel pushes and reduce their audit rows
- Reply 410 for deleted servers and 402 for unpaid teams, with Retry-After
- Remove the Sentinel container of unpaid servers once a day, and before a server is deleted
- Record server_not_found and subscription_unpaid push failures once per hour
- Audit scheduled task API updates only for fields that really changed

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 23:19:14 +01:00
Andras BacsaiandClaude Opus 5.5 9a6cc8316e fix(horizon): route Sentinel push jobs to a dedicated cloud sentinel queue
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 22:49:56 +01:00
Andras Bacsai a58588faa0 feat(gitea): support Forgejo and Codeberg in the Gitea App source 2026-11-05 13:20:03 +01:00
Andras BacsaiandClaude Opus 5.5 19762a7950 fix(ui): keep volume data checkboxes next to their labels
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 12:56:03 +01:00
Andras Bacsai 30a8e3357a fix(server): refresh the server page after background validation
ServerValidated and ServerPatchCheckFinished used broadcastAs(), so Echo
listeners without a leading dot never matched them. Close the validation
dialog that a background job opened when the job finishes.
2026-11-05 12:53:54 +01:00
Andras BacsaiandClaude Opus 5.5 4a1228c611 feat(scheduled-tasks): disable tasks that keep failing
Disable a scheduled task after at least 5 failed runs in a row with no
success for 3 days, notify the team, and show the reason on the task page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 12:17:49 +01:00
Andras BacsaiandClaude Opus 5.5 f7867923b7 feat(email): add named SMTP servers, provider templates, Resend sender (#12471)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 11:38:17 +01:00
Andras BacsaiandClaude Opus 5.5 bf4b6ad921 feat(github): sync deployment status to GitHub Deployments (#12451)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 11:37:10 +01:00
Andras Bacsai cc996a1d9f fix(api): accept gitea_app_uuid when creating and updating applications
Add gitea_app_uuid to the allowed fields for application create and
update endpoints, with string validation on update, so Gitea App
sources can be set through the API.

Add a test checking that a closed GitLab merge request on the manual
webhook closes the matching preview and loads only applications of
that repository.
2026-11-05 11:32:50 +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 BacsaiandClaude Opus 5.5 05e52fc41d fix(compose): keep dotted service names literal and validate service names
Updating the image of a service named like "api.test" wrote a nested
"test" key into the "api" service, because data_get/data_set split the
name on dots. Use array key paths instead. Also refuse service names that
Docker cannot use as a container name prefix, with a clear error on save.

Closes #12456

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 11:31:47 +01:00
Andras BacsaiandClaude Opus 5.5 32541a32ce fix(api): validate resource names and descriptions like the UI
The API and MCP saved names and descriptions that the UI rejects, so the
resource could not be saved in the UI after that. Applications, services,
databases, servers, and private keys now use the UI name and description
rules on create and update, with the UI error messages.

Closes #12466

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 11:29:05 +01:00
Andras BacsaiandClaude Opus 5.5 3bc82eb71d feat(api): add Gitea App endpoints for sources and applications
Add GET /gitea-apps, POST /applications/private-gitea-app, and
gitea_app_uuid in PATCH /applications/{uuid}, with OpenAPI docs and MCP tool support.

Closes #12459

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 11:27:24 +01:00
Andras BacsaiandClaude Opus 5.5 4bdf03db69 fix(keys): generate 4096-bit RSA keys
GitHub rejects new RSA SSH keys smaller than 3072 bits, and phpseclib
made 2048-bit keys by default, so new RSA deploy keys from Coolify
could not authenticate.

Closes #12461

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 11:26:31 +01:00