From 7f8428cd177be3b0078dca62a0b53a5d0df1b253 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Wed, 20 Apr 2022 22:23:25 +0200 Subject: [PATCH] fix: Deno configurations --- src/lib/buildPacks/common.ts | 23 +++++++++++++++++------ src/lib/buildPacks/deno.ts | 18 ++++++++++++++++-- src/lib/components/templates.ts | 8 ++++---- src/lib/database/applications.ts | 10 ++++++++-- src/lib/queues/builder.ts | 11 ++++++++--- src/lib/types/builderJob.ts | 2 ++ 6 files changed, 55 insertions(+), 17 deletions(-) diff --git a/src/lib/buildPacks/common.ts b/src/lib/buildPacks/common.ts index e6f62bd23..05313a3d2 100644 --- a/src/lib/buildPacks/common.ts +++ b/src/lib/buildPacks/common.ts @@ -92,7 +92,8 @@ export const setDefaultConfiguration = async (data) => { buildCommand, publishDirectory, baseDirectory, - dockerFileLocation + dockerFileLocation, + denoMainFile } = data; const template = scanningTemplates[buildPack]; if (!port) { @@ -103,9 +104,11 @@ export const setDefaultConfiguration = async (data) => { else if (buildPack === 'php') port = 80; else if (buildPack === 'python') port = 8000; } - if (!installCommand) installCommand = template?.installCommand || 'yarn install'; - if (!startCommand) startCommand = template?.startCommand || 'yarn start'; - if (!buildCommand) buildCommand = template?.buildCommand || null; + if (!installCommand && buildPack !== 'static') + installCommand = template?.installCommand || 'yarn install'; + if (!startCommand && buildPack !== 'static') + startCommand = template?.startCommand || 'yarn start'; + if (!buildCommand && buildPack !== 'static') buildCommand = template?.buildCommand || null; if (!publishDirectory) publishDirectory = template?.publishDirectory || null; if (baseDirectory) { if (!baseDirectory.startsWith('/')) baseDirectory = `/${baseDirectory}`; @@ -117,6 +120,9 @@ export const setDefaultConfiguration = async (data) => { } else { dockerFileLocation = '/Dockerfile'; } + if (!denoMainFile) { + denoMainFile = 'main.ts'; + } return { buildPack, @@ -126,7 +132,8 @@ export const setDefaultConfiguration = async (data) => { buildCommand, publishDirectory, baseDirectory, - dockerFileLocation + dockerFileLocation, + denoMainFile }; }; @@ -192,7 +199,11 @@ export async function copyBaseConfigurationFiles(buildPack, workdir, buildId, ap } ` ); - await saveBuildLog({ line: 'Copied default configuration file.', buildId, applicationId }); + await saveBuildLog({ + line: 'Copied default configuration file for Nginx.', + buildId, + applicationId + }); } } catch (error) { console.log(error); diff --git a/src/lib/buildPacks/deno.ts b/src/lib/buildPacks/deno.ts index ac06cc177..63c734312 100644 --- a/src/lib/buildPacks/deno.ts +++ b/src/lib/buildPacks/deno.ts @@ -2,9 +2,16 @@ import { buildImage } from '$lib/docker'; import { promises as fs } from 'fs'; const createDockerfile = async (data, image): Promise => { - const { workdir, port, startCommand, baseDirectory, secrets, pullmergeRequestId } = data; + const { workdir, port, baseDirectory, secrets, pullmergeRequestId, denoMainFile, denoOptions } = + data; const Dockerfile: Array = []; + let depsFound = false; + try { + await fs.readFile(`${workdir}${baseDirectory || ''}/deps.ts`); + depsFound = true; + } catch (error) {} + Dockerfile.push(`FROM ${image}`); Dockerfile.push('WORKDIR /app'); Dockerfile.push(`LABEL coolify.image=true`); @@ -23,10 +30,17 @@ const createDockerfile = async (data, image): Promise => { } }); } + if (depsFound) { + Dockerfile.push(`COPY .${baseDirectory || ''}/deps.ts /app`); + Dockerfile.push(`RUN deno cache deps.ts`); + } + console.log(denoOptions && denoOptions.split()); + Dockerfile.push(`COPY ${denoMainFile} /app`); + Dockerfile.push(`RUN deno cache ${denoMainFile}`); Dockerfile.push(`COPY .${baseDirectory || ''} ./`); Dockerfile.push(`ENV NO_COLOR true`); Dockerfile.push(`EXPOSE ${port}`); - Dockerfile.push(`CMD ${startCommand}`); + Dockerfile.push(`CMD deno run ${denoOptions ? denoOptions.split(' ') : ''} ${denoMainFile}`); await fs.writeFile(`${workdir}/Dockerfile`, Dockerfile.join('\n')); }; diff --git a/src/lib/components/templates.ts b/src/lib/components/templates.ts index 99aceabfe..2336afb7d 100644 --- a/src/lib/components/templates.ts +++ b/src/lib/components/templates.ts @@ -156,11 +156,11 @@ export function findBuildPack(pack, packageManager = 'npm') { if (pack === 'deno') { return { ...metaData, - installCommand: `yarn install`, - buildCommand: `yarn build`, + installCommand: null, + buildCommand: null, startCommand: null, - publishDirectory: `_site`, - port: 80 + publishDirectory: null, + port: 8000 }; } return { diff --git a/src/lib/database/applications.ts b/src/lib/database/applications.ts index 020b9ba75..d57e3f3e5 100644 --- a/src/lib/database/applications.ts +++ b/src/lib/database/applications.ts @@ -264,7 +264,9 @@ export async function configureApplication({ pythonWSGI, pythonModule, pythonVariable, - dockerFileLocation + dockerFileLocation, + denoMainFile, + denoOptions }: { id: string; buildPack: string; @@ -280,6 +282,8 @@ export async function configureApplication({ pythonModule: string; pythonVariable: string; dockerFileLocation: string; + denoMainFile: string; + denoOptions: string; }): Promise { return await prisma.application.update({ where: { id }, @@ -296,7 +300,9 @@ export async function configureApplication({ pythonWSGI, pythonModule, pythonVariable, - dockerFileLocation + dockerFileLocation, + denoMainFile, + denoOptions } }); } diff --git a/src/lib/queues/builder.ts b/src/lib/queues/builder.ts index bd66c05c6..8e1650106 100644 --- a/src/lib/queues/builder.ts +++ b/src/lib/queues/builder.ts @@ -46,7 +46,8 @@ export default async function (job: Job): Promise): Promise): Promise): Promise