Commit Graph
17733 Commits
Author SHA1 Message Date
Andras Bacsai 2882fc128d ci(release): publish multiarch dev images for release branches
Build release/vX.Y pushes for amd64 and aarch64, then publish
X.Y-dev.<short-sha> and moving X.Y-dev tags to GHCR and Docker Hub.
Report build status to Discord and document the release branch tags.
2026-10-07 19:40:42 +02:00
Andras Bacsai 8ae3b9152c docs(release): replace next branch with per-minor release branches
Update feature PR targets and RC, stable, and hotfix flows to use
release/v4.x branches. Document branch rotation after stable minor
releases while retaining the next Docker image tag.
2026-10-07 19:32:02 +02:00
Andras Bacsai f412e70634 fix(terminal): list lazily loaded containers in the resource terminal picker
The container picker read its options from an Alpine x-data snapshot taken
on the first render, before wire:init loaded the containers. Livewire keeps
the Alpine state when it morphs, so resources with multiple containers
showed an empty picker. Publish the options as a Livewire property and
entangle them in Alpine.

Closes #12110
2026-10-07 17:59:29 +02:00
Andras BacsaiandClaude Opus 5.5 d6a36c068f fix(navbar): remove truncated page search hint from search button
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 17:59:10 +02:00
Andras Bacsai 1abcd3dad8 fix(forms): reduce listbox trigger height to 2rem 2026-10-07 16:57:50 +02:00
Andras Bacsai 710f236c70 fix(dev): use main branch for default example repository URLs 2026-10-07 16:53:47 +02:00
Andras Bacsai 5db069109a chore(release): bump Coolify version to 4.4.3 2026-10-07 16:48:01 +02:00
Andras Bacsai e0639a8e6d fix(applications): normalize nested base64 custom labels (#11473) 2026-10-07 16:44:59 +02:00
Andras Bacsai 76d3386a4d refactor(forms): unify searchable and multi-select listboxes
Replace datalist and searchable-listbox components with the shared listbox and migrate form fields.

Deduplicate superseded Livewire updates to prevent repeated array update hooks, with regression coverage.
v4.4.2
2026-10-07 15:37:03 +02:00
Andras Bacsai 0bf7719491 feat(cloudflared): add tunnel updates with background container restart
Add an authorized update button with activity logs to pull the latest image and recreate the tunnel container in the background.

Persist new Compose files under /data/coolify/cloudflared and support existing /tmp configurations. Cover updates, missing configuration, and member restrictions with tests.
2026-10-07 14:54:17 +02:00
Andras Bacsai c204b500a1 Merge remote-tracking branch 'origin/main' 2026-10-07 14:32:38 +02:00
Andras Bacsai 88ea322e1c fix(cloudflared): allow more time for tunnel startup 2026-10-07 14:32:21 +02:00
Brandon BridgesandAndras Bacsai c728089804 fix(deploy): keep build helper containers out of --add-host (#11781)
Co-authored-by: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com>
2026-10-07 14:27:11 +02:00
Andras Bacsai a6655fe992 fix(traffic): merge overflow paths and distinguish rows by domain
Combine Sentinel overflow rows into one unlinked "Other paths" row.
Show domains beside paths and include them in Livewire row keys.
Add regression coverage for overflow aggregation across app keys.
2026-10-07 13:40:02 +02:00
Andras Bacsai d08c082d07 Merge remote-tracking branch 'origin/main' 2026-10-07 13:31:27 +02:00
Andras Bacsai 81045b2dc2 fix(compose): deploy large Compose files such as Sentry self-hosted
Sentry self-hosted (getsentry/self-hosted 26.8.0) could not be deployed
as a Docker Compose application. Three separate problems blocked it:

- YAML collection aliases: the first fix raised the limit to 256 only in
  Application::oldRawParser(). The safety check added in v4.4.0
  (validateDockerComposeForInjection) and all other Compose parse calls
  still used the Symfony default of 128, so the Sentry file (133 aliases)
  failed with "Maximum number of collection aliases (128) exceeded".
  Add parseDockerComposeYaml() and use it for every Compose parse.
- Argument list too long: the deployment job sent the generated Compose
  file as base64 inside the SSH command. Linux limits one argument to
  128 KiB, and the Sentry file is about 370 KB. execute_remote_command()
  now accepts an 'input' key that streams content over SSH stdin, and
  the job writes the Compose file with it.
- A list-style build arg without a value (build.args: [SENTRY_IMAGE])
  merged into a map environment kept its numeric key, so Docker Compose
  rejected the file with "non-string key in ...environment: 0". It now
  becomes NAME with no value, as in Compose.

Closes #11725
2026-10-07 13:30:42 +02:00
Andras Bacsai 522ed390ce feat(search): add settings search to the command palette (#12111) 2026-10-07 13:24:21 +02:00
Andras Bacsai 38861e1394 feat(github-runners): support deployment and build servers (#12109) 2026-10-07 12:45:08 +02:00
Andras Bacsai 8319ae7397 Merge remote-tracking branch 'origin/main' 2026-10-07 12:44:37 +02:00
Andras Bacsai 575bfaa085 feat(analytics): add configurable client IP storage modes
Allow full, anonymized, or disabled IP recording per server through the UI
and API, and pass the selected mode to Sentinel. Adapt traffic breakdowns
to the effective IP mode, including views that aggregate multiple servers.
2026-10-07 12:35:22 +02:00
Andras Bacsai c9cce7ea2b fix(traffic): show geo globe when country data becomes available (#12108) 2026-10-07 12:28:59 +02:00
Andras Bacsai 7d17c6ff8b fix(domains): skip favicons for private network hosts (#12107) 2026-10-07 12:28:48 +02:00
Andras Bacsai 49b954efa2 chore(versions): bump coolify to 4.4.2 2026-10-07 12:20:24 +02:00
Andras Bacsai 1ec39fc816 docs(readme): remove PetroSky Cloud from big sponsors 2026-10-07 09:55:59 +02:00
Andras Bacsai 407c384b09 feat(backups): add configurable missing volume backup alerts
Check enabled volume backup schedules hourly and notify teams when no
execution occurs within the configured number of days. Expose the alert
threshold in the UI and API, with alerts disabled by default.

Route volume backup results and warnings to the appropriate Telegram
backup threads.
v4.4.1
2026-10-07 09:37:35 +02:00
Andras Bacsai 58db0eba6f feat(backups): notify teams of volume backup results
Send success and failure notifications through enabled backup channels.
Route successful backups with warnings through failure channels.
2026-10-07 09:24:10 +02:00
Andras Bacsai d54c03730d feat(scheduler): make scheduled job dispatch mode configurable
Default to sequential dispatch on self-hosted instances and concurrent
per-type dispatch on Coolify Cloud. Allow SCHEDULED_JOBS_DISPATCH_MODE
to override the default, falling back for invalid values.

Cover defaults, overrides, and fallback behavior in scheduler tests.
2026-10-06 23:16:40 +02:00
Andras Bacsai cd70dbf03a chore(versions): bump sentinel to 1.0.2 and pin sentinel-host image 2026-10-06 22:42:59 +02:00
Andras Bacsai 393dcbb6cd fix(logs): wrap viewer in a root element for parent re-renders 2026-10-06 22:09:27 +02:00
Andras Bacsai 56497d50cf fix(deployments): include scheduled jobs in progress checks
Count running scheduled tasks, database backups, and volume backups,
excluding runs older than their job timeout. Report scheduled job counts
and keep the progress check active while any scheduled jobs are running.
2026-10-06 21:59:16 +02:00
Andras Bacsai be72005980 fix(deployments): expire missing Horizon jobs after deployment timeout
Keep reserved jobs active and bound missing Horizon records by the server's
 deployment timeout. Add regression coverage for active and finished jobs.

Use UTC PostgreSQL sessions and bump the release version to 4.4.1.
2026-10-06 21:51:58 +02:00
Andras Bacsai 41ed5b7a69 test: fix stale and flaky tests
- Update tests whose expectations no longer matched intended changes
  (GitHub App redirect, wildcard domains, container IDs, nightly
  install folders, localhost metadata, Sentinel restart on save)
- Seed the instance settings the 2FA profile test needs
- Run the global Pest hooks for all test folders and release the
  Laravel application after each test, so tests do not leak state
- Replace a class alias mock that broke later tests
- Generate factory names that always pass name validation; Faker names
  with apostrophes or short words made form tests fail at random
v4.4.0
2026-10-06 13:01:49 +02:00
Andras Bacsai aa16cfb420 fix(servers): change the server role only through its checked flow 2026-10-06 12:56:57 +02:00
Andras Bacsai 9e20084302 fix(auth): build email verification links from the instance URL 2026-10-06 12:56:57 +02:00
Andras Bacsai f1d3883ab2 fix(servers): authorize every Docker images request 2026-10-06 12:56:57 +02:00
Andras Bacsai 5e92a7267c fix(cleanup): prune audit events in batches and delete old finished runner executions 2026-10-06 12:56:57 +02:00
Andras Bacsai ecf969e35d fix(audit): remove credentials from URLs before storing audit changes 2026-10-06 12:56:57 +02:00
Andras Bacsai 5d20f54f71 fix(webhooks): use a neutral reply for manual webhooks without a match 2026-10-06 12:56:50 +02:00
Andras Bacsai c2a3333df4 fix(runners): limit stored workflow and job names to the column length 2026-10-06 12:56:50 +02:00
Andras Bacsai 8c5fe1c85b fix(runners): create the runner secret file readable only by its owner 2026-10-06 12:56:50 +02:00
Andras Bacsai 055f5c0622 fix(api): accept numeric resource limits when creating databases 2026-10-06 12:56:50 +02:00
Andras Bacsai 78f52310e5 fix(dns): only create or replace records for the resource's own domains 2026-10-06 12:56:50 +02:00
Andras Bacsai 804d05b9b6 fix(backups): close backup directories to other users on non-root servers 2026-10-06 12:56:50 +02:00
Andras Bacsai 3e6f6bfdad fix(ssh): keep the command and its secrets out of timeout errors 2026-10-06 12:56:50 +02:00
Andras Bacsai 3645c4747e fix(sudo): do not follow symlinks when chown gives Coolify paths to a non-root SSH user 2026-10-06 12:56:50 +02:00
Andras Bacsai e79347295a fix(compose): allow upgrades with legacy soketi overrides
Add an inactive soketi placeholder to production and nightly Compose
files so old custom overrides remain valid without starting soketi.
Cover partial and full legacy overrides with regression tests.
2026-10-06 11:29:33 +02:00
Andras Bacsai 116806df1b fix(compose): allow content files outside the resource directory again
Since aabd12737 a Compose bind volume with a content block had to stay
inside the resource directory. Services and Compose applications saved
in v4.3.23 with other paths, and Git Compose files with them, no longer
started or deployed.

Only admins and owners can edit Compose files, and they can already
write any host file with a plain bind mount, so the rule added no
security.

- Write content files to their host path again, as in v4.3.23
- Keep shell escaping and the safe-character checks on volume sources,
  so injection attempts are still rejected
2026-10-06 11:03:39 +02:00
Andras Bacsai 06b5a708b8 refactor(traffic): remove fallbacks for unreleased Sentinel builds
Every released Sentinel with traffic analytics (1.0.0 and later) has
the dashboard and series routes and the requests, bytes_in and app
fields, so the fallbacks for builds without them are not needed.

- Keep "no data" handling for Sentinel without traffic routes (0.0.x)
- Keep the resource-scope fallback, which Sentinel 1.0.1 needs
2026-10-06 10:29:04 +02:00
Andras Bacsai 460bb67d63 fix(server): avoid a burst of patch and Sentinel checks after the upgrade
The per-server schedules reused the cache keys of the old schedule, so
every server ran these checks at once on the first run after the
upgrade. New keys start fresh, so each server runs at its own slot.
2026-10-06 10:29:04 +02:00
Andras Bacsai c5bcb31f73 fix(databases): import from the source the user selected
A staged upload always won over a server path, so an old upload that
was never imported could be restored instead of the chosen file.

- Record the selected source (checked server file or finished upload)
  and import only from it
- Delete a stale staged upload when another source is used
2026-10-06 10:29:04 +02:00