diff --git a/apps/api/src/lib/buildPacks/common.ts b/apps/api/src/lib/buildPacks/common.ts index f66464133..cea1d0b40 100644 --- a/apps/api/src/lib/buildPacks/common.ts +++ b/apps/api/src/lib/buildPacks/common.ts @@ -17,7 +17,7 @@ const nodeBased = [ 'nextjs' ]; -export function setDefaultBaseImage(buildPack: string | null, deploymentType: string | null) { +export function setDefaultBaseImage(buildPack: string | null, deploymentType: string | null = null) { const nodeVersions = [ { value: 'node:lts', diff --git a/apps/api/src/lib/buildPacks/nextjs.ts b/apps/api/src/lib/buildPacks/nextjs.ts index acf17ac8c..d7de9a482 100644 --- a/apps/api/src/lib/buildPacks/nextjs.ts +++ b/apps/api/src/lib/buildPacks/nextjs.ts @@ -69,7 +69,6 @@ export default async function (data) { await createDockerfile(data, baseImage); await buildImage(data); } - } catch (error) { throw error; } diff --git a/apps/api/src/lib/buildPacks/nuxtjs.ts b/apps/api/src/lib/buildPacks/nuxtjs.ts index e7b4ee0b7..d7de9a482 100644 --- a/apps/api/src/lib/buildPacks/nuxtjs.ts +++ b/apps/api/src/lib/buildPacks/nuxtjs.ts @@ -1,9 +1,13 @@ import { promises as fs } from 'fs'; -import { buildImage, checkPnpm } from './common'; +import { buildCacheImageWithNode, buildImage, checkPnpm } from './common'; const createDockerfile = async (data, image): Promise => { const { + applicationId, + buildId, + tag, workdir, + publishDirectory, port, installCommand, buildCommand, @@ -11,7 +15,8 @@ const createDockerfile = async (data, image): Promise => { baseDirectory, secrets, pullmergeRequestId, - buildId + deploymentType, + baseImage } = data; const Dockerfile: Array = []; const isPnpm = checkPnpm(installCommand, buildCommand, startCommand); @@ -36,21 +41,34 @@ const createDockerfile = async (data, image): Promise => { if (isPnpm) { Dockerfile.push('RUN curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm@7'); } - Dockerfile.push(`COPY .${baseDirectory || ''} ./`); - Dockerfile.push(`RUN ${installCommand}`); - if (buildCommand) { + if (deploymentType === 'node') { + Dockerfile.push(`COPY .${baseDirectory || ''} ./`); + Dockerfile.push(`RUN ${installCommand}`); Dockerfile.push(`RUN ${buildCommand}`); + Dockerfile.push(`EXPOSE ${port}`); + Dockerfile.push(`CMD ${startCommand}`); + } else if (deploymentType === 'static') { + if (baseImage.includes('nginx')) { + Dockerfile.push(`COPY /nginx.conf /etc/nginx/nginx.conf`); + } + Dockerfile.push(`COPY --from=${applicationId}:${tag}-cache /app/${publishDirectory} ./`); + Dockerfile.push(`EXPOSE 80`); } - Dockerfile.push(`EXPOSE ${port}`); - Dockerfile.push(`CMD ${startCommand}`); + await fs.writeFile(`${workdir}/Dockerfile`, Dockerfile.join('\n')); }; export default async function (data) { try { - const { baseImage, baseBuildImage } = data; - await createDockerfile(data, baseImage); - await buildImage(data); + const { baseImage, baseBuildImage, deploymentType, buildCommand } = data; + if (deploymentType === 'node') { + await createDockerfile(data, baseImage); + await buildImage(data); + } else if (deploymentType === 'static') { + if (buildCommand) await buildCacheImageWithNode(data, baseBuildImage); + await createDockerfile(data, baseImage); + await buildImage(data); + } } catch (error) { throw error; } diff --git a/apps/api/src/routes/api/v1/applications/handlers.ts b/apps/api/src/routes/api/v1/applications/handlers.ts index 9aeb7fa94..858bedd5b 100644 --- a/apps/api/src/routes/api/v1/applications/handlers.ts +++ b/apps/api/src/routes/api/v1/applications/handlers.ts @@ -48,6 +48,15 @@ export async function getImages(request: FastifyRequest) { port = '3000' } } + if (buildPack === 'nuxtjs') { + if (deploymentType === 'static') { + publishDirectory = 'dist' + port = '80' + } else { + publishDirectory = '' + port = '3000' + } + } return { baseImage, baseBuildImage, baseBuildImages, baseImages, publishDirectory, port } diff --git a/apps/ui/src/lib/templates.ts b/apps/ui/src/lib/templates.ts index 9ad0a9531..b2e27ad1c 100644 --- a/apps/ui/src/lib/templates.ts +++ b/apps/ui/src/lib/templates.ts @@ -95,7 +95,8 @@ export function findBuildPack(pack: string, packageManager = 'npm') { ...metaData, ...defaultBuildAndDeploy(packageManager), publishDirectory: null, - port: 3000 + port: 3000, + deploymentType: 'node' }; } if (pack === 'preact') { diff --git a/apps/ui/src/routes/applications/[id]/index.svelte b/apps/ui/src/routes/applications/[id]/index.svelte index a1874f502..52660af23 100644 --- a/apps/ui/src/routes/applications/[id]/index.svelte +++ b/apps/ui/src/routes/applications/[id]/index.svelte @@ -466,7 +466,7 @@ {/if} - {#if application.buildPack !== 'docker' && application.buildPack === 'nextjs'} + {#if application.buildPack !== 'docker' && (application.buildPack === 'nextjs' || application.buildPack === 'nuxtjs')}
{/if}