From ba3645933f995b549112065bc7aa3c92bd98fb70 Mon Sep 17 00:00:00 2001 From: Khiet Tam Nguyen Date: Tue, 20 May 2025 16:11:48 +1000 Subject: [PATCH 1/5] feat: added SPA option for static sites --- .../dashboard/application/build/show.tsx | 34 +- .../drizzle/0092_stiff_the_watchers.sql | 1 + apps/dokploy/drizzle/meta/0092_snapshot.json | 5717 ++++++++++++++++ apps/dokploy/drizzle/meta/_journal.json | 7 + .../dokploy/server/api/routers/application.ts | 1 + packages/server/src/db/schema/application.ts | 4 +- packages/server/src/utils/builders/static.ts | 43 +- pnpm-lock.yaml | 6084 ++++++++--------- 8 files changed, 8493 insertions(+), 3398 deletions(-) create mode 100644 apps/dokploy/drizzle/0092_stiff_the_watchers.sql create mode 100644 apps/dokploy/drizzle/meta/0092_snapshot.json diff --git a/apps/dokploy/components/dashboard/application/build/show.tsx b/apps/dokploy/components/dashboard/application/build/show.tsx index 9535a318..fbefab6d 100644 --- a/apps/dokploy/components/dashboard/application/build/show.tsx +++ b/apps/dokploy/components/dashboard/application/build/show.tsx @@ -12,6 +12,7 @@ import { FormMessage, } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; +import { Checkbox } from "@/components/ui/checkbox"; import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group"; import { api } from "@/utils/api"; import { zodResolver } from "@hookform/resolvers/zod"; @@ -63,10 +64,11 @@ const mySchema = z.discriminatedUnion("buildType", [ publishDirectory: z.string().optional(), }), z.object({ - buildType: z.literal(BuildType.static), + buildType: z.literal(BuildType.railpack), }), z.object({ - buildType: z.literal(BuildType.railpack), + buildType: z.literal(BuildType.static), + isStaticSpa: z.boolean().default(false), }), ]); @@ -83,6 +85,7 @@ interface ApplicationData { dockerBuildStage?: string | null; herokuVersion?: string | null; publishDirectory?: string | null; + isStaticSpa?: boolean | null; } function isValidBuildType(value: string): value is BuildType { @@ -115,6 +118,7 @@ const resetData = (data: ApplicationData): AddTemplate => { case BuildType.static: return { buildType: BuildType.static, + isStaticSpa: data.isStaticSpa ?? false, }; case BuildType.railpack: return { @@ -174,6 +178,8 @@ export const ShowBuildChooseForm = ({ applicationId }: Props) => { data.buildType === BuildType.heroku_buildpacks ? data.herokuVersion : null, + isStaticSpa: + data.buildType === BuildType.static ? data.isStaticSpa : null, }) .then(async () => { toast.success("Build type saved"); @@ -364,6 +370,30 @@ export const ShowBuildChooseForm = ({ applicationId }: Props) => { )} /> )} + {buildType === BuildType.static && ( + ( + + +
+ + + Single Page Application (SPA) + +
+
+ +
+ )} + /> + )}