diff --git a/apps/dokploy/package.json b/apps/dokploy/package.json index fd813f978..bd3dc0445 100644 --- a/apps/dokploy/package.json +++ b/apps/dokploy/package.json @@ -150,7 +150,8 @@ "ws": "8.16.0", "xterm-addon-fit": "^0.8.0", "zod": "^3.23.4", - "zod-form-data": "^2.0.2" + "zod-form-data": "^2.0.2", + "toml": "3.0.0" }, "devDependencies": { "@types/adm-zip": "^0.5.5", diff --git a/apps/dokploy/server/api/routers/compose.ts b/apps/dokploy/server/api/routers/compose.ts index 9c4658234..c4f9b3177 100644 --- a/apps/dokploy/server/api/routers/compose.ts +++ b/apps/dokploy/server/api/routers/compose.ts @@ -50,7 +50,8 @@ import { import { processTemplate } from "@dokploy/server/templates/processors"; import { TRPCError } from "@trpc/server"; import { eq } from "drizzle-orm"; -import { dump, load } from "js-yaml"; +import { dump } from "js-yaml"; +import { parse } from "toml"; import _ from "lodash"; import { nanoid } from "nanoid"; import { z } from "zod"; @@ -594,7 +595,7 @@ export const composeRouter = createTRPCRouter({ serverIp = "127.0.0.1"; } const templateData = JSON.parse(decodedData); - const config = load(templateData.config) as CompleteTemplate; + const config = parse(templateData.config) as CompleteTemplate; if (!templateData.compose || !config) { throw new TRPCError({ @@ -663,7 +664,8 @@ export const composeRouter = createTRPCRouter({ } const templateData = JSON.parse(decodedData); - const config = load(templateData.config) as CompleteTemplate; + + const config = parse(templateData.config) as CompleteTemplate; if (!templateData.compose || !config) { throw new TRPCError({ @@ -678,7 +680,6 @@ export const composeRouter = createTRPCRouter({ projectName: compose.appName, }); - // Update compose file await updateCompose(input.composeId, { composeFile: templateData.compose, sourceType: "raw", @@ -686,7 +687,6 @@ export const composeRouter = createTRPCRouter({ isolatedDeployment: true, }); - // Create mounts if (processedTemplate.mounts && processedTemplate.mounts.length > 0) { for (const mount of processedTemplate.mounts) { await createMount({ @@ -700,7 +700,6 @@ export const composeRouter = createTRPCRouter({ } } - // Create domains if (processedTemplate.domains && processedTemplate.domains.length > 0) { for (const domain of processedTemplate.domains) { await createDomain({ diff --git a/packages/server/package.json b/packages/server/package.json index f62157c77..7e637cb51 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -76,7 +76,8 @@ "ws": "8.16.0", "zod": "^3.23.4", "ssh2": "1.15.0", - "@octokit/rest": "^20.0.2" + "@octokit/rest": "^20.0.2", + "toml": "3.0.0" }, "devDependencies": { "@types/micromatch": "4.0.9", diff --git a/packages/server/src/templates/github.ts b/packages/server/src/templates/github.ts index bdb785ed7..a935b2155 100644 --- a/packages/server/src/templates/github.ts +++ b/packages/server/src/templates/github.ts @@ -1,4 +1,4 @@ -import { load } from "js-yaml"; +import { parse } from "toml"; /** * Complete template interface that includes both metadata and configuration @@ -86,7 +86,7 @@ export async function fetchTemplateFiles( try { // Fetch both files in parallel const [templateYmlResponse, dockerComposeResponse] = await Promise.all([ - fetch(`${baseUrl}/blueprints/${templateId}/template.yml`), + fetch(`${baseUrl}/blueprints/${templateId}/template.toml`), fetch(`${baseUrl}/blueprints/${templateId}/docker-compose.yml`), ]); @@ -99,7 +99,7 @@ export async function fetchTemplateFiles( dockerComposeResponse.text(), ]); - const config = load(templateYml) as CompleteTemplate; + const config = parse(templateYml) as CompleteTemplate; return { config, dockerCompose }; } catch (error) { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ac9e28093..282994f8a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -424,6 +424,9 @@ importers: tailwindcss-animate: specifier: ^1.0.7 version: 1.0.7(tailwindcss@3.4.7(ts-node@10.9.2(@types/node@18.19.42)(typescript@5.5.3))) + toml: + specifier: 3.0.0 + version: 3.0.0 undici: specifier: ^6.19.2 version: 6.19.4 @@ -723,6 +726,9 @@ importers: ssh2: specifier: 1.15.0 version: 1.15.0 + toml: + specifier: 3.0.0 + version: 3.0.0 ws: specifier: 8.16.0 version: 8.16.0 @@ -6982,6 +6988,9 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} + toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} @@ -14061,6 +14070,8 @@ snapshots: toidentifier@1.0.1: {} + toml@3.0.0: {} + tr46@0.0.3: {} tree-dump@1.0.2(tslib@2.6.3):