Commit Graph

14912 Commits

Author SHA1 Message Date
Andras Bacsai fd3fc17b2f fix: prevent sporadic SSH permission denied on key rotation (#8990) 2026-03-16 21:37:29 +01:00
Andras Bacsai 6325e41aec fix(ssh): handle chmod failures gracefully and simplify key management
- Log warnings instead of silently failing when chmod 0600 fails
- Remove redundant refresh() call before SSH key validation
- Remove storeInFileSystem() call from updatePrivateKey() transaction
- Remove @unlink() of lock file after filesystem store
- Refactor unit tests to use real temp disk and anonymous class stub
  instead of reflection-only checks
2026-03-16 21:27:10 +01:00
Andras Bacsai 9976645c25 Merge remote-tracking branch 'origin/next' into fix/ssh-sporadic-permission-denied 2026-03-16 21:15:30 +01:00
Andras Bacsai c09127c54b fix(preview): enable per-volume control of PR suffix in preview deployments (#9006) 2026-03-16 21:13:37 +01:00
Andras Bacsai 15d6de9f41 fix(storages): hide PR suffix for services and fix instantSave logic
- Restrict "Add suffix for PR deployments" checkbox to non-service
  resources in both shared and service file-storage views
- Replace condition `is_preview_deployments_enabled` with `!$isService`
  for PR suffix visibility in storages/show.blade.php
- Fix FileStorage::instantSave() to use authorize + syncData instead
  of delegating to submit(), preventing unintended side effects
- Add $this->validate() to Storages/Show::instantSave() before saving
- Add response content schemas to storages API OpenAPI annotations
- Add additionalProperties: false to storage update request schema
- Rewrite PreviewDeploymentBindMountTest with behavioral tests of
  addPreviewDeploymentSuffix instead of file-content inspection
2026-03-16 21:10:00 +01:00
Andras Bacsai fe1aa94144 Merge remote-tracking branch 'origin/next' into fix/ssh-sporadic-permission-denied 2026-03-16 20:26:56 +01:00
Andras Bacsai 3ffe900b31 Merge remote-tracking branch 'origin/next' into 7802-volume-mappings-bug 2026-03-16 15:40:15 +01:00
Andras Bacsai 38df686718 Merge remote-tracking branch 'origin/next' into next 2026-03-16 15:40:05 +01:00
Andras Bacsai 1b0b230de2 fix(compose): include git branch in compose file not found error
Add the git branch to the "Docker Compose file not found" error message
to help diagnose cases where the file exists on one branch but not the
checked-out branch.
2026-03-16 15:39:24 +01:00
Andras Bacsai 9d745fca75 feat(api): expand update_storage to support name, mount_path, host_path, content fields
Add support for updating additional storage fields via the API while
enforcing read-only restrictions for storages managed by docker-compose
or service definitions (only is_preview_suffix_enabled remains editable
for those).
2026-03-16 15:37:46 +01:00
Andras Bacsai 0488a188a0 feat(api): add storages endpoints for applications
Add GET and PATCH /applications/{uuid}/storages routes to list and
update persistent and file storages for an application, including
support for toggling is_preview_suffix_enabled.
2026-03-16 15:34:27 +01:00
Andras Bacsai c9861e08e3 fix(preview): sync isPreviewSuffixEnabled property on file storage save 2026-03-16 15:13:36 +01:00
Andras Bacsai add16853a8 feat(preview): add configurable PR suffix toggle for volumes
Add `is_preview_suffix_enabled` flag to `local_file_volumes` and
`local_persistent_volumes` tables, allowing per-volume control over
whether a `-pr-N` suffix is appended during preview deployments.

Defaults to `true` to preserve existing behavior. Users can disable
it for volumes containing shared config or repository scripts that
should not be isolated per PR.
2026-03-16 14:54:22 +01:00
Andras Bacsai c61d71966e feat(service): update databasus to v3.16.2 (#8586) 2026-03-16 13:46:14 +01:00
Andras Bacsai b5e03c3a56 feat(service): Add librespeed (#8626) 2026-03-16 13:46:02 +01:00
Andras Bacsai 44a36d0df9 chore(service): Update SeaweedFS images to version 4.13 (#8738) 2026-03-16 13:45:54 +01:00
Andras Bacsai a8d3522653 fix(template): fix heyform template (#8747) 2026-03-16 13:45:44 +01:00
Andras Bacsai 2d1bad5f39 feat(templates): Add imgcompress service, for offline image processing (#8763) 2026-03-16 13:45:34 +01:00
Andras Bacsai 1b484a56b0 chore: remove coolify-examples-1 submodule 2026-03-16 13:37:14 +01:00
Andras Bacsai 5b424f1f0e fix(preview): exclude bind mounts from preview deployment suffix
Bind mount volumes reference files at the repository's original path and
should not receive the -pr-N suffix. Only named Docker volumes require
the suffix for isolation between preview deployments.

Adds PreviewDeploymentBindMountTest to verify the correct behavior.

Fixes #7802
2026-03-16 13:33:58 +01:00
pannous 2f96a759df test: add behavioral ssh key stale-file regression 2026-03-16 10:40:22 +01:00
pannous 4bf94fac2d fix: prevent sporadic SSH permission denied by validating key content
The root cause of sporadic "Permission denied (publickey)" errors was
that validateSshKey() only checked if the key file existed on disk,
never verifying its content matched the database. When keys were rotated
or updated, the stale file persisted and SSH used the wrong key.

Changes:
- validateSshKey() now refreshes key from DB and compares file content
- Server saved event detects private_key_id changes to invalidate mux
- PrivateKey storeInFileSystem() uses file locking to prevent races
- PrivateKey saved event auto-resyncs file on key content changes
- Enforces 0600 permissions on key files

Fixes coollabsio/coolify#7724
2026-03-15 03:06:21 +01:00
Andras Bacsai 74d591e6e9 feat(server): auto-fetch server metadata after validation (#8964) 2026-03-13 17:08:15 +01:00
Andras Bacsai 1936bb08bf feat(server): auto-fetch server metadata after validation
Server metadata is now automatically gathered when server validation completes successfully, both in the async job and Livewire component. This ensures server details (OS, CPU count, etc.) are populated immediately after validation passes, improving the user experience without requiring manual metadata fetching.

Tests added to verify gatherServerMetadata is called on successful validation and skipped when validation fails.
2026-03-13 17:07:50 +01:00
Andras Bacsai 9c0966c08a feat(compose-preview): populate fqdn from docker_compose_domains (#8963) 2026-03-13 17:02:26 +01:00
Andras Bacsai c39a287b47 feat(compose-preview): populate fqdn from docker_compose_domains
The generate_preview_fqdn_compose method now extracts and populates the fqdn field from docker_compose_domains, making it available for webhook notifications. This handles multiple domains across services and gracefully sets fqdn to null when no domains are configured.
2026-03-13 17:02:05 +01:00
Andras Bacsai cde0bebfd4 feat(server): allow force deletion of servers with resources (#8962) 2026-03-13 17:00:37 +01:00
Andras Bacsai b8390482b8 feat(server): allow force deletion of servers with resources
Add ability to force delete servers along with their defined resources:
- API: Accept ?force=true query parameter in DELETE /servers endpoint
- UI: Display checkbox option to delete all resources in deletion dialog

When force deletion is enabled, all associated resources are dispatched
via DeleteResourceJob before the server is removed, enabling one-step
deletion instead of requiring manual resource cleanup first.
2026-03-13 16:58:26 +01:00
Andras Bacsai d5b3a0380c fix(docker-compose): respect preserveRepository when injecting --project-directory (#8956) 2026-03-13 13:55:50 +01:00
Andras Bacsai c8046c6cd1 fix(api): allow is_container_label_escape_enabled in service operations (#8955) 2026-03-13 13:55:46 +01:00
Andras Bacsai a97612b29e fix(docker-compose): respect preserveRepository when injecting --project-directory
When adding --project-directory to custom docker compose start commands,
use the application's host workdir if preserveRepository is true, otherwise
use the container workdir. Add tests for both scenarios and explicit paths.
2026-03-13 13:53:03 +01:00
Andras Bacsai b9cae51c5d feat(service): add container label escape control to services API
Add `is_container_label_escape_enabled` boolean field to services API,
allowing users to control whether special characters in container labels
are escaped. Defaults to true (escaping enabled).

When disabled, users can use environment variables within labels.
Includes validation rules and comprehensive test coverage.
2026-03-13 13:32:58 +01:00
ShadowArcanist c25e59e7ed chore(service): pin imgcompress to a static version instead of latest 2026-03-13 12:28:25 +05:30
ShadowArcanist 35eb5cf937 chore(service): remove unused attributes on imgcompress service 2026-03-13 12:27:55 +05:30
Andras Bacsai 6408718ad1 fix(service): hoppscotch fails to start due to db unhealthy (#8949) 2026-03-13 07:56:47 +01:00
Andras Bacsai 0cfc930ec8 Change Castopod service port from 8000 to 8080 (#8817) 2026-03-13 07:55:47 +01:00
Andras Bacsai 413d0747cf feat(service): update n8n-with-postgres-and-worker to 2.10.4 (#8807) 2026-03-13 07:55:23 +01:00
ShadowArcanist 963e335621 chore(service): pin castopod service to a static version instead of latest 2026-03-13 12:05:06 +05:30
Andras Bacsai 8363367cd0 fix(git): GitHub App webhook endpoint defaults to IPv4 instead of the instance domain (#8948) 2026-03-13 07:11:50 +01:00
ShadowArcanist f1b8aaed2e fix(service): hoppscotch fails to start due to db unhealthy 2026-03-13 11:40:25 +05:30
ShadowArcanist c3d8f70ebb fix(git): GitHub App webhook endpoint defaults to IPv4 instead of the instance domain 2026-03-13 11:19:00 +05:30
Andras Bacsai 21ed8fd300 version++ 2026-03-12 15:10:12 +01:00
Andras Bacsai 9ea8e4dabf add dataforest sponsor 2026-03-12 15:10:06 +01:00
Andras Bacsai 89aecc28a9 v4.0.0-beta.468 (#8929) 2026-03-12 14:27:44 +01:00
Andras Bacsai 2c06223044 docs(settings): clarify Do Not Track helper text
Expand the helper text to explicitly explain that Do Not Track disables both
installation count reporting and error report submission, not just collection
of other data.
2026-03-12 14:24:27 +01:00
Andras Bacsai 39119fbff9 fix(application): clarify deployment type precedence logic (#8934) 2026-03-12 14:23:56 +01:00
Andras Bacsai 9724d7391d feat(seeders): add GitHub deploy key example application 2026-03-12 14:23:25 +01:00
Andras Bacsai aac34f1d14 fix(git-import): explicitly specify ssh key and remove duplicate validation rules
- Add -i flag to explicitly specify ssh key path in git ls-remote operations
- Remove static $rules properties in favor of dynamic rules() method
- Fix test syntax error
2026-03-12 14:19:53 +01:00
Andras Bacsai 0991f8e2ca fix(application): clarify deployment type precedence logic
- Prioritize real private keys (id > 0) first
- Check source second before falling back to zero key
- Remove isDev() check that was restricting zero key behavior in dev
- Remove exception throw, use 'other' as safe fallback
- Expand test coverage to validate all precedence scenarios
2026-03-12 13:48:30 +01:00
Andras Bacsai 2b65eaa2b4 feat(ui): add log filter based on log level (#8784) 2026-03-12 13:39:18 +01:00