Commit graph

14900 commits

Author SHA1 Message Date
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
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
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
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
Andras Bacsai
4f1fe824e5
fix(git-import): ensure ssh key is used for fetch, submodule, and lfs operations (#8933) 2026-03-12 13:35:26 +01:00
Andras Bacsai
92c8ad449f feat(git-import): support custom ssh command for fetch, submodule, and lfs
Allow passing a custom GIT_SSH_COMMAND to setGitImportSettings() so that git fetch,
submodule update, and lfs pull use the same SSH authentication as the initial clone.
This is required for git sources like GitLab that use custom ports and identity files.

Also remove unnecessary SSH retry event tracking and add test coverage.
2026-03-12 13:32:43 +01:00
Andras Bacsai
fd6ac4ef9d version++ 2026-03-12 13:26:59 +01:00
Andras Bacsai
8b8a09ad39
fix(api): cast teamId to int in deployment authorization check (#8931) 2026-03-12 13:26:08 +01:00
Andras Bacsai
3819676555 fix(api): cast teamId to int in deployment authorization check
Ensure proper type comparison when verifying deployment team ownership.
Adds comprehensive feature tests for the GET /api/v1/deployments/{uuid} endpoint.
2026-03-12 13:25:10 +01:00
Andras Bacsai
8cb5e70167
fix(parsers): resolve shared variables in compose environment (#8930) 2026-03-12 13:24:48 +01:00
Andras Bacsai
7cfc6746c7 fix(parsers): resolve shared variables in compose environment
Extract shared variable resolution logic into a reusable helper function
`resolveSharedEnvironmentVariables()` and apply it in applicationParser and
serviceParser to ensure patterns like {{environment.VAR}}, {{project.VAR}},
and {{team.VAR}} are properly resolved in the compose environment section.

Without this, unresolved {{...}} strings would take precedence over resolved
values from the .env file (env_file:) in docker-compose configurations.
2026-03-12 13:23:13 +01:00
Andras Bacsai
66840d64da
fix(validation): support scoped packages in file path validation (#8928) 2026-03-12 13:10:48 +01:00
Andras Bacsai
01031fc5f3 refactor: consolidate file path validation patterns and support scoped packages
- Extract file path validation regex into ValidationPatterns::FILE_PATH_PATTERN constant
- Add filePathRules() and filePathMessages() helper methods for reusable validation
- Extend allowed characters from [a-zA-Z0-9._\-/] to [a-zA-Z0-9._\-/~@+] to support:
  - Scoped npm packages (@org/package)
  - Language-specific directories (c++, rust+)
  - Version markers (v1~, build~)
- Replace duplicate inline regex patterns across multiple files
- Add tests for paths with @ symbol and tilde/plus characters
2026-03-12 13:09:13 +01:00
Andras Bacsai
61eb3e92df
fix(ssh): remove undefined trackSshRetryEvent() method call (#8927) 2026-03-12 13:08:20 +01:00
Andras Bacsai
ebfa53d9ca refactor(ssh): remove Sentry retry event tracking from ExecuteRemoteCommand
Remove the trackSshRetryEvent() call from SSH retry handling. This tracking is no longer
needed in the retry logic.
2026-03-12 13:01:18 +01:00
Andras Bacsai
ce076817d2
v4.0.0-beta.467 (#8911) 2026-03-11 18:22:43 +01:00