Commit Graph

4190 Commits

Author SHA1 Message Date
autofix-ci[bot] c5f12927b5 [autofix.ci] apply automated fixes 2026-09-02 06:44:56 +00:00
Mauricio Siu 56eaa93b91 Merge branch 'canary' into feat/compose-deploy-fresh-volumes 2026-09-02 00:37:24 -06:00
autofix-ci[bot] 0dcfcc19da [autofix.ci] apply automated fixes 2026-09-02 01:12:31 +00:00
Mauricio Siu 2e2e0c8c29 feat: cloud onboarding wizard, billing trial card, and post-checkout server setup
- Onboarding wizard (Welcome -> Plan -> Project -> Server -> Deploy ->
  Complete), shown once to an org owner with zero projects and no active
  plan/trial; skippable per step or entirely
- Billing page shows the org's current plan, and a no-card 14-day trial
  card when eligible
- Post-checkout "Welcome to Dokploy Cloud" modal simplified to reuse the
  onboarding wizard's own project/server/deploy steps behind a modal
  instead of its previous standalone 6-step flow, using the app's regular
  typography instead of the wizard's display serif
- Onboarding wizard validates a persisted project still exists before
  resuming a stale session, and the dashboard layout no longer gets stuck
  redirecting to /dashboard/home once the local onboarding-active flag
  goes stale mid-session
- onboardingCompletedAt column on user, with a backfill so existing users
  aren't shown the wizard
- pnpm reset-onboarding dev script to reset a test account's onboarding
  state end to end
2026-09-01 19:11:39 -06:00
Mauricio Siu a424f64370 chore(api): add local Inngest dev server script 2026-09-01 19:11:27 -06:00
Mauricio Siu a42614004f fix: don't leak git provider secrets to non-owner org members
gitlab.one, github.one, gitea.one and bitbucket.one returned the full
DB record (OAuth access/refresh tokens, client secrets, private keys,
webhook secrets, app passwords) to any org member who merely had
access to *use* a shared provider (sharedWithOrganization: true),
not just its owner or an org owner/admin.

Add canViewGitProviderSecrets() and null out the secret fields in
each .one response when the caller isn't the provider owner or an
org owner/admin.
2026-09-01 03:22:52 -06:00
Mauricio Siu 02760212f7 feat: list associated services in delete server modal
Show the services attached to a remote server directly in its delete
confirmation modal, with a link to each service and a per-service
delete action, instead of only showing a generic 'has active
services' blocker.
2026-09-01 03:11:12 -06:00
Mauricio Siu 8b5c14ca74 test: fix stale traefik remote-write test expectation
writeTraefikConfigRemote moved from an execAsyncRemote echo command to
writeFileRemote (SFTP) a while back; the test still mocked the old
execAsyncRemote path and asserted on an echo command that no longer runs.
2026-09-01 03:05:38 -06:00
Mauricio Siu 50acb791cd feat: bulk import secrets from vault providers
Adds a modal to select and import multiple secrets from an assigned
vault provider at once, instead of typing each ${{vault.x.y}} reference
by hand. Existing keys are skipped by default and can be overridden per
row; also adds an "Access all" shortcut to the vault provider assignment
picker.
2026-09-01 03:00:09 -06:00
Mauricio Siu 3a6e18be79 Merge pull request #5228 from Dokploy/fix/hubspot-chat-multi-subscription-plan
fix: detect billing plan across all active Stripe subscriptions
2026-09-01 02:48:58 -06:00
Mauricio Siu 23b15801d5 bump version to v0.30.4 in package.json 2026-09-01 02:44:09 -06:00
Mauricio Siu 8cd2ba80f2 Merge branch 'canary' into feat/dns-records-management 2026-09-01 02:41:18 -06:00
Mauricio Siu 1443500b9d Add new journal entry for wooden_nextwave version 7 2026-09-01 02:37:50 -06:00
Mauricio Siu 9c444ebca3 Merge branch 'canary' into feat/porkbun-dns-provider 2026-09-01 02:37:36 -06:00
Mauricio Siu e7eb20d92f Remove unused journal entry for porkbun DNS provider from _journal.json 2026-09-01 02:37:31 -06:00
Mauricio Siu f1a4f4317a refactor: remove DnsPageTransition component and update loading indicators in DNS-related components 2026-09-01 02:36:41 -06:00
Mauricio Siu 1ab4a8a70a Merge branch 'canary' into feat/dns-records-management 2026-09-01 02:28:22 -06:00
Mauricio Siu a194e1e27b Add entry for volatile piledriver in journal with version 7 2026-09-01 01:58:57 -06:00
Mauricio Siu 50479f20ff Merge branch 'canary' into feat/vault-phase-provider 2026-09-01 01:58:35 -06:00
Mauricio Siu 4453c55086 Remove unused journal entry for phase vault provider from _journal.json 2026-09-01 01:58:29 -06:00
autofix-ci[bot] 57c221de6f [autofix.ci] apply automated fixes 2026-09-01 07:49:01 +00:00
Mauricio Siu 4e38925119 fix: pass timezone when removing repeatable schedule job
removeJob() for type 'schedule' computed the BullMQ repeatable key
using only the cron pattern, without the timezone. scheduleJob()
always registers the repeatable job with tz set (job.timezone || UTC),
so BullMQ's repeat key (name:jobId:endDate:tz:pattern) never matched
on removal — removeRepeatable silently no-op'd and the job kept
firing forever, surviving disable, delete, and reboots.

