From ceb16ae9f7b4bb5acf4cae771b785d6256409a90 Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Sat, 26 Apr 2025 16:35:02 -0600 Subject: [PATCH] Implement enableSubmodules feature across various Git provider components and update database schema. This change introduces a new boolean field `enableSubmodules` to control submodule behavior in Git operations, replacing the previous `recurseSubmodules` field. Updates include modifications to the UI components, API routers, and database schema to accommodate this new feature. --- .../general/generic/save-git-provider.tsx | 20 +- .../general/generic/save-github-provider.tsx | 20 +- .../general/generic/save-gitlab-provider.tsx | 19 +- .../save-bitbucket-provider-compose.tsx | 20 + .../generic/save-git-provider-compose.tsx | 20 + .../generic/save-gitea-provider-compose.tsx | 20 + .../generic/save-github-provider-compose.tsx | 20 + .../generic/save-gitlab-provider-compose.tsx | 20 + .../drizzle/0085_equal_captain_stacy.sql | 2 + .../drizzle/0086_rainy_gertrude_yorkes.sql | 2 + apps/dokploy/drizzle/meta/0085_snapshot.json | 5383 +++++++++++++++++ apps/dokploy/drizzle/meta/0086_snapshot.json | 5383 +++++++++++++++++ apps/dokploy/drizzle/meta/_journal.json | 14 + .../dokploy/server/api/routers/application.ts | 5 + packages/server/src/db/schema/application.ts | 6 + packages/server/src/db/schema/compose.ts | 1 + packages/server/src/services/compose.ts | 1 + .../server/src/utils/providers/bitbucket.ts | 22 +- packages/server/src/utils/providers/git.ts | 28 +- packages/server/src/utils/providers/gitea.ts | 28 +- packages/server/src/utils/providers/github.ts | 42 +- packages/server/src/utils/providers/gitlab.ts | 21 +- 22 files changed, 11000 insertions(+), 97 deletions(-) create mode 100644 apps/dokploy/drizzle/0085_equal_captain_stacy.sql create mode 100644 apps/dokploy/drizzle/0086_rainy_gertrude_yorkes.sql create mode 100644 apps/dokploy/drizzle/meta/0085_snapshot.json create mode 100644 apps/dokploy/drizzle/meta/0086_snapshot.json diff --git a/apps/dokploy/components/dashboard/application/general/generic/save-git-provider.tsx b/apps/dokploy/components/dashboard/application/general/generic/save-git-provider.tsx index 00d28395..ef2dd3da 100644 --- a/apps/dokploy/components/dashboard/application/general/generic/save-git-provider.tsx +++ b/apps/dokploy/components/dashboard/application/general/generic/save-git-provider.tsx @@ -23,6 +23,7 @@ import { TooltipProvider, TooltipTrigger, } from "@/components/ui/tooltip"; +import { Switch } from "@/components/ui/switch"; import { api } from "@/utils/api"; import { zodResolver } from "@hookform/resolvers/zod"; import { KeyRoundIcon, LockIcon, X } from "lucide-react"; @@ -44,7 +45,7 @@ const GitProviderSchema = z.object({ branch: z.string().min(1, "Branch required"), sshKey: z.string().optional(), watchPaths: z.array(z.string()).optional(), - recurseSubmodules: z.boolean().default(true), + enableSubmodules: z.boolean().default(false), }); type GitProvider = z.infer; @@ -68,7 +69,7 @@ export const SaveGitProvider = ({ applicationId }: Props) => { repositoryURL: "", sshKey: undefined, watchPaths: [], - recurseSubmodules: true, + enableSubmodules: false, }, resolver: zodResolver(GitProviderSchema), }); @@ -81,7 +82,7 @@ export const SaveGitProvider = ({ applicationId }: Props) => { buildPath: data.customGitBuildPath || "/", repositoryURL: data.customGitUrl || "", watchPaths: data.watchPaths || [], - recurseSubmodules: data.recurseSubmodules ?? true, + enableSubmodules: data.enableSubmodules ?? false, }); } }, [form.reset, data, form]); @@ -94,7 +95,7 @@ export const SaveGitProvider = ({ applicationId }: Props) => { customGitSSHKeyId: values.sshKey === "none" ? null : values.sshKey, applicationId, watchPaths: values.watchPaths || [], - recurseSubmodules: values.recurseSubmodules, + enableSubmodules: values.enableSubmodules, }) .then(async () => { toast.success("Git Provider Saved"); @@ -298,20 +299,19 @@ export const SaveGitProvider = ({ applicationId }: Props) => { )} /> + ( - - Recurse Submodules + Enable Submodules )} /> diff --git a/apps/dokploy/components/dashboard/application/general/generic/save-github-provider.tsx b/apps/dokploy/components/dashboard/application/general/generic/save-github-provider.tsx index 7637f596..4befb215 100644 --- a/apps/dokploy/components/dashboard/application/general/generic/save-github-provider.tsx +++ b/apps/dokploy/components/dashboard/application/general/generic/save-github-provider.tsx @@ -30,6 +30,7 @@ import { SelectTrigger, SelectValue, } from "@/components/ui/select"; +import { Switch } from "@/components/ui/switch"; import { Tooltip, TooltipContent, @@ -57,7 +58,7 @@ const GithubProviderSchema = z.object({ branch: z.string().min(1, "Branch is required"), githubId: z.string().min(1, "Github Provider is required"), watchPaths: z.array(z.string()).optional(), - recurseSubmodules: z.boolean().default(true), + enableSubmodules: z.boolean().default(false), }); type GithubProvider = z.infer; @@ -82,7 +83,7 @@ export const SaveGithubProvider = ({ applicationId }: Props) => { }, githubId: "", branch: "", - recurseSubmodules: true, + enableSubmodules: false, }, resolver: zodResolver(GithubProviderSchema), }); @@ -126,7 +127,7 @@ export const SaveGithubProvider = ({ applicationId }: Props) => { buildPath: data.buildPath || "/", githubId: data.githubId || "", watchPaths: data.watchPaths || [], - recurseSubmodules: data.recurseSubmodules ?? true, + enableSubmodules: data.enableSubmodules ?? false, }); } }, [form.reset, data, form]); @@ -140,7 +141,7 @@ export const SaveGithubProvider = ({ applicationId }: Props) => { buildPath: data.buildPath, githubId: data.githubId, watchPaths: data.watchPaths || [], - recurseSubmodules: data.recurseSubmodules, + enableSubmodules: data.enableSubmodules, }) .then(async () => { toast.success("Service Provided Saved"); @@ -462,20 +463,19 @@ export const SaveGithubProvider = ({ applicationId }: Props) => { )} /> + ( - - Recurse Submodules + Enable Submodules )} /> diff --git a/apps/dokploy/components/dashboard/application/general/generic/save-gitlab-provider.tsx b/apps/dokploy/components/dashboard/application/general/generic/save-gitlab-provider.tsx index 996b1dca..b4b55d3f 100644 --- a/apps/dokploy/components/dashboard/application/general/generic/save-gitlab-provider.tsx +++ b/apps/dokploy/components/dashboard/application/general/generic/save-gitlab-provider.tsx @@ -31,6 +31,7 @@ import { SelectTrigger, SelectValue, } from "@/components/ui/select"; +import { Switch } from "@/components/ui/switch"; import { Tooltip, TooltipContent, @@ -60,7 +61,7 @@ const GitlabProviderSchema = z.object({ branch: z.string().min(1, "Branch is required"), gitlabId: z.string().min(1, "Gitlab Provider is required"), watchPaths: z.array(z.string()).optional(), - recurseSubmodules: z.boolean().default(true), + enableSubmodules: z.boolean().default(false), }); type GitlabProvider = z.infer; @@ -87,7 +88,7 @@ export const SaveGitlabProvider = ({ applicationId }: Props) => { }, gitlabId: "", branch: "", - recurseSubmodules: true, + enableSubmodules: false, }, resolver: zodResolver(GitlabProviderSchema), }); @@ -137,7 +138,7 @@ export const SaveGitlabProvider = ({ applicationId }: Props) => { buildPath: data.gitlabBuildPath || "/", gitlabId: data.gitlabId || "", watchPaths: data.watchPaths || [], - recurseSubmodules: data.recurseSubmodules ?? true, + enableSubmodules: data.enableSubmodules ?? false, }); } }, [form.reset, data, form]); @@ -153,7 +154,7 @@ export const SaveGitlabProvider = ({ applicationId }: Props) => { gitlabProjectId: data.repository.id, gitlabPathNamespace: data.repository.gitlabPathNamespace, watchPaths: data.watchPaths || [], - recurseSubmodules: data.recurseSubmodules, + enableSubmodules: data.enableSubmodules, }) .then(async () => { toast.success("Service Provided Saved"); @@ -489,18 +490,16 @@ export const SaveGitlabProvider = ({ applicationId }: Props) => { /> ( - - Recurse Submodules + Enable Submodules )} /> diff --git a/apps/dokploy/components/dashboard/compose/general/generic/save-bitbucket-provider-compose.tsx b/apps/dokploy/components/dashboard/compose/general/generic/save-bitbucket-provider-compose.tsx index ff329a0a..353ccc6c 100644 --- a/apps/dokploy/components/dashboard/compose/general/generic/save-bitbucket-provider-compose.tsx +++ b/apps/dokploy/components/dashboard/compose/general/generic/save-bitbucket-provider-compose.tsx @@ -31,6 +31,7 @@ import { SelectTrigger, SelectValue, } from "@/components/ui/select"; +import { Switch } from "@/components/ui/switch"; import { Tooltip, TooltipContent, @@ -58,6 +59,7 @@ const BitbucketProviderSchema = z.object({ branch: z.string().min(1, "Branch is required"), bitbucketId: z.string().min(1, "Bitbucket Provider is required"), watchPaths: z.array(z.string()).optional(), + enableSubmodules: z.boolean().default(false), }); type BitbucketProvider = z.infer; @@ -84,6 +86,7 @@ export const SaveBitbucketProviderCompose = ({ composeId }: Props) => { bitbucketId: "", branch: "", watchPaths: [], + enableSubmodules: false, }, resolver: zodResolver(BitbucketProviderSchema), }); @@ -130,6 +133,7 @@ export const SaveBitbucketProviderCompose = ({ composeId }: Props) => { composePath: data.composePath, bitbucketId: data.bitbucketId || "", watchPaths: data.watchPaths || [], + enableSubmodules: data.enableSubmodules ?? false, }); } }, [form.reset, data, form]); @@ -145,6 +149,7 @@ export const SaveBitbucketProviderCompose = ({ composeId }: Props) => { sourceType: "bitbucket", composeStatus: "idle", watchPaths: data.watchPaths, + enableSubmodules: data.enableSubmodules, }) .then(async () => { toast.success("Service Provided Saved"); @@ -469,6 +474,21 @@ export const SaveBitbucketProviderCompose = ({ composeId }: Props) => { )} /> + ( + + + + + Enable Submodules + + )} + />
diff --git a/apps/dokploy/components/dashboard/compose/general/generic/save-gitea-provider-compose.tsx b/apps/dokploy/components/dashboard/compose/general/generic/save-gitea-provider-compose.tsx index 201f9da2..6f9b50da 100644 --- a/apps/dokploy/components/dashboard/compose/general/generic/save-gitea-provider-compose.tsx +++ b/apps/dokploy/components/dashboard/compose/general/generic/save-gitea-provider-compose.tsx @@ -31,6 +31,7 @@ import { SelectTrigger, SelectValue, } from "@/components/ui/select"; +import { Switch } from "@/components/ui/switch"; import { Tooltip, TooltipContent, @@ -59,6 +60,7 @@ const GiteaProviderSchema = z.object({ branch: z.string().min(1, "Branch is required"), giteaId: z.string().min(1, "Gitea Provider is required"), watchPaths: z.array(z.string()).optional(), + enableSubmodules: z.boolean().default(false), }); type GiteaProvider = z.infer; @@ -83,6 +85,7 @@ export const SaveGiteaProviderCompose = ({ composeId }: Props) => { giteaId: "", branch: "", watchPaths: [], + enableSubmodules: false, }, resolver: zodResolver(GiteaProviderSchema), }); @@ -136,6 +139,7 @@ export const SaveGiteaProviderCompose = ({ composeId }: Props) => { composePath: data.composePath || "./docker-compose.yml", giteaId: data.giteaId || "", watchPaths: data.watchPaths || [], + enableSubmodules: data.enableSubmodules ?? false, }); } }, [form.reset, data, form]); @@ -151,6 +155,7 @@ export const SaveGiteaProviderCompose = ({ composeId }: Props) => { sourceType: "gitea", composeStatus: "idle", watchPaths: data.watchPaths, + enableSubmodules: data.enableSubmodules, } as any) .then(async () => { toast.success("Service Provider Saved"); @@ -469,6 +474,21 @@ export const SaveGiteaProviderCompose = ({ composeId }: Props) => { )} /> + ( + + + + + Enable Submodules + + )} + />
diff --git a/apps/dokploy/components/dashboard/compose/general/generic/save-github-provider-compose.tsx b/apps/dokploy/components/dashboard/compose/general/generic/save-github-provider-compose.tsx index 4f4c1d5a..6e9b0a03 100644 --- a/apps/dokploy/components/dashboard/compose/general/generic/save-github-provider-compose.tsx +++ b/apps/dokploy/components/dashboard/compose/general/generic/save-github-provider-compose.tsx @@ -30,6 +30,7 @@ import { SelectTrigger, SelectValue, } from "@/components/ui/select"; +import { Switch } from "@/components/ui/switch"; import { Tooltip, TooltipContent, @@ -57,6 +58,7 @@ const GithubProviderSchema = z.object({ branch: z.string().min(1, "Branch is required"), githubId: z.string().min(1, "Github Provider is required"), watchPaths: z.array(z.string()).optional(), + enableSubmodules: z.boolean().default(false), }); type GithubProvider = z.infer; @@ -82,6 +84,7 @@ export const SaveGithubProviderCompose = ({ composeId }: Props) => { githubId: "", branch: "", watchPaths: [], + enableSubmodules: false, }, resolver: zodResolver(GithubProviderSchema), }); @@ -125,6 +128,7 @@ export const SaveGithubProviderCompose = ({ composeId }: Props) => { composePath: data.composePath, githubId: data.githubId || "", watchPaths: data.watchPaths || [], + enableSubmodules: data.enableSubmodules ?? false, }); } }, [form.reset, data, form]); @@ -140,6 +144,7 @@ export const SaveGithubProviderCompose = ({ composeId }: Props) => { sourceType: "github", composeStatus: "idle", watchPaths: data.watchPaths, + enableSubmodules: data.enableSubmodules, }) .then(async () => { toast.success("Service Provided Saved"); @@ -460,6 +465,21 @@ export const SaveGithubProviderCompose = ({ composeId }: Props) => { )} /> + ( + + + + + Enable Submodules + + )} + />