diff --git a/apps/dokploy/components/dashboard/application/environment/show.tsx b/apps/dokploy/components/dashboard/application/environment/show.tsx index d97c39e2..b449f12e 100644 --- a/apps/dokploy/components/dashboard/application/environment/show.tsx +++ b/apps/dokploy/components/dashboard/application/environment/show.tsx @@ -11,6 +11,7 @@ import { z } from "zod"; const addEnvironmentSchema = z.object({ env: z.string(), buildArgs: z.string(), + buildSecrets: z.record(z.string(), z.string()), }); type EnvironmentSchema = z.infer; @@ -36,6 +37,7 @@ export const ShowEnvironment = ({ applicationId }: Props) => { defaultValues: { env: data?.env || "", buildArgs: data?.buildArgs || "", + buildSecrets: data?.buildSecrets || {}, }, resolver: zodResolver(addEnvironmentSchema), }); @@ -44,6 +46,7 @@ export const ShowEnvironment = ({ applicationId }: Props) => { mutateAsync({ env: data.env, buildArgs: data.buildArgs, + buildSecrets: data.buildSecrets, applicationId, }) .then(async () => { @@ -69,25 +72,63 @@ export const ShowEnvironment = ({ applicationId }: Props) => { placeholder={["NODE_ENV=production", "PORT=3000"].join("\n")} /> {data?.buildType === "dockerfile" && ( - - Available only at build-time. See documentation  - - here - - . - - } - placeholder="NPM_TOKEN=xyz" - /> + <> + + Available only at build-time. See documentation  + + here + + . + + } + placeholder="NPM_TOKEN=xyz" + /> + + Secrets available only during build-time and not in the + final image. See documentation  + + here + + . + + } + placeholder="API_TOKEN=xyz" + transformValue={(value) => { + // Convert the string format to object + const lines = value.split("\n").filter((line) => line.trim()); + return Object.fromEntries( + lines.map((line) => { + const [key, ...valueParts] = line.split("="); + return [key.trim(), valueParts.join("=").trim()]; + }), + ); + }} + formatValue={(value) => { + // Convert the object back to string format + return Object.entries(value as Record) + .map(([key, val]) => `${key}=${val}`) + .join("\n"); + }} + /> + )}