Forward timezone through removeJob (queue.ts), the /update-backup
lookup (index.ts), and the disable/delete call sites in the
schedule router.
2026-09-01 01:31:59 -06:00
Mauricio Siu 91bcf88df9 fix: use updateJob to replace repeatable schedule job on update in cloud
Fixes #5233. Updating an enabled schedule (cron/timezone change) called
schedule() (create-backup), which only adds a new repeatable job and
never removes the one registered under the old cron pattern, leaving
an orphaned BullMQ job running in Redis indefinitely. Switched to
updateJob() (update-backup), which looks up the currently registered
repeatable pattern, removes it, then re-adds — same pattern already
used in backup.ts for backups.
2026-09-01 01:26:15 -06:00
Mauricio Siu 47308070a8 fix: persist serverThreshold for gotify/ntfy and guard teams dispatch 2026-09-01 01:11:31 -06:00
Mauricio Siu ec8e645758 fix: only pin --project-directory when compose has mounts
--project-directory was added unconditionally in 87b914996 to fix
relative bind mount resolution for git-based compose deploys with a
nested composePath (#5181). It also moves where build.context and the
generated .env resolve, breaking any compose file in a subdirectory
that has context: . alongside its Dockerfile (#5230), or interpolates
env vars (#5242).

Only pin --project-directory when the compose actually has mounts
configured; otherwise build.context and .env resolve against the
compose file's own directory like plain docker compose. Also pass
--env-file explicitly pointing at the generated .env next to the
compose file, so it's found even when --project-directory is pinned
(credit: tonnenpinguin, PR #5235).

Fixes #5230
Fixes #5242
2026-09-01 00:50:05 -06:00
Narciso 880bb55272 fix failing test 2026-08-31 16:42:26 -04:00
Narciso a36739eb07 Merge remote-tracking branch 'origin/canary' into fix/ui-polish-bugs 2026-08-31 16:20:48 -04:00
Narciso E. Núñez Arias 5345c00ff3 Merge pull request #5237 from shuv-o/feat/reset-password-by-email
feat: allow reset-password script to reset a specific user by email
2026-08-31 15:37:20 -04:00
autofix-ci[bot] 1f5f5576f1 [autofix.ci] apply automated fixes 2026-08-31 18:33:29 +00:00
Rakesh Bhugra d6ec4bd3d1 fix: prevent deployment commit hash overflow on mobile 2026-08-31 23:49:36 +05:30
Shivam Gupta 7e9b77e93f fix: surface the error state instead of "No results." when the log query fails
The loading branch added in the previous commit split the fallback cell
two ways: spinner while in flight, "No results." otherwise. That second
branch also catches the failure case -- when readStatsLogs errors,
statsLogs stays undefined and isLoading goes false, so a failed request
renders as a successful empty response.

The query's isError/error were not destructured. The cell now branches
three ways and reports the error through AlertBlock, matching how
ShowTraefikSystem surfaces a failed readDirectories query.
2026-08-31 22:58:36 +05:30
Shuvo 8db39a8d15 fix: normalize email argument before lookup in reset-password
Trims and lowercases the CLI email arg to match the normalization
used elsewhere for user emails, so a differently-cased or
whitespace-padded email no longer falsely reports "User not found".
2026-08-31 23:06:04 +06:00
autofix-ci[bot] 714bf03244 [autofix.ci] apply automated fixes 2026-08-31 23:06:04 +06:00
Shuvo dada3049a8 feat: allow reset-password script to target a specific user by email
Previously reset-password only reset the owner account's password.
Passing an email as an argument now resets that specific user's
password instead, while omitting it keeps the existing owner-reset
behavior.

Also scopes the update to the credential (password-based) account
row via providerId, and fixes the success check to verify a row was
actually updated instead of always reporting success.
2026-08-31 23:06:04 +06:00
Romain PINSOLLE ccfc44815e Merge branch 'canary' into fix/responsive-application-logs 2026-08-31 14:00:24 +02:00
Mauricio Siu 3f6dfbaaa7 fix: only sum currentPriceAmount from the identified plan subscription
Summing across all active subscriptions could mix amounts with
different billing intervals (isAnnualCurrent only reflects the
matched plan subscription), producing an inconsistent total.
2026-08-30 18:13:33 -06:00
Mauricio Siu e79239a100 fix: detect billing plan across all active Stripe subscriptions
getCurrentPlanForUser and getProducts only inspected subscriptions.data[0],
so a customer with more than one active Stripe subscription (e.g. Startup
plus a separately purchased additional server) could have their plan
resolved from the wrong subscription, resulting in currentPlan !== "startup"
and the HubSpot chat bubble not rendering.
2026-08-30 18:08:35 -06:00
Mauricio Siu cabfe2e81e Bump version from v0.30.2 to v0.30.3 2026-08-30 17:36:51 -06:00
Mauricio Siu b0ab9c77fb Merge pull request #5226 from Dokploy/feat/openpanel-cloud-analytics
feat: add OpenPanel analytics to cloud version
2026-08-30 17:36:26 -06:00
Mauricio Siu 2f7f50aec5 feat: add OpenPanel analytics to cloud version 2026-08-30 17:31:45 -06:00
Mauricio Siu 532de2c59e Merge pull request #5208 from lmachineone/codex/watch-path-negation
fix: apply watch path negations as a pattern set
2026-08-28 17:18:21 -06:00
Mauricio Siu 4b2de31b1c Merge pull request #5214 from Dokploy/fix/issue-4658-domain-validation-multi-ip
fix: domain validation false negative on servers with multiple IPs
2026-08-28 16:50:48 -06:00
Mauricio Siu 4b7a6295fc fix: verify server ownership before running IP detection
validateDomain accepted an arbitrary serverId and used it to look up
the server and SSH into it, without checking it belonged to the
caller's active organization. A member with domain:read could probe
other orgs' servers and get their SSH/detected IPs back in the
response.

Addresses greptile review on #5214
2026-08-28 16:49:06 -06:00
Mauricio Siu 22450abc4b fix: satisfy HttpRouter type in traefik config test
Test routers were missing the required "service" field, and
mock.calls[0] destructuring failed under noUncheckedIndexedAccess.
2026-08-28 16:47:09 -06:00
Mauricio Siu 976161647f fix: domain validation false negative on servers with multiple IPs
Validate against the server's SSH IP plus its detected public egress
IP, instead of only the stored SSH address.

Fixes #4658
2026-08-28 16:43:23 -06:00
Mauricio Siu bfc180dfef Merge pull request #5048 from Dokploy/fix/openapi-body-size-limits
fix(api): configurable body size limits for OpenAPI catch-all route
2026-08-28 16:35:34 -06:00
Mauricio Siu 0efe7feaf5 fix: report remote-node containers correctly in stack monitoring
Free monitoring resolved containers via a local Dockerode listContainers()
call, which only sees containers scheduled on the host running Dokploy.
For Stack services with tasks on other Swarm nodes, this always fell into
the "Container not running" branch even when the task was healthy
elsewhere, since local docker.listContainers() can't see remote-node
containers.

Now falls back to `docker service ps` (Swarm-aggregated, works from any
manager regardless of task placement) to tell a genuinely stopped
container apart from one running on another node, and reports that
distinction in the WS close reason instead of the misleading message.

Also fixes a client-side race where the stats websocket connected with
an empty appName on first mount (before the container selector settled),
and surfaces the close reason as a toast instead of only logging it.
2026-08-28 16:19:10 -06:00
Mauricio Siu 1053743a1c fix: close terminal websocket when local container shell exits 2026-08-28 15:50:53 -06:00
autofix-ci[bot] a1cc2778f3 [autofix.ci] apply automated fixes 2026-08-28 21:48:23 +00:00
Mauricio Siu fee0071223 fix: disable delete/unlink user button while mutation is pending
Prevents double-submit when clicking Confirm on the Delete/Unlink User
dialog before the request resolves (issue #5063).
2026-08-28 15:47:46 -06:00