From bb0c59fc5c30fe0168f53a02b47ee0893f654416 Mon Sep 17 00:00:00 2001 From: diego fabricio Date: Mon, 27 Apr 2026 09:50:46 -0500 Subject: [PATCH 1/3] fix(ui): prevent layout shift in log counter using tabular-nums --- .../dashboard/application/deployments/show-deployment.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/dokploy/components/dashboard/application/deployments/show-deployment.tsx b/apps/dokploy/components/dashboard/application/deployments/show-deployment.tsx index 9f078f9d2..9a2268bca 100644 --- a/apps/dokploy/components/dashboard/application/deployments/show-deployment.tsx +++ b/apps/dokploy/components/dashboard/application/deployments/show-deployment.tsx @@ -148,7 +148,7 @@ export const ShowDeployment = ({ See all the details of this deployment |{" "} - + {filteredLogs.length} lines From 60ad78282ee262c9312a0bddb70cbd4aa42b3498 Mon Sep 17 00:00:00 2001 From: TpmyCT Date: Mon, 8 Jun 2026 22:30:22 -0300 Subject: [PATCH 2/3] fix: open deployments tab when opening a service from the deployments list The Open action in the centralized deployments list navigated to the service's General tab instead of its Deployments tab. Append `?tab=deployments` to the generated link so it deep-links straight to the Deployments tab, matching the redirect the app already performs after a deploy. --- .../dashboard/deployments/show-deployments-table.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/dokploy/components/dashboard/deployments/show-deployments-table.tsx b/apps/dokploy/components/dashboard/deployments/show-deployments-table.tsx index 770d4efd0..84e706073 100644 --- a/apps/dokploy/components/dashboard/deployments/show-deployments-table.tsx +++ b/apps/dokploy/components/dashboard/deployments/show-deployments-table.tsx @@ -76,7 +76,7 @@ function getServiceInfo(d: DeploymentRow) { projectName: app.environment.project.name, environmentName: app.environment.name, serviceId: app.applicationId, - href: `/dashboard/project/${app.environment.project.projectId}/environment/${app.environment.environmentId}/services/application/${app.applicationId}`, + href: `/dashboard/project/${app.environment.project.projectId}/environment/${app.environment.environmentId}/services/application/${app.applicationId}?tab=deployments`, }; } if (comp?.environment?.project && comp.environment) { @@ -88,7 +88,7 @@ function getServiceInfo(d: DeploymentRow) { projectName: comp.environment.project.name, environmentName: comp.environment.name, serviceId: comp.composeId, - href: `/dashboard/project/${comp.environment.project.projectId}/environment/${comp.environment.environmentId}/services/compose/${comp.composeId}`, + href: `/dashboard/project/${comp.environment.project.projectId}/environment/${comp.environment.environmentId}/services/compose/${comp.composeId}?tab=deployments`, }; } return null; From fc5b8d03e5423010a7b005677cf6b3d1db18fb74 Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Thu, 13 Aug 2026 14:41:10 -0600 Subject: [PATCH 3/3] fix(gitlab): handle missing expires_in in OAuth token response Some self-hosted GitLab instances (e.g. older versions without expires_in configured in doorkeeper) omit expires_in from the OAuth token response. Computing Date.now()/1000 + undefined produced NaN, which Postgres rejected on the expires_at integer column, crashing both the initial OAuth callback and the token refresh flow with a 500. Falls back to null when expires_in is absent, matching the existing Gitea callback behavior. Closes #4362 --- apps/dokploy/pages/api/providers/gitlab/callback.ts | 4 +++- packages/server/src/utils/providers/gitlab.ts | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/apps/dokploy/pages/api/providers/gitlab/callback.ts b/apps/dokploy/pages/api/providers/gitlab/callback.ts index 42d81df12..a43e88890 100644 --- a/apps/dokploy/pages/api/providers/gitlab/callback.ts +++ b/apps/dokploy/pages/api/providers/gitlab/callback.ts @@ -53,7 +53,9 @@ export default async function handler( return res.status(400).json({ error: "Missing or invalid code" }); } - const expiresAt = Math.floor(Date.now() / 1000) + result.expires_in; + const expiresAt = result.expires_in + ? Math.floor(Date.now() / 1000) + result.expires_in + : null; await updateGitlab(gitlab.gitlabId, { accessToken: result.access_token, refreshToken: result.refresh_token, diff --git a/packages/server/src/utils/providers/gitlab.ts b/packages/server/src/utils/providers/gitlab.ts index 3907130ee..6cb777b75 100644 --- a/packages/server/src/utils/providers/gitlab.ts +++ b/packages/server/src/utils/providers/gitlab.ts @@ -44,7 +44,9 @@ export const refreshGitlabToken = async (gitlabProviderId: string) => { const data = await response.json(); - const expiresAt = Math.floor(Date.now() / 1000) + data.expires_in; + const expiresAt = data.expires_in + ? Math.floor(Date.now() / 1000) + data.expires_in + : null; await updateGitlab(gitlabProviderId, { accessToken: data.access_token,