Commit Graph
1104 Commits
Author SHA1 Message Date
Andras Bacsai 07933640f2 test(browser): expand config coverage and shared helpers
Add BrowserTestHelpers and configuration/deploy browser tests for apps,
databases, services, and Livewire toggles. Refactor existing browser
suites onto shared seed/login helpers, soft-skip onboarding, and null
broadcasting so host-side Pest runs avoid docker DNS.
2026-08-04 11:43:45 +02:00
Andras Bacsai 1bb54c0ca1 feat(ui): scrollable resource tabs and railpack default
Add a shared resource-heading-tabs scroller with overflow chevrons,
wire it into resource/server navbars, keep links menus outside overflow,
and default new git apps to Railpack instead of Nixpacks.
2026-08-03 23:55:34 +02:00
8ae56587d5 feat(ui): Shadow UI redesign, domain management, and DNS autoconfigure (#11119)
Co-authored-by: ShadowArcanist <162910371+ShadowArcanist@users.noreply.github.com>
2026-08-03 23:11:54 +02:00
Andras BacsaiandGitHub 0b843bb07c fix(compose): normalize service-name keys for domains and env vars (#11040) 2026-08-03 23:08:56 +02:00
Andras BacsaiandGitHub 7b18777f06 feat(mcp): add resource diagnostics and deployment controls (#11000) 2026-08-03 23:08:11 +02:00
Andras BacsaiandGitHub c27a5ec41e fix(backups): pin a single bracket-free IP for mc --resolve (#11028) 2026-08-03 19:28:02 +02:00
Andras BacsaiandGitHub 3ba0e26262 fix(backups): pin all resolved addresses in one CURLOPT_RESOLVE entry (#11061) 2026-08-03 19:27:42 +02:00
Andras Bacsai 5b370713c3 fix(sources): prevent 500 when deleting GitLab/GitHub apps
After delete, Livewire still re-renders the source change view (modal
$refresh / morph). Policy @can checks then call isAdminOfTeam() with a
null team_id and throw a TypeError (HTTP 500) before the redirect.

Guard null team_id in GitlabAppPolicy and GithubAppPolicy, clear the
Livewire model after delete, and skip @can when the model is gone.
2026-08-01 18:34:38 +02:00
dwiyantop 75d3bd8354 fix(backups): pin all resolved addresses in one CURLOPT_RESOLVE entry
libcurl overrides an existing host:port DNS cache entry each time a new
one is added, so one entry per address left only the last pinned. That is
IPv6 whenever the target has AAAA records, which broke every request on
hosts without IPv6. Join them into one comma separated entry instead.
2026-07-28 04:10:41 +07:00
Marvin 12033e8091 fix(backups): pin a single bracket-free IP for mc --resolve
S3 backup uploads fail when the endpoint has an AAAA record: mc parses
--resolve values with netip.ParseAddr and rejects the bracketed IPv6
form. Its resolver map also keeps only one IP per host, so emit a single
entry, preferring IPv4, without brackets.
2026-07-24 07:24:44 +02:00
Andras BacsaiandGitHub f06bacc8e0 feat(services): add Buzz one-click service template (#11020) 2026-07-23 17:25:53 +02:00
Andras BacsaiandGitHub e560bdf9e0 fix(api): secure proxy config, clone volumes, and rollback tags (#11003) 2026-07-22 14:52:11 +02:00
Andras Bacsai 3a863378b1 fix(gitlab): hide source secrets from unauthorized users
Only persist the system-wide setting during instant saves, preventing
unvalidated source details from being stored.
2026-07-21 22:11:25 +02:00
Andras Bacsai aeeb2665cd feat(github): add GitHub App connection testing 2026-07-21 21:54:15 +02:00
Andras Bacsai b2fed043c5 feat(api): add GitLab Apps CRUD endpoints
There was no API for creating GitLab sources. Add /api/v1/gitlab-apps
list/create/update/delete with OpenAPI docs, sensitive-field redaction,
and feature coverage mirroring the GitHub Apps API.
2026-07-21 21:35:59 +02:00
Andras Bacsai 43919ef4e0 fix(security): encrypt GitLab webhook token and mask input
Webhook secret was stored and shown as plaintext. Use a password field,
encrypt at rest (with legacy plaintext read support), and look up tokens
via findByWebhookToken so encrypted values still authenticate webhooks.
2026-07-21 21:21:04 +02:00
Andras Bacsai eaa0b0156d feat(gitlab): add custom public endpoint for OAuth redirect
Match the GitHub App endpoint picker so self-hosted / tunnel setups can
select FQDN, IP, app URL, or a custom base. Redirect URI is derived as
{base}/webhooks/source/gitlab/redirect and persisted for token exchange.
2026-07-21 21:11:20 +02:00
Andras Bacsai e962b81c4e fix(gitlab): reload application secret after save
The secret was always stored encrypted, but the setup form wiped the
input on every load. Load it back for admins (GitHub App parity) so a
reload no longer looks like a failed save.
2026-07-21 21:07:16 +02:00
Andras Bacsai 2450a32d6c fix(ui): rename GitLab setup submit button to Save 2026-07-21 21:02:41 +02:00
Andras Bacsai fda8e91396 fix(ui): simplify GitLab source setup view
Use the red incomplete-setup alert like GitHub, keep name + OAuth
credentials front-and-center, and tuck GitLab URL / API / SSH / system
wide options into an Advanced accordion for self-hosted users.
2026-07-21 20:59:09 +02:00
Andras Bacsai 418287d511 fix(ui): align GitLab App create modal with GitHub
Match the GitHub create modal layout: intro copy, name/group row,
system-wide warning, self-hosted accordion (URL/API/SSH), and a
bottom Continue button instead of a duplicate header Save.
2026-07-21 20:54:59 +02:00
Andras Bacsai 6f557cf17f fix(security): enforce GitLab App authorization parity with GitHub
GitlabAppPolicy previously allowed any authenticated user to update,
delete, and create GitLab sources. Align it with GithubAppPolicy, require
Application create authorization on the private-repo wizard, and reject
OAuth callbacks from non-admins so members cannot escalate privileges.
2026-07-20 23:21:40 +02:00
Mike ChongandAndras Bacsai a26091de0a feat: self-hosted GitLab Apps OAuth integration
Adds self-hosted GitLab OAuth sources so Coolify can connect to a self-managed GitLab instance, list private repositories, clone over an OAuth token, and deploy (the GitLab counterpart to GitHub Apps).

Hardening: authenticated, one-time team-bound OAuth callback state; token redaction in deploy logs; custom host port/path kept in clone and ls-remote URLs; submodule OAuth auth; system-wide source selection. Covered by unit and feature tests.

cosigned by OpenAI Codex at M1 Max
2026-07-20 23:21:40 +02:00
Andras Bacsai 960bd0150e Merge remote-tracking branch 'origin/next' into v5-parallel-inertia-react 2026-07-20 13:44:02 +02:00
Andras Bacsai 94a95cdf54 docs(release): clarify branch strategy and SHA build flow 2026-07-20 12:39:42 +02:00
Andras Bacsai bd71b09946 fix(helpers): prevent warnings when loading database helpers 2026-07-20 12:18:06 +02:00
Andras Bacsai ee36124300 Merge remote-tracking branch 'origin/next' into v5-parallel-inertia-react 2026-07-20 12:09:17 +02:00
Andras Bacsai bf72fd5d88 refactor(backups): centralize storage deletion guard 2026-07-19 23:20:46 +02:00
Andras Bacsai 68d719d02f Merge remote-tracking branch 'origin/next' into v5-parallel-inertia-react 2026-07-19 23:17:51 +02:00
Andras Bacsai 4e03be755d Merge remote-tracking branch 'origin/next' into volume-backups-server-s3 2026-07-19 23:16:00 +02:00
Andras Bacsai 72a0a57f0e fix(backups): enforce authorization and safe retention
- Gate volume backup retention and S3 controls by update permission
- Preserve backup records when S3 deletion fails
- Share SFTP download streaming with consistent missing-file handling
- Handle schedule creation errors and link service database backups
2026-07-19 23:15:55 +02:00
Andras Bacsai 24bc4b0462 docs(release): document SHA image promotion workflow 2026-07-19 23:13:33 +02:00
Andras Bacsai 99a8a96e7f Merge remote-tracking branch 'origin/next' into volume-backups-server-s3 2026-07-19 23:02:59 +02:00
Andras Bacsai 7716e65eea ci(release): promote SHA-tagged images on release
Publish branch builds under immutable commit SHA tags, then promote the
released image to its version tag and stable releases to latest.
2026-07-19 23:00:47 +02:00
Andras Bacsai 994eee8377 fix(backups): retain volume backups without server 2026-07-19 22:35:33 +02:00
Andras Bacsai b97a97e955 Merge remote-tracking branch 'origin/next' into volume-backups-server-s3 2026-07-19 21:45:26 +02:00
Andras Bacsai 32f9b48406 fix(v5): defer production runtime activation
Remove Flux token provisioning and container role handling from production.
Restore private server IP support and document the activation checklist.
2026-07-19 16:47:29 +02:00
Andras Bacsai d0247d3b09 feat(v5): gate V5 to development environments only
Introduce V5Feature and config so V5 routes, jobs, commands, morph maps,
and model queries run only when enabled. Move V5 migrations to
migrations-v5 (loaded only when enabled), remove Flux from production
Docker/install paths, and add isolation tests.
2026-07-19 11:44:12 +02:00
Andras Bacsai 1cb1d028de Merge remote-tracking branch 'origin/next' into resolve-vite-package-conflicts 2026-07-19 11:42:20 +02:00
Andras Bacsai 0633b543ee feat(api): require POST for state-changing endpoints
Make start/stop/restart, deploy, enable/disable, and server validate
POST-only, with GET returning 405. Server validate accepts optional
install and uses ValidateAndInstallServerJob. Update OpenAPI and tests.
2026-07-19 11:42:04 +02:00
Andras Bacsai 662633399f Merge remote-tracking branch 'origin/next' into volume-backups-server-s3 2026-07-18 16:07:26 +02:00
Andras Bacsai ae32ab5d7b Merge remote-tracking branch 'origin/next' into v5-parallel-inertia-react 2026-07-18 15:57:26 +02:00
Andras Bacsai a4ab69df56 feat(v5): authorize creates, deep-link selection, list apps in v4
Restrict V5 application and resource-connection creation to team admins.
Resolve project, environment, and application from query params and keep
session selection in sync. Surface V5 apps on the v4 resource index and
count them for project/environment emptiness. Create the flux data dir
on install and upgrade.
2026-07-18 15:55:47 +02:00
Andras Bacsai 28f8867567 feat(api): add volume backup schedule delete endpoints
Expose DELETE for application, database, and service storage backup
schedules (with OpenAPI docs), reject storage deletes while schedules
exist, skip retention cleanup when no limits are set, and remove S3
archives using the execution’s S3 storage.
2026-07-16 21:44:48 +02:00
Andras BacsaiandGitHub 913d033c75 fix(resources): clarify build server hosting restrictions (#10961) 2026-07-16 21:35:23 +02:00
Andras Bacsai fab012b5c8 fix(backups): allow volume backup delete without password when 2FA off
Skip empty-password rejection so delete works when two-step confirmation is disabled; cover with a feature test.
2026-07-16 14:43:02 +02:00
Andras Bacsai ac36a59088 fix(backups): pin S3 per volume execution and harden deletes
Store s3_storage_id on scheduled volume backup executions so retention
and recovery use the S3 that received the upload. Extract
DeleteScheduledVolumeBackup for UI and resource deletion, and isolate
database backup retention failures so cleanup errors do not fail the job.
2026-07-16 14:30:58 +02:00
Andras Bacsai 8cfa41a7d9 fix(backups): sync Backup Now with live database status
Subscribe BackupEdit to database status broadcasts and refresh the
database status so the Backup Now control updates without a full reload.
2026-07-16 14:01:34 +02:00
Andras Bacsai ddbed9f8a6 Merge remote-tracking branch 'origin/next' into volume-backups-server-s3 2026-07-16 13:47:15 +02:00
Andras Bacsai 7d699818e8 fix: harden Vultr create, Gmail identity, and provider retries
Wrap Vultr server creation in DB transactions and delete the remote
instance when local persistence fails (API and Livewire). Scope
plus/dot email normalization to gmail.com/googlemail.com only.
Use throw:false on DigitalOcean/Vultr HTTP retries, and normalize
service log line counts via normalizeLogLines.
2026-07-16 13:42:53 +02:00