From fcb8a2bded6e4cc7d6352d65240c5fcd2ce71a30 Mon Sep 17 00:00:00 2001 From: Theo D Date: Wed, 2 Apr 2025 22:22:43 +0200 Subject: [PATCH] feat(github): add triggerType field to GitHub provider and handle tag creation events --- .../general/generic/save-github-provider.tsx | 42 +++++++ .../dokploy/drizzle/0084_add_trigger_type.sql | 5 + apps/dokploy/pages/api/deploy/github.ts | 107 +++++++++++++++++- .../dokploy/server/api/routers/application.ts | 1 + packages/server/src/db/schema/application.ts | 6 +- packages/server/src/db/schema/compose.ts | 1 + 6 files changed, 159 insertions(+), 3 deletions(-) create mode 100644 apps/dokploy/drizzle/0084_add_trigger_type.sql 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 2a267a18..5b465ebf 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 @@ -57,6 +57,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(), + triggerType: z.enum(["push", "tag"]).default("push"), }); type GithubProvider = z.infer; @@ -124,6 +125,7 @@ export const SaveGithubProvider = ({ applicationId }: Props) => { buildPath: data.buildPath || "/", githubId: data.githubId || "", watchPaths: data.watchPaths || [], + triggerType: data.triggerType || "push", }); } }, [form.reset, data, form]); @@ -137,6 +139,7 @@ export const SaveGithubProvider = ({ applicationId }: Props) => { buildPath: data.buildPath, githubId: data.githubId, watchPaths: data.watchPaths || [], + triggerType: data.triggerType, }) .then(async () => { toast.success("Service Provided Saved"); @@ -379,6 +382,45 @@ export const SaveGithubProvider = ({ applicationId }: Props) => { )} /> + ( + +
+ Trigger Type + + + + + + +

+ Choose when to trigger deployments: on push to the selected branch or when a new tag is created. +

+
+
+
+
+ + +
+ )} + /> true), // Gitlab gitlabProjectId: integer("gitlabProjectId"), @@ -471,7 +472,10 @@ export const apiSaveGithubProvider = createSchema githubId: true, watchPaths: true, }) - .required(); + .required() + .extend({ + triggerType: z.enum(["push", "tag"]).default("push"), + }); export const apiSaveGitlabProvider = createSchema .pick({ diff --git a/packages/server/src/db/schema/compose.ts b/packages/server/src/db/schema/compose.ts index 86f1fcaf..92a4d12b 100644 --- a/packages/server/src/db/schema/compose.ts +++ b/packages/server/src/db/schema/compose.ts @@ -76,6 +76,7 @@ export const compose = pgTable("compose", { suffix: text("suffix").notNull().default(""), randomize: boolean("randomize").notNull().default(false), isolatedDeployment: boolean("isolatedDeployment").notNull().default(false), + triggerType: text("triggerType").default("push"), composeStatus: applicationStatus("composeStatus").notNull().default("idle"), projectId: text("projectId") .notNull